首页/新闻资讯/正文详情

变转速变载荷下轴承退化指标构建:RBFNN-KPCA方法实战

发布时间:2026/9/24 4:49:32 来源:云帆数科 栏目:资讯中心
变转速变载荷下轴承退化指标构建:RBFNN-KPCA方法实战
简介这份资源面向具备机械工程或数据分析背景、熟悉Python与机器学习基础的研究生及设备状态监测研发人员针对变转速变载荷工况下滚动轴承振动信号受干扰、可靠性评估困难的问题复现了基于RBFNN与KPCA的退化指标构建方法。资源包内含1个PDF文件约992KB集中呈现论文核心算法流程与可运行代码解释涵盖时域与频域特征提取、RBF特征映射、KPCA降维及第一主成分作为退化指标的完整衔接逻辑。已有52人学习读者可据此理解RBFNN、KPCA与CNN、BiGRU等模型在工业信号处理中的集成应用并借助代码实例验证不同工况输入下的模型鲁棒性为早期故障预警与剩余使用寿命预测提供技术支持。1. 变转速变载荷下为什么轴承退化指标总在“装死”产线上跑得好好的滚动轴承一换到变转速、变载荷的实测工况退化指标就开始“装死”——要么全程平得像条直线要么在某个转速切换点突然跳一下让人根本不敢拿它做可靠性评估。这不是数据质量问题而是大多数退化指标构建方法默认了一个前提转速和载荷是恒定的。一旦这个前提被打破时域上的均方根、峭度这些经典指标就会被工况变化“污染”把转速升高误判成退化加剧把载荷下降误判成健康恢复。RBFNN-KPCA 这套组合正是冲着这个痛点来的。RBFNN 负责在变工况下拟合出健康基线KPCA 负责把高维特征里的非线性主成分提出来两者拼在一起构建出的退化指标能在转速和载荷同时变化时依然单调、稳定。这篇笔记面向的是做轴承寿命预测、可靠性评估的一线工程师和研究生尤其是那些手里只有变工况实测数据、又不想在特征工程上无限堆人力的人。接下来我会把论文里的方法拆成能跑通的代码把参数怎么调、坑在哪一条条讲清楚。2. RBFNN-KPCA 退化指标构建从原理到最小可跑通实现2.1 为什么是 RBFNN 加 KPCA而不是直接上 CNN滚动轴承的振动信号在变转速变载荷下频谱会整体平移和缩放。直接做 FFT 再取频带能量转速一变能量峰就跑到别的频带去了特征和退化程度之间的映射关系被破坏。常见做法是先做阶次分析或角度域重采样把转速影响去掉但阶次分析需要转速脉冲信号很多实测场景根本没有。RBFNN 在这里的角色是“工况归一化器”。它用径向基函数网络拟合健康状态下特征与转速、载荷之间的映射然后把实测特征减去这个健康基线得到残差特征。残差特征里工况变化带来的系统性偏移被扣掉了剩下的主要是退化引起的成分。KPCA 再对这个残差特征做核主成分分析因为残差和退化之间的关系往往是非线性的线性 PCA 抓不住。选 RBFNN 而不是 BP 网络是因为 RBFNN 在局部逼近上更稳训练样本少的时候不容易过拟合而且隐层中心一旦确定输出层是线性的调参压力小。KPCA 而不是自编码器是因为 KPCA 有闭式解不需要调网络结构对小样本更友好。2.2 特征提取时域、频域、时频域各取什么在构建退化指标之前先要从原始振动信号里提特征。我一般会取三类时域统计量、频域幅值、以及小波包能量。时域取均方根、峭度、峰值因子、裕度因子频域取转频及其谐波的幅值时频域用 db4 小波做三层分解取各节点能量比。import numpy as np from scipy.stats import kurtosis, skew from scipy.fft import fft import pywt def extract_features(signal, fs, rpm): signal: 一段振动信号长度建议 2048 或 4096 fs: 采样频率 rpm: 该段信号对应的转速 返回一维特征向量 feats [] # 时域 rms np.sqrt(np.mean(signal**2)) feats.append(rms) feats.append(kurtosis(signal)) feats.append(skew(signal)) feats.append(np.max(np.abs(signal)) / (rms 1e-12)) # 峰值因子 # 频域转频幅值 n len(signal) spec np.abs(fft(signal))[:n//2] * 2 / n freq np.fft.fftfreq(n, 1/fs)[:n//2] fr rpm / 60.0 idx np.argmin(np.abs(freq - fr)) feats.append(spec[idx]) # 小波包能量比 wp pywt.WaveletPacket(signal, db4, maxlevel3) energies [np.sum(np.array(node.data)**2) for node in wp.get_level(3)] total np.sum(energies) 1e-12 feats.extend([e / total for e in energies]) return np.array(feats)这段代码里rpm是必须传入的因为频域特征依赖转频位置。小波包能量比做了归一化避免载荷变化直接改变能量绝对值。特征向量长度是 4 1 8 13 维不算高后续 KPCA 处理起来很快。注意kurtosis和skew对早期微弱退化不敏感但对中期冲击类故障响应好所以保留。2.3 RBFNN 健康基线拟合训练集怎么选、中心怎么定RBFNN 的输入是转速和载荷输出是健康状态下的特征向量。训练集必须全部来自健康阶段而且转速和载荷要覆盖后续测试工况的范围。我一般会从健康数据里按转速-载荷网格采样每个网格点取若干段提取特征后取均值作为该工况下的健康特征。from scipy.spatial.distance import cdist class RBFNN: def __init__(self, n_centers20, sigma1.0): self.n_centers n_centers self.sigma sigma self.centers None self.W None def _rbf(self, X): dist cdist(X, self.centers, sqeuclidean) return np.exp(-dist / (2 * self.sigma**2)) def fit(self, X, Y): # X: (N, 2) 转速和载荷归一化后 # Y: (N, D) 健康特征 idx np.random.choice(len(X), self.n_centers, replaceFalse) self.centers X[idx] Phi self._rbf(X) # 加正则防止病态 self.W np.linalg.solve(Phi.T Phi 1e-6 * np.eye(self.n_centers), Phi.T Y) return self def predict(self, X): return self._rbf(X) self.W中心数量n_centers我一般取 15 到 30太少拟合不住工况变化太多会过拟合健康数据里的噪声。sigma控制径向基的宽度可以用中心之间的平均距离来估比如sigma np.mean(cdist(centers, centers))。输出层用正则最小二乘1e-6这个正则系数在特征量纲归一化后够用。训练前一定要把转速和载荷归一化到 [0,1]否则距离计算会被转速的大数值主导。2.4 KPCA 提取非线性主成分核函数和主成分数怎么定拿到残差特征后做 KPCA。核函数我常用高斯核因为残差和退化之间的关系通常是光滑非线性的。主成分数按累计贡献率 85% 到 95% 来定不要取太多否则会把噪声也当成退化信息。def kpca(residuals, n_components3, gamma0.1): residuals: (N, D) 残差特征 n_components: 保留的主成分数 gamma: 高斯核参数 N residuals.shape[0] # 高斯核矩阵 dist cdist(residuals, residuals, sqeuclidean) K np.exp(-gamma * dist) # 中心化 one_n np.ones((N, N)) / N K_c K - one_n K - K one_n one_n K one_n # 特征分解 eigvals, eigvecs np.linalg.eigh(K_c) idx np.argsort(eigvals)[::-1] eigvals eigvals[idx] eigvecs eigvecs[:, idx] # 归一化特征向量 eigvecs eigvecs / np.sqrt(eigvals 1e-12) # 投影 proj K_c eigvecs[:, :n_components] return proj, eigvals[:n_components]gamma是关键参数取值太大核矩阵接近单位阵抓不到全局结构太小则所有样本都相似主成分区分度低。我一般从1/D开始试D 是残差维度然后看第一主成分的单调性来微调。n_components取 2 到 4 之间取第一主成分作为退化指标的主成分或者取前几个主成分的加权和。加权系数可以用各主成分的方差贡献率。2.5 退化指标平滑与单调性校验别让指标来回跳KPCA 投影出来的第一主成分方向可能和退化方向相反而且会有局部波动。我一般做两件事一是用健康数据的投影均值定方向如果测试数据投影整体递减就取负号二是用滑动平均或 Savitzky-Golay 滤波平滑窗口长度取 5 到 11 点。from scipy.signal import savgol_filter def build_degradation_indicator(proj, window7): di proj[:, 0] # 方向校正假设健康阶段 DI 应接近 0 if np.mean(di[:10]) np.mean(di[-10:]): di -di # 归一化到 [0,1] di (di - di.min()) / (di.max() - di.min() 1e-12) # 平滑 di_smooth savgol_filter(di, window, 2) return np.clip(di_smooth, 0, 1)平滑窗口不要太大否则会把早期退化也抹掉。校验单调性用 Spearman 相关系数一般要求大于 0.9 才认为指标可用。如果单调性不够回头检查 RBFNN 的残差是否扣干净了工况影响或者 KPCA 的gamma是否合适。3. 变转速变载荷工况下的参数标定与验证流程3.1 转速-载荷网格怎么划健康数据怎么采变工况实验设计里转速和载荷的网格不能太稀否则 RBFNN 在网格之间插值时误差大。我一般按转速分 5 到 7 档载荷分 3 到 4 档交叉出 15 到 28 个工况点。每个工况点采 20 到 30 段健康数据每段 2048 点。转速范围要覆盖后续测试可能出现的最高和最低转速载荷同理。如果健康数据有限可以用插值补一些中间工况点但插值出来的特征只能用于训练 RBFNN不能用于验证。验证集必须来自真实采集的工况点否则评估结果会偏乐观。3.2 残差特征的正则化与异常段剔除RBFNN 预测的健康特征和实测特征相减得到残差。但实测健康数据里偶尔会有异常段比如传感器瞬断、电磁干扰这些段的残差会特别大。我一般用马氏距离做异常检测把残差马氏距离超过阈值比如 3 倍中位数绝对偏差的段剔除不参与 KPCA 训练。def remove_outliers(residuals, threshold3.0): median np.median(residuals, axis0) mad np.median(np.abs(residuals - median), axis0) z np.abs(residuals - median) / (mad 1e-12) mask np.all(z threshold, axis1) return residuals[mask], mask阈值不要设太紧否则会把早期退化也剔掉。我一般先用健康数据标定阈值然后固定下来用于测试数据。3.3 用单调性和鲁棒性两个指标验收退化指标验收退化指标我只看两个指标单调性和鲁棒性。单调性用 Spearman 相关系数鲁棒性用指标在健康阶段的方差与全寿命阶段方差的比值。单调性大于 0.9、鲁棒性小于 0.1才算合格。指标计算方式合格阈值说明单调性Spearman(DI, time) 0.9越接近 1 越好鲁棒性Var(DI_health) / Var(DI_all) 0.1健康阶段波动小趋势性线性回归斜率 / 残差标准差 0.5退化趋势明显如果单调性不够优先检查 RBFNN 的n_centers和sigma再看 KPCA 的gamma。鲁棒性不够通常是健康数据里的工况覆盖不全RBFNN 在测试工况上外推了。3.4 和经典指标对比RMS、峭度、马氏距离差在哪我拿同一组变工况数据把 RBFNN-KPCA 指标和 RMS、峭度、马氏距离做了对比。RMS 在转速升高时整体抬升和退化混在一起峭度对早期退化不敏感后期冲击出现才跳马氏距离对载荷变化敏感载荷一降就往下走。RBFNN-KPCA 指标在转速和载荷同时变化时依然保持单调上升健康阶段波动也小。这个对比说明变工况下不能直接用经典时域指标做退化评估必须先做工况归一化。RBFNN-KPCA 的代价是需要健康数据覆盖工况范围如果健康数据只有单一工况这套方法也退化成普通 KPCA。4. 避坑与排查RBFNN-KPCA 落地时最容易翻车的 5 个点4.1 现象退化指标在转速切换点出现台阶原因RBFNN 外推测试时转速超出健康数据覆盖范围RBFNN 在边界外做外推预测的健康特征偏离真实值残差出现台阶。解决方法是把健康数据的转速范围扩到测试范围之外或者在边界处加约束让 RBFNN 输出在边界外保持常数。4.2 现象KPCA 第一主成分和退化方向相反原因特征向量符号不确定KPCA 的特征向量符号是任意的eigh返回的符号可能每次不一样。解决方法是固定随机种子或者在得到投影后用健康阶段投影均值做方向校正确保健康阶段 DI 接近 0退化阶段 DI 上升。4.3 现象健康阶段 DI 波动大原因残差里还有工况残余RBFNN 拟合不够好残差里还有转速或载荷的残余影响。解决方法是增加n_centers或者把转速和载荷的交互项也作为 RBFNN 输入。另一个原因是健康数据分段太短特征估计方差大可以加长每段点数或做多段平均。4.4 现象早期退化被平滑掉原因Savitzky-Golay 窗口太大平滑窗口取 15 以上时早期微弱退化会被抹平。解决方法是用自适应窗口健康阶段用大窗口退化阶段用小窗口或者改用指数加权移动平均对近期数据加权更大。4.5 现象换一台同型号轴承指标完全不可比原因RBFNN 基线没迁移RBFNN 是在特定轴承的健康数据上训练的换一台轴承健康基线变了残差也变了。解决方法是用迁移学习在新轴承的健康数据上微调 RBFNN 的输出层或者用域适应方法对齐特征分布。如果只是做同一台轴承的退化评估这个问题不影响。5. 把 RBFNN-KPCA 指标接到可靠性评估里的一个实用技巧退化指标构建出来只是第一步真正做可靠性评估时还要把 DI 映射到失效阈值和剩余寿命分布。我一般用 DI 首次超过 0.8 作为失效点然后用 Wiener 过程或 Gamma 过程拟合 DI 的退化轨迹外推剩余寿命。这里有个实用技巧不要直接用 DI 的原始值做拟合先对 DI 做对数变换因为退化后期 DI 上升会加速对数变换后更接近线性外推更稳。from scipy.optimize import curve_fit def fit_wiener(di, dt1.0): di: 退化指标序列 dt: 采样间隔 返回漂移率和扩散系数 di_log np.log(di 1e-6) t np.arange(len(di_log)) * dt # 线性拟合 coeffs np.polyfit(t, di_log, 1) drift coeffs[0] # 扩散系数用残差方差估计 residual di_log - np.polyval(coeffs, t) diffusion np.var(residual) / dt return drift, diffusiondrift是漂移率diffusion是扩散系数两者一起决定剩余寿命分布的均值和方差。失效阈值取 DI0.8 对应的对数阈值然后解首次命中时间的分布。这个技巧在变工况数据上比直接拟合 DI 更稳因为对数变换压缩了后期加速段减少了外推误差。我自己的习惯是每次拿到新的变工况数据先跑一遍健康数据标定 RBFNN 和 KPCA 参数再跑测试数据看单调性和鲁棒性两个指标都过了才做可靠性评估。如果单调性不到 0.9我不会硬着头皮往下做而是回头查工况覆盖和残差质量。这套流程我用了两年多翻车次数不少但每次翻车都能定位到具体参数或数据问题比黑匣子式的深度学习方法好排查得多。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

