尧图精选

轴承故障诊断实战:MATLAB包络分析与特征频率提取

🕒 发布时间:2026/10/2 4:17:35 📁 来源:尧图网络
1. 轴承故障为什么能在振动信号里留下“指纹”1.1 故障冲击的物理过程先说一个很多人容易忽略的事实轴承故障诊断这件事核心不是“用MATLAB算一个数”而是先理解轴承到底在怎么坏。深沟球轴承的结构就四样东西——内圈、外圈、滚动体、保持架。正常情况下滚动体在内外圈滚道之间滚动振动信号是平稳的频谱上只有转频成分和一些随机微幅噪声。可一旦滚道上出现点蚀、剥落或者裂纹情况就完全变了滚动体每经过缺陷位置一次就会产生一次机械冲击这个冲击会激起轴承座或者传感器安装点附近的结构共振。所以你在传感器上看到的信号是“高频衰减振荡”被周期性地触发触发频率就是故障特征频率。这一步认知非常关键因为它决定了后面的处理路线。故障冲击本身的能量往往不大尤其在早期它的幅值可能比正常的旋转振动小一个数量级以上。直接用FFT看原始频谱故障频率附近的谱线很容易淹没在噪声里。这也是为什么很多新手用MATLAB把FFT一顿操作输出频谱图里什么都看不出来就下结论说“轴承没问题”——其实问题不在于轴承在于方法没选对。1.2 为什么原始频谱经常看不到故障频率原始频谱里看不到故障频率有三个主要原因。第一冲击信号的能量分布在整个频带上而不是集中在某一个窄频段信噪比被摊薄了。第二故障冲击相当于对高频载波进行幅值调制调制后的能量集中在固有频率附近的频带上而非特征频率处。第三实际测量中存在轴系不对中、齿轮啮合、流体扰动等强干扰低频率段的谱线常常比故障特征频率高出很多。理解这三条你才能明白为什么业内做轴承诊断首选的不是普通FFT而是“带通滤波包络解调”。这个方法本质上是先把原始信号中与冲击相关的共振频段单独取出来再把这个频段里的振荡“整流”成低频包络最后对包络做FFT。包络谱里的峰值就对应故障冲击的重复频率这才是从信号里“揪”出故障的正路。这套技术路线在MATLAB里实现起来不复杂几十行代码就能跑通。真正决定成败的是特征频率算得准不准、带通滤波的中心频率选得对不对、以及谱图怎么判读。下面我把每一步都拆开讲包括我踩过的坑。2. 先把特征频率算清楚后面才有方向2.1 四个特征频率的物理含义做轴承诊断之前必须先知道故障特征频率是多少。特征频率是根据轴承几何参数、转速和接触角计算出来的理论频率它是你判断包络谱峰值的“参考刻度”。四种典型故障各有各的频率公式滚动体在外圈滚道上产生缺陷触发频率叫外圈故障频率BPFO内圈缺陷对应的叫内圈故障频率BPFI滚动体本身有缺陷时它每自转一圈触发两次冲击对应滚动体故障频率BSF保持架损伤则不直接产生冲击而是通过搅动滚动体改变其他频率成分对应保持架频率FTF。这几个频率之间有明确的大小关系以常见的6205轴承为例在转速1500rpm附近BPFO大约在90Hz左右BPFI大约在140Hz左右BSF大约在60Hz左右FTF只有十几赫兹。记住这个量级关系后面看谱图时心里有数。实际应用中计算特征频率最好写成一个函数方便批量处理不同型号的轴承。公式里的关键参数是滚动体直径BD、节圆直径PD、滚动体数量n、接触角β深沟球轴承近似为0、转频fr。计算时注意单位统一转速通常要转换成Hzrpm除以60。2.2 一个实际算例以6205深沟球轴承为例以工程上最常见的6205轴承为例几何参数大致为滚动体直径BD7.94mm节圆直径PD39.04mm滚动体数量n9接触角近似为0。假设转速为1772rpm对应转频fr29.53Hz。代入公式可得BPFO159.7HzBPFI253.4HzBSF105.8HzFTF11.8Hz。function [BPFO, BPFI, BSF, FTF] BearingFreq(BD, PD, n, beta, fr) % BD: 滚动体直径(mm), PD: 节圆直径(mm) % n: 滚动体数量, beta: 接触角(rad), fr: 转频(Hz) term BD / PD * cos(beta); BPFO n / 2 * fr * (1 - term); BPFI n / 2 * fr * (1 term); BSF PD / (2 * BD) * fr * (1 - term^2); FTF fr / 2 * (1 - term); end把这组数值记好后面包络谱上如果出现了159.7Hz的谱峰并且这个频率的幅值明显高于底噪水平基本就可以判断外圈存在早期损伤。需要注意的是理论值是几何参数换算出来的实测时由于轴承磨损、径向游隙变化、载荷方向影响故障频率会有微小的偏差一般允许有1%~2%的偏差。所以判读谱峰时别对着理论值死抠应该先找到峰值再看它和理论值是不是“对得上”。3. 数据预处理决定成败的“脏活”3.1 采样率与数据质量的检查很多人上手做轴承诊断拿来数据就直奔FFT结果往往在采样率和数据质量上翻车。轴承冲击信号是宽带信号通常需要覆盖到20kHz以上才能捕捉到足够的共振频段。一般建议采样率至少20kS/s最好50kS/s以上。如果采样率不够包络分析时最高分析频带受到限制共振频段可能根本采集不到后面再怎么处理也是白搭。拿到数据之后第一件事不是分析而是做三个检查。第一看信号里有没有削波波形峰值如果被削成平头说明量程设置不合适这种数据基本作废。第二看有没有明显的趨勢项或零漂长时间采集的数据容易出现缓慢漂移这会让FFT在零频附近出现巨大的伪峰必须在分析前处理掉。第三看信号长度够不够做频率分辨率需求的分辨率频率分辨率等于采样率除以点数如果想分辨1Hz以内的间隔采样率50kS/s就需要至少50000个点对应的数据时长是1秒实测中建议至少采集10秒以上的数据方便对多段做平均。% 检查数据质量削波与趋势项 if max(abs(x)) 0.95 * fullScale warning(检测到削波请检查量程设置); end x detrend(x); % 去除线性趋势项3.2 去趋势、滤波与速度波动处理预处理里最关键的一步是带通滤波但带通滤波的频带选择是有讲究的。前面说过故障冲击会激起轴承座的结构共振包络分析的原理就是把这个共振频段的能量提取出来。如果滤波频带选得太低滤掉的全是转频和齿轮啮合等常规振动选得太高信噪比又不行。工程上比较稳妥的做法是先对原始信号做一次全频段FFT找到明显的共振峰群区域然后以这个区域为中心设置带通滤波参数。如果没有先验信息我建议先在2kHz-10kHz这个范围试观察包络谱的信噪比然后微调。速度波动是另一个容易被忽略的问题。实际设备不可能严格匀速转速波动会导致特征频率随时间漂移。用固定频率分辨率做FFT时谱峰会变宽甚至模糊。处理思路有两种一是采集时同步记录转速信号做阶比跟踪二是对转速波动不大的工况用分段后的短时FFT做平均接受谱峰轻微的展宽。MATLAB里可以用resample配合转速脉冲信号实现简单的阶比跟踪但对大多数工业现场诊断来说分段平均已经够用。% 预处理的典型顺序去趋势 - 带通滤波 - 分段 fc 5000; % 带通中心频率根据共振峰调整 bw 4000; % 带宽 [b, a] butter(2, [(fc-bw/2) (fcbw/2)] / (fs/2), bandpass); x_filt filtfilt(b, a, detrend(x)); % filtfilt避免相位偏移这里特别强调用filtfilt而不是filter原因在于零相位滤波可以避免信号相位畸变。对包络分析这种对时间序列特征敏感的处理相位偏移会造成包络波形的形变进而影响特征频率处的谱峰幅值。这个小细节教科书上不一定写但实际对比过就知道差别不小。4. 包络解调揪出轴承故障的核心招4.1 包络分析为什么有效包络分析的原理用大白话说就是把信号里高频振荡的“外壳”剥离出来。故障冲击激起的共振振荡幅值本身是周期性变化的——这个变化周期的倒数就是故障特征频率。Hilbert变换可以构造出信号的解析信号解析信号的模就是包络。对包络做FFT得到的谱图里峰值的频率就是故障冲击的重复频率。很多入门资料直接拿原始信号做FFT然后看到侧边带就晕了。原始频谱里确实存在特征的边带——因为故障冲击对固有频率分量做了调幅但边带幅值低、干扰多不容易识别。包络谱把这些边带能量重新集中到了特征频率本身信噪比大幅提高。这也是包络分析和“共振解调”在工业诊断软件里几乎成为标配的原因。4.2 MATLAB实现流程与完整代码整个处理流程可以浓缩为五步带通滤波、Hilbert包络、去除包络直流分量、加窗做FFT、画谱图找峰值。function [f_axis, env_spec] BearingEnvelope(x, fs, fc, bw) % 1. 带通滤波 [b, a] butter(2, [(fc-bw/2) (fcbw/2)] / (fs/2), bandpass); x_filt filtfilt(b, a, x); % 2. Hilbert变换求包络 env abs(hilbert(x_filt)); % 3. 去除直流分量避免零频大峰 env env - mean(env); % 4. 加窗FFT N length(env); win hanning(N, periodic); env_spec abs(fft(env .* win, N)); % 5. 频率轴只取正频段 f_axis (0:N-1) * fs / N; half round(N/2); f_axis f_axis(1:half); env_spec env_spec(1:half); end实测中我习惯把这段封装成函数因为后续还要批量处理多个测点、多段数据。加窗这步容易被人忽略但直接对包络做FFT时信号首尾的不连续会在谱图上产生泄漏假峰。用Hanning窗可以明显压低旁瓣。频率分辨率方面如果采样率是25.6kHz、点数取10秒时长分辨率是0.1Hz足够分辨故障频率的边带。4.3 怎么看包络谱判断故障部位拿到包络谱后判断故障部位其实是一道“对号入座”题。在谱图上找到最高的几个谱峰把它们对应的频率和理论特征频率对照。如果峰值出现在BPFO以及它的2倍频、3倍频上说明外圈有故障如果出现在BPFI附近并且伴随转频边带BPFI左右两侧相隔转频fr的峰值说明内圈有故障如果滚动体故障谱峰在BSF处而且通常会在BSF两侧出现保持架频率边带。如果谱峰出现在转频的低倍频处那更可能是转子不平衡或轴弯曲而非轴承故障。内圈故障伴随转频边带的机理值得多说两句内圈是旋转的缺陷随内圈转动传感器相对缺陷的位置周期性变化造成冲击幅值被转频调制所以包络谱里必然出现BPFI ± 转频的边带。看到这种“族谱”式的谱峰结构基本可以确诊内圈故障。这类判读经验跑几十次实际数据自然就熟了但一开始对照着理论值看是最稳妥的上手方式。5. 时域指标与频域特征的配合包络谱虽然强大但一个指标打天下是不可靠的。实际工程里我习惯先用时域统计指标做快速筛查再用包络谱做确认。时域指标里最有用的四个是均方根值RMS、峰值、峭度Kurtosis、峰值因子Crest Factor。RMS反映整体振动能量大小对润滑不良、载荷变化敏感但早期轴承故障对RMS的影响很小。峭度对冲击型信号特别敏感正常轴承振动接近高斯分布峭度接近3出现早期剥落时峭度会明显上升到4~6甚至更高。所以峭度是很好的早期预警指标但要注意它在故障发展后期反而会回落——当剥落范围扩大冲击不再是“稀疏的大冲击”而是“连续的小冲击”信号趋近高斯峭度又降回3附近。所以峭度低不等于没问题必须结合趋势判断。频域方面除了包络谱原始频谱也不是完全没用。原始频谱适合看齿轮啮合频率、转频谐波这类成分对识别不对中、松动等问题更直接。轴承故障早期原始频谱里体现为高频段共振频带的能量整体抬升这种变化肉眼不一定看得出来但可以对这个频带做宽带能量积分作为趋势监测的特征量。我把常用的特征量做了一张速查表方便新手按场景选用指标/方法适用阶段对早期故障的敏感性典型判据RMS整体状态低超基线30%以上需警惕峭度早期点蚀高接近或超过4峰值因子中早期中波动大于50%原始FFT频谱中后期低出现转频边带族包络谱全阶段最高峰值落在特征频率处实际项目里我的固定套路是先并行计算时域特征和包络谱时域指标异常就提示“可能有问题”包络谱确认“问题在哪里”。两者形成证据链比单看任何一个指标都可靠得多。这也符合故障诊断的基本逻辑——诊断结论要能被不同类别的证据交叉印证。6. 实操中踩过的坑附排查速查表6.1 五个典型坑第一个坑是带通滤波频带选得不对。我有一次处理风机轴承数据按经验选了2kHz~5kHz的滤波频带包络谱里出现了一堆莫名其妙的峰值怎么也对不上特征频率。后来我做了原始信号的瀑布图发现真正的结构共振频率在11kHz附近2~5kHz那段其实是被齿轮啮合的边带污染的。解决方案是先做全频带FFT找共振峰再定滤波参数。从那以后我再也不敢拍脑袋选频带了。第二个坑是转速没有同步记录导致特征频率计算偏差。有一个案例现场转速表显示1500rpm实际电动机带负荷后有3%的转差转频差了1.5HzBPFO就差了几赫兹。按理论值去匹配谱峰明明峰值就摆在那里却因为对不上而误判为“非轴承故障”。现在我的做法是用频谱里的转频峰值先反算实际转频再用它去算特征频率相当于把时钟对准了再看表。第三个坑是Hilbert变换的端点效应。MATLAB的hilbert函数处理长数据时很稳但数据长度太短时首尾一段的包络会出现明显的畸变导致谱图上出现低频伪峰。解决方法是把数段拼长再处理或者在FFT之前把包络信号首尾各截掉5%~10%的样本。我习惯用10秒以上的数据端点效应影响就几乎看不出来了。第四个坑是谱图判读时“看到峰就激动”。包络谱上任何一个峰都会有旁瓣和底噪而且电源工频50Hz及其倍频也可能混进来尤其在电气设备上。判读时不能只看有没有峰还要看峰高相对底噪是否足够突出——我一般要求主峰幅值达到底噪的5倍以上才认定有故障。否则那可能只是随机波动。第五个坑是忽略载荷波动对信号的影响。轴承的诊断特征频率本身对载荷不敏感但载荷波动会改变冲击强度导致包络谱的幅值忽高忽低。如果要对比不同时间段的数据尽量在相近的工况下采集或者对包络谱做归一化处理比如把特征频率处的峰值除以该频段的总能量。6.2 排查方法速查现象常见原因排查方法包络谱全是噪声无特征峰滤波频带偏离共振区做全频带FFT寻找共振峰群峰位置对不上理论值转速不准/游隙影响用转频峰值反算实际转速零频处有巨大谱峰未去除包络直流分量包络信号减去均值谱线杂乱、旁瓣高未加窗或数据段过短加Hanning窗增加数据长度某次值突跳后回落载荷波动或偶发冲击多测几段求平均排除偶发因素排查这类问题我个人的经验是“一次只改一个变量”。改滤波器、改窗、改数据段每次改完看谱图变化这样很快就能定位问题。大多数人卡壳是因为同时改了三四个地方出了问题根本不知道哪一步引入的。最后再分享一个小技巧处理完一段数据后把特征频率处的幅值、峭度、RMS连同转速一起存成一个表格累积几周后画趋势线。早期故障的特征在趋势线上往往比单次谱图更明显——因为单次数据受工况干扰太多趋势能把这些随机因素平滑掉。做故障诊断盯着“一段时间的变化”比盯着“一个瞬间的数值”更有价值。这套方法我在好几类设备上都验证过只要数据质量和预处理把关到位MATLAB这套流程完全够用。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →