资讯动态

非下采样小波包精细滤波与包络谱分析:轴承故障诊断实战指南

发布时间:2026/10/9 6:40:00 来源:尧图企业网站定制
做轴承故障诊断的人十有八九都被“提特征”这件事折磨过。设备一旦出现早期点蚀、剥落或者轻微磨损振动信号里其实不是没有故障信息而是故障产生的瞬态冲击被强背景噪声盖得严严实实。常规频谱分析很难直接看出问题这时候“非下采样小波包精细滤波包络谱分析”这条路径就特别值得认真研究。这篇文章我打算把整套方法从原理拆到实操讲清楚为什么非下采样小波包比普通小波包更适合轴承故障诊断、精细滤波到底在滤什么以及实际跑数据时你会踩到哪些坑。这套东西适合三类人一是做设备健康管理、状态检修的现场工程师手里有振动数据但不知道怎么把故障特征干净地提出来二是刚接触故障诊断的研究生想搞明白小波包、包络谱、特征频率这些概念是怎么串起来的三是自己捣鼓传感器和信号处理硬件的极客想把诊断算法做扎实。读完你至少能独立处理一段轴承振动信号找到对应的故障特征频率。1. 为什么轴承故障诊断要上“精细滤波”1.1 传统方法的瓶颈故障特征不是没有而是被淹没了轴承故障信号有一个典型特点冲击成分是非平稳的、瞬态的持续时间短频谱上会形成以固有频率为中心的调制边带同时能量又远远低于齿轮啮合、轴系不平衡、随机噪声这些干扰成分。拿滚动轴承最常见的点蚀故障来说损伤点每经过载荷区一次就产生一次冲击这个冲击激励起轴承座和传感器通道的高频共振故障特征频率比如外圈BPFO、内圈BPFI只是对高频共振的幅值调制频率值往往只有几十到几百赫兹而调制载波可能分布在几千赫兹甚至上万赫兹。FFT频谱直接看时问题特别明显低频段是转频及其谐波和大能量干扰高频段是一片噪声基底故障特征频率对应的谱线即使存在也低到几乎看不见。更麻烦的是直接对原始信号做带通滤波再求包络谱带通中心和带宽选不好效果会差很多。传统小波变换虽然能时频局部化但对高频段的频率细分不够细致而且带有下采样步骤信号一旦发生微小平移各尺度的小波系数就会剧烈变化。对故障冲击这类随机出现的瞬态成分这种“平移敏感性”会导致提取结果很不稳定。1.2 非下采样小波包到底解决了什么非下采样小波包的核心改进有两点一是保留小波包对高频段也做精细细分的特性二是把每一层分解时的下采样操作去掉让各子带信号和原始信号保持等长。去掉下采样听起来只是算法细节带来的性能变化却是根本性的整个分解过程变成平移不变的冲击不管出现在信号哪个位置分解系数的能量分布基本稳定同时子带长度不变频率分辨率比传统小波包高一个档次后续做精细滤波时能更精准地圈住故障调制频带。我个人的理解是非下采样小波包相当于构造了一组“高通、低通滤波器组”把整个频谱切成越来越细的频带然后对每个频带里的分量做窄带观察。轴承故障冲击的共振频带往往只有几百赫兹宽传统小波包切出来的频带可能太宽把噪声一起放进来了非下采样小波包能切得更细而且不会因为下采样丢掉冲击相位信息。说白了普通小波包是“看完一个大房间再决定哪个角落有问题”非下采样小波包是“直接把房间隔成小单间一个一个听声音”。2. 非下采样小波包分解与精细滤波原理拆解2.1 从离散小波变换到非下采样小波包的演进逻辑要理解非下采样小波包先得知道标准小波包的问题出在哪。标准离散小波变换DWT每一层分解后都做二抽一的下采样信号长度减半这是为了保持总数据量不变属于传统的正交变换思路。但下采样会带来两个副作用采样率降低后信号平移一个采样点各层小波系数的位置和幅值会发生明显变化高频子带还可能因为抽取产生频谱混叠也就是相邻频带的成分“串门”。非下采样小波包沿用了小波包“对高频细节也继续分解”的思想但不再做抽取。它使用的是所谓的“à trous”带孔算法思路每一层对滤波器做上采样即滤波器系数之间插入零点再与上一层得到的子带信号做卷积。这样每一层子带依然与原始信号长度相同总数据量会以约2^J的速度膨胀但换来的是平移不变性和更规则的频带划分。实际工程里一般认为它属于一种冗余、平移不变的信号表示方法和EMD这类自适应分解比起来它更有固定的频带意义解释性更强。从频带划分角度看第J层非下采样小波包会得到2^J个子带每个子带的频带宽度为fs/2^(J1)fs为采样率。举个例子采样率25600Hz分解到第4层得到16个子带每个子带理论带宽是800Hz。这个800Hz的频带宽度对轴承共振频带来说非常合适既能包含冲击调制的边带又能排除大部分噪声干扰。如果你要捕捉更窄的调制特征可以继续加深层数但计算量会成倍上涨。2.2 精细滤波的本质窄带选择与冲击保持很多人把滤波理解成“把信号弄干净”但在轴承故障诊断里精细滤波要做的不是简单去噪而是“选择性地保留故障调制所在的窄带然后解调”。冲击信号经过轴承座传递到传感器会激励起结构共振所以故障信息主要集中在某些共振频带内。精细滤波做的是先用非下采样小波包把信号分解到足够细的频带再根据某个子带或几个相邻子带的能量、峭度、包络谱特征把它们选出来重构丢掉无关频带。这里的“精细”体现在两个层面。第一是频率域上的精细非下采样小波包子带划分细可以选择更准确的共振频带而不是像传统带通滤波器那样凭经验拍脑袋定中心频率和带宽。第二是保留信号细节的精细因为没有下采样重构时就不会出现因插值或抽取导致的波形失真冲击的起振时刻和衰减过程能更完整地保留下来这对后续包络解调非常关键。操作上我一般先把分解后的子带按“包络谱峰值因子”或“谱峭度”排序选出包含故障调制成分最明显的子带。所谓谱峭度就是计算每个频带信号的峭度值故障冲击越明显峭度越高。这个指标比单纯看能量可靠得多故障频带能量不一定最高但峭度一定突出。2.3 小波基与分解层数的选择逻辑选小波基没有绝对标准但有几个经验值可以直接参考。处理轴承振动冲击信号推荐Daubechies系db10、db12和Symlets系sym8、sym10。这两种小波有一定的正则性波形和冲击衰减形态比较接近能在分解时把冲击能量“压”到少数系数里。Haar小波虽然简单但波形太陡对非平稳振动的表示效果不好。Biorthogonal双正交小波在图像处理里常用轴承振动里我用得少重构对称性虽好但频带划分没那么直观。分解层数J的选择需要平衡频带宽度和计算量。理论上J越大频带越窄频率分辨率越高但数据膨胀带来的内存和耗时压力也越大。对于采样率25600Hz、共振频带集中在2kHz-8kHz的滚动轴承J4或5就够用了。J4时子带带宽800HzJ5时带宽400Hz。模拟信号测试时我会先跑J4观察包络谱效果不够再加深到J5。J超过6以后瓶颈往往不再是效果而是你的笔记本内存还能不能撑住。注意分解层数不是越多越好。层数太深时每个子带带宽过窄故障调制的边带可能被切到相邻子带里导致能量分散反而削弱特征。遇到这种情况与其盲目加深层数不如把选中的几个相邻子带合并重构。3. 实操从振动信号到故障特征频率的完整流程3.1 数据准备与转频信息获取开始处理前先确保两件事一是采样率合适二是转频计算准确。轴承故障特征频率本质上是“每转发生多少次冲击”的统计值转速一变特征频率也跟着变。所以现场测量时最好同步记录转速或者从振动信号里用频谱识别转频。采样率的设置直接决定能看到多高的共振频带。一般建议采样率至少是预期共振频率的4到5倍。工业现场常用的加速度传感器采样率设在25600Hz或51200Hz比较稳妥。采样时间也要足够长至少包含几十转的数据否则包络谱频率分辨率不够没法区分邻近的特征频率。比如转频30Hz采样2秒频率分辨率约0.5Hz能分辨外圈故障频率138Hz和保持架故障频率11.5Hz足够用了。拿到数据后先做一遍原始信号预览看趋势项重不重、有没有明显的冲击。如果有很大的直流偏置或低频趋势先去均值、去趋势。这一步别省后面滤波分量的质量很大程度上取决于预处理干不干净。3.2 精细滤波参数设置与子带选择预处理完成开始非下采样小波包分解。如果你用MATLAB可以借助SWT平稳小波变换实现非下采样分解思路但标准SWT只做低频每层分解不做高频小波包细分想要非下采样小波包需要自己写滤波器组循环。Python里也没有现成的非下采样小波包库我一般基于PyWavelets的滤波器系数自己实现à trous分解。分解后不要急着重构。我习惯按以下几个步骤选子带计算每个子带的峭度值找出峭度最大的前三个子带。对这三个子带分别求包络谱观察有没有候选故障特征频率及其倍频。如果某个子带的包络谱在故障特征频率处出现明显谱峰且倍频成谐波序列就把这个子带标记为精细滤波的目标频带。重构时可以单独选一个子带也可以把峭度高、包络谱特征一致的相邻2到3个子带合并效果通常更稳定。这其实就是“精细滤波”落地时的核心操作不是靠眼睛瞎猜中心频率而是让数据告诉你在哪个频带做窄带滤波。3.3 故障特征频率计算先知道你要找什么处理轴承数据前先把特征频率算出来后面看包络谱才有方向。下面的公式适用于滚动轴承外圈故障频率BPFO z·fr/2 · (1 - d/D · cosα)内圈故障频率BPFI z·fr/2 · (1 d/D · cosα)滚动体故障频率BSF D·fr/(2d) · [1 - (d/D)² · cos²α]保持架故障频率FTF fr/2 · (1 - d/D · cosα)其中z是滚动体数量fr是转频d是滚动体直径D是节圆直径α是接触角。举一个我常用的示例参数滚动体数z12节圆直径D65mm滚动体直径d15mm接触角α0°转频fr30Hz。代入计算故障类型计算结果外圈BPFO138.5 Hz内圈BPFI221.5 Hz滚动体BSF61.5 Hz保持架FTF11.5 Hz那如果在外圈故障的包络谱里138.5Hz处出现峰值同时在277Hz2倍频、415Hz3倍频也看到衰减的谱峰基本可以锁定外圈故障。内圈故障的特征频率通常会伴随转频调制边带这是因为故障点随轴旋转冲击的幅值会被转频周期性调制。3.4 包络谱解调从滤波信号里提取低频特征精细滤波后信号里剩下的主要是高频共振分量人眼看不出规律需要做包络解调。标准做法是用Hilbert变换求解析信号的幅值得到包络波形再对包络做FFT得到包络谱。包络谱里的横坐标就是调制频率能直接和理论故障特征频率对照。我贴一段常用的Python处理逻辑import numpy as np from scipy.signal import hilbert def envelope_spectrum(signal, fs): analytic hilbert(signal) envelope np.abs(analytic) n len(envelope) spectrum np.abs(np.fft.rfft(envelope - envelope.mean())) freqs np.fft.rfftfreq(n, 1 / fs) return freqs, spectrum这段代码的重点是先对包络去均值否则包络里的直流分量会占据谱图最高峰故障特征频率的谱线反而不明显。实际效果上看故障冲击的包络谱在特征频率处会产生尖锐谱峰噪声的包络谱则相对平坦一眼就能分开。4. 实战中反复踩过的坑与排查技巧4.1 边界效应信号两端的那点“假冲击”无论哪种小波变换处理有限长信号时边界都是个大问题。信号开头和结尾经过延拓再滤波重构后会出现幅值异常或者伪造的冲击成分如果你正好在边界段看到了“故障特征”很容易被误导。我吃过这个亏有次一个正常轴承的数据因为边界效应愣是提了一个不存在的特征频率出来。解决办法不外乎几种信号长度不要太短最好包含足够多的冲击周期分解前用对称延拓或周期延拓预处理处理后舍弃两端各一定长度的数据如果故障冲击恰好在边界附近干脆把这部分数据切掉重新分析。非下采样小波包虽然比普通小波包对平移更不敏感但边界问题并不会凭空消失。4.2 计算代价与内存优化非下采样小波包的冗余特性是把双刃剑。J5时数据量放大到原来的32倍左右2秒钟、25600Hz采样率的一段信号约51200个点分解后得到32个子带每个子带51200点总点数为1638400存成float64大约13MB看起来不多。但如果你做在线监测连续处理长数据内存会很快吃紧。更麻烦的是每层分解要和对偶滤波器做卷积计算量远大于普通小波包。实际处理时我的经验是先用一小段数据1到2秒离线试算选定层数和子带后再用同样参数批量跑剩余数据。千万别上来就把几百万个点的长信号一次性做全分解既慢又容易让程序崩溃。矩阵运算能向量化就向量化能用单精度就单精度甚至可以对原始信号做滑动窗口分段处理最后再把各段包络谱做平均这样还能抑制噪声。4.3 小波基不匹配与频带选择误区如果小波基的波形和故障冲击脉冲形态差得太远分解后冲击能量会分散到很多子带里每个子带的峭度都会不高不低选择起来很困惑。这种情况我一般会换小波基重跑一版对比。判断标准不是理论指标而是同一个故障特征频率在不同小波基下的包络谱是否稳定出现。如果换了几种小波基特征频率依然醒目说明结果是可靠的如果只有某一组参数能出结果而其他参数都不行那大概率是你把噪声当成了特征需要警惕。频带选择上还有个很常见的误区直接选能量最高的子带。故障冲击的能量不一定高反而是某些结构共振频带常年能量都很大选了它等于选了背景干扰。我建议以“包络谱峰值因子”为第一参考指标也就是包络谱中最大峰值与平均幅值之比这个指标对微弱冲击的敏感度比能量高得多。4.4 趋势项和低频强干扰的影响力量巨大的低频振动、安装基座共振、温度漂移等都会在信号里形成趋势项让小波包子带的低频部分出现虚假能量。处理方法是先去趋势或者在做非下采样小波包分解之前加一个高通预滤波把20Hz以下分量去掉。注意高通截止频率不要设太高否则会把转频信息一并滤掉影响后续对比验证。还有一个容易被忽视的干扰来源是电噪声尤其是变频器驱动设备上的电磁干扰会在信号里产生固定的高频谐波。这些谐波和非平稳冲击在包络谱上长得不一样固定频率谐波在包络谱上表现为非常尖锐的稳定谱线不会伴随谐波倍频族而故障冲击的包络谱通常能看到1倍频、2倍频、3倍频的衰减序列。遇到可疑峰值多看看有没有倍频族能帮你避免不少误判。5. 一个具体案例外圈早期故障信号的处理实录5.1 案例场景与参数设置我用一段经过实际数据混合处理的案例来说明整套流程这个方案在诊断测试台上复现过多次。对象是一台小型测试台支撑轴承人工在外圈滚道上做了一点微小的电火花点蚀属于典型的早期微弱故障。转频fr29.8Hz滚动体数z12理论外圈故障频率BPFO≈137.6Hz。采样率fs25600Hz采样时长2秒。另外叠加了强烈的随机噪声信噪比低到原始时域波形里几乎看不到周期性冲击。先做预处理去均值和去趋势然后用J4的非下采样小波包分解共16个子带每个子带带宽800Hz。前两个子带对应低频段包含转频和部分干扰直接不参与后续分析。5.2 精细滤波与包络谱诊断结果计算各子带峭度后发现第7和8个子带峭度最高对应频率范围约3.2kHz到4.8kHz这正好是测试台轴承座的常见共振频段。把这两个子带合并重构再对重构信号做包络谱分析。结果非常干净137.5Hz处出现明显峰值275Hz处有2倍频峰413Hz处有3倍频峰与理论计算吻合得很好。相比之下对原始信号直接做FFT时无论是137.6Hz还是2倍频都完全淹没在噪声里根本看不出来。这个案例给了一个很直观的认知非下采样小波包精细滤波的作用不是“放大”故障信号而是把包含故障调制的共振频带从强噪声里“摘”出来再通过包络解调把低频特征暴露出来。整个过程里没有特别复杂的参数调优核心就是把子带选对了。5.3 与其他方法的对比观察我也拿这段信号试过标准小波包分解加硬阈值去噪效果不太理想。标准小波包去噪后虽然噪声被压下去一部分但冲击信号因为下采样和阈值处理波形边缘出现类似Gibbs现象的伪振荡包络谱里故障特征频率的峰值明显被削弱。EMD方法也能分解出冲击成分但端点效应和模态混叠在强噪声下特别严重本征模态分量里经常好几阶都长得差不多选哪个做包络分析全凭感觉。这不是说非下采样小波包在所有场景都优于所有算法而是它在“频带物理含义清晰”“平移稳定”“对弱冲击保留好”这几个故障诊断最看重的维度上取得了很好的平衡。在需要做自动化诊断、结果可复现的项目里这种稳定性带来的价值非常大。5.4 核心参数参考表这里把我常用的参数组合整理成一个表格供你调试时参考参数项推荐值说明采样率fs25600Hz低于10000Hz时高频共振难以完整采样分解层数J4~5J4子带800HzJ5子带400Hz小波基sym8、db10正则性好与冲击形态接近子带选择指标峭度包络谱峰值因子比能量选择更可靠包络谱频率分辨率≤1Hz保证故障特征频率分离信号时长≥1秒至少包含30转以上冲击周期调试时的顺序建议是先用常规参数跑一遍看看包络谱里能不能看到候选特征看不到再考虑调整子带选择和分解层数不要一上来就做一堆参数组合的网格搜索那既费时间也容易让你在噪声里挖出假结论。我个人的体会是基于非下采样小波包的精细滤波方法最大价值不是在某一组数据上一鸣惊人而是给你一套稳定、可解释、可复现的诊断流程。轴承故障诊断这种问题最怕的就是“这次运气好”。用固定频带划分去筛选信号用谱峭度去定位共振区用包络谱去确认特征频率每一步都有据可查出结果的时候心里踏实。如果你正在被早期微弱故障识别折磨不妨按这套流程扎实跑一遍把子带选择和大参数逻辑搞明白那些藏在振动波形里的细微冲击最后都会老老实实显出身形。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