华为S5700 VLAN配置与排障实战指南
华为S5700 VLAN配置与排障实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 4:49:02

Kornia 修复深度解析:HyNet 与 SOSNet 半精度描述符的 CPU/GPU 稳定性改造
Kornia 修复深度解析:HyNet 与 SOSNet 半精度描述符的 CPU/GPU 稳定性改造

计算机视觉人工智能深度学习图像处理 【免费下载链接】kornia 🐍 Geometric Computer Vision Library for Spatial AI 项目地址: https://gitcode.com/gh_mirrors/ko/kornia 点击查看 免费下载 本文基于 Kornia 仓库 changelog.d/migration-085.fixed.m… · 2026/9/24 4:48:49

@formily/reactive-vue observer:将 Vue 组件渲染变为 Reaction 响应式追踪的完整指南
@formily/reactive-vue observer:将 Vue 组件渲染变为 Reaction 响应式追踪的完整指南

前端UI组件 【免费下载链接】formily 📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/24 4:48:43

运放恒流源设计:从原理矛盾到高精度实战
运放恒流源设计:从原理矛盾到高精度实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 5:33:46

centos7连接不上finals hell的排查方法
centos7连接不上finals hell的排查方法

#是自己在学习linux中遇到的问题,记录下来,有错误请指出,仅供参考第一步确认虚拟机ip命令:ip a找到ip地址,是在ens33下面的inet那里第二步在Windows系统cmd里面ping通虚拟机ip这是能ping通网络通路没问题 → 问题在 Li… · 2026/9/24 5:33:34

FPGA凭什么扛起边缘AI大旗?从原理到落地实践全解析
FPGA凭什么扛起边缘AI大旗?从原理到落地实践全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 5:33:34

【雷达学习笔记 02】距离高分辨是怎么来的?——宽带信号、脉冲压缩与一维距离像
【雷达学习笔记 02】距离高分辨是怎么来的?——宽带信号、脉冲压缩与一维距离像

【雷达学习笔记 02】距离高分辨是怎么来的?——宽带信号、脉冲压缩与一维距离像 这是《雷达成像技术》学习记录的第 2 篇,对应第二章 2.1–2.3 节。 第二章的主线一句话:雷达怎么通过宽带信号得到"一维距离像",以及一维… · 2026/9/24 5:33:28

LLC谐振变换器原理与实战避坑指南
LLC谐振变换器原理与实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 5:33:28

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码