news 2026/10/9 6:39:55

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
非下采样小波包精细滤波与包络谱分析:轴承故障诊断实战指南

做轴承故障诊断的人,十有八九都被“提特征”这件事折磨过。设备一旦出现早期点蚀、剥落或者轻微磨损,振动信号里其实不是没有故障信息,而是故障产生的瞬态冲击被强背景噪声盖得严严实实。常规频谱分析很难直接看出问题,这时候“非下采样小波包精细滤波+包络谱分析”这条路径就特别值得认真研究。这篇文章我打算把整套方法从原理拆到实操,讲清楚为什么非下采样小波包比普通小波包更适合轴承故障诊断、精细滤波到底在滤什么,以及实际跑数据时你会踩到哪些坑。

这套东西适合三类人:一是做设备健康管理、状态检修的现场工程师,手里有振动数据但不知道怎么把故障特征干净地提出来;二是刚接触故障诊断的研究生,想搞明白小波包、包络谱、特征频率这些概念是怎么串起来的;三是自己捣鼓传感器和信号处理硬件的极客,想把诊断算法做扎实。读完你至少能独立处理一段轴承振动信号,找到对应的故障特征频率。

1. 为什么轴承故障诊断要上“精细滤波”

1.1 传统方法的瓶颈:故障特征不是没有,而是被淹没了

轴承故障信号有一个典型特点:冲击成分是非平稳的、瞬态的,持续时间短,频谱上会形成以固有频率为中心的调制边带,同时能量又远远低于齿轮啮合、轴系不平衡、随机噪声这些干扰成分。拿滚动轴承最常见的点蚀故障来说,损伤点每经过载荷区一次就产生一次冲击,这个冲击激励起轴承座和传感器通道的高频共振,故障特征频率(比如外圈BPFO、内圈BPFI)只是对高频共振的幅值调制,频率值往往只有几十到几百赫兹,而调制载波可能分布在几千赫兹甚至上万赫兹。

FFT频谱直接看时,问题特别明显:低频段是转频及其谐波和大能量干扰,高频段是一片噪声基底,故障特征频率对应的谱线即使存在,也低到几乎看不见。更麻烦的是,直接对原始信号做带通滤波再求包络谱,带通中心和带宽选不好,效果会差很多。传统小波变换虽然能时频局部化,但对高频段的频率细分不够细致,而且带有下采样步骤,信号一旦发生微小平移,各尺度的小波系数就会剧烈变化。对故障冲击这类随机出现的瞬态成分,这种“平移敏感性”会导致提取结果很不稳定。

1.2 非下采样小波包到底解决了什么

非下采样小波包的核心改进有两点:一是保留小波包对高频段也做精细细分的特性,二是把每一层分解时的下采样操作去掉,让各子带信号和原始信号保持等长。去掉下采样听起来只是算法细节,带来的性能变化却是根本性的:整个分解过程变成平移不变的,冲击不管出现在信号哪个位置,分解系数的能量分布基本稳定;同时子带长度不变,频率分辨率比传统小波包高一个档次,后续做精细滤波时,能更精准地圈住故障调制频带。

我个人的理解是,非下采样小波包相当于构造了一组“高通、低通滤波器组”,把整个频谱切成越来越细的频带,然后对每个频带里的分量做窄带观察。轴承故障冲击的共振频带往往只有几百赫兹宽,传统小波包切出来的频带可能太宽,把噪声一起放进来了;非下采样小波包能切得更细,而且不会因为下采样丢掉冲击相位信息。说白了,普通小波包是“看完一个大房间再决定哪个角落有问题”,非下采样小波包是“直接把房间隔成小单间,一个一个听声音”。

2. 非下采样小波包分解与精细滤波原理拆解

2.1 从离散小波变换到非下采样小波包的演进逻辑

要理解非下采样小波包,先得知道标准小波包的问题出在哪。标准离散小波变换(DWT)每一层分解后都做二抽一的下采样,信号长度减半,这是为了保持总数据量不变,属于传统的正交变换思路。但下采样会带来两个副作用:采样率降低后,信号平移一个采样点,各层小波系数的位置和幅值会发生明显变化;高频子带还可能因为抽取产生频谱混叠,也就是相邻频带的成分“串门”。

非下采样小波包沿用了小波包“对高频细节也继续分解”的思想,但不再做抽取。它使用的是所谓的“à trous”(带孔算法)思路:每一层对滤波器做上采样,即滤波器系数之间插入零点,再与上一层得到的子带信号做卷积。这样每一层子带依然与原始信号长度相同,总数据量会以约2^J的速度膨胀,但换来的是平移不变性和更规则的频带划分。实际工程里,一般认为它属于一种冗余、平移不变的信号表示方法,和EMD这类自适应分解比起来,它更有固定的频带意义,解释性更强。

从频带划分角度看,第J层非下采样小波包会得到2^J个子带,每个子带的频带宽度为fs/2^(J+1)(fs为采样率)。举个例子,采样率25600Hz,分解到第4层,得到16个子带,每个子带理论带宽是800Hz。这个800Hz的频带宽度对轴承共振频带来说非常合适,既能包含冲击调制的边带,又能排除大部分噪声干扰。如果你要捕捉更窄的调制特征,可以继续加深层数,但计算量会成倍上涨。

2.2 精细滤波的本质:窄带选择与冲击保持

很多人把滤波理解成“把信号弄干净”,但在轴承故障诊断里,精细滤波要做的不是简单去噪,而是“选择性地保留故障调制所在的窄带,然后解调”。冲击信号经过轴承座传递到传感器,会激励起结构共振,所以故障信息主要集中在某些共振频带内。精细滤波做的是:先用非下采样小波包把信号分解到足够细的频带,再根据某个子带或几个相邻子带的能量、峭度、包络谱特征,把它们选出来重构,丢掉无关频带。

这里的“精细”体现在两个层面。第一是频率域上的精细:非下采样小波包子带划分细,可以选择更准确的共振频带,而不是像传统带通滤波器那样凭经验拍脑袋定中心频率和带宽。第二是保留信号细节的精细:因为没有下采样,重构时就不会出现因插值或抽取导致的波形失真,冲击的起振时刻和衰减过程能更完整地保留下来,这对后续包络解调非常关键。

操作上,我一般先把分解后的子带按“包络谱峰值因子”或“谱峭度”排序,选出包含故障调制成分最明显的子带。所谓谱峭度,就是计算每个频带信号的峭度值,故障冲击越明显,峭度越高。这个指标比单纯看能量可靠得多:故障频带能量不一定最高,但峭度一定突出。

2.3 小波基与分解层数的选择逻辑

选小波基没有绝对标准,但有几个经验值可以直接参考。处理轴承振动冲击信号,推荐Daubechies系(db10、db12)和Symlets系(sym8、sym10)。这两种小波有一定的正则性,波形和冲击衰减形态比较接近,能在分解时把冲击能量“压”到少数系数里。Haar小波虽然简单,但波形太陡,对非平稳振动的表示效果不好。Biorthogonal(双正交)小波在图像处理里常用,轴承振动里我用得少,重构对称性虽好,但频带划分没那么直观。

分解层数J的选择需要平衡频带宽度和计算量。理论上J越大频带越窄,频率分辨率越高,但数据膨胀带来的内存和耗时压力也越大。对于采样率25600Hz、共振频带集中在2kHz-8kHz的滚动轴承,J=4或5就够用了。J=4时子带带宽800Hz,J=5时带宽400Hz。模拟信号测试时,我会先跑J=4,观察包络谱效果;不够再加深到J=5。J超过6以后,瓶颈往往不再是效果,而是你的笔记本内存还能不能撑住。

注意:分解层数不是越多越好。层数太深时,每个子带带宽过窄,故障调制的边带可能被切到相邻子带里,导致能量分散,反而削弱特征。遇到这种情况,与其盲目加深层数,不如把选中的几个相邻子带合并重构。

3. 实操:从振动信号到故障特征频率的完整流程

3.1 数据准备与转频信息获取

开始处理前,先确保两件事:一是采样率合适,二是转频计算准确。轴承故障特征频率本质上是“每转发生多少次冲击”的统计值,转速一变,特征频率也跟着变。所以现场测量时,最好同步记录转速,或者从振动信号里用频谱识别转频。

采样率的设置直接决定能看到多高的共振频带。一般建议采样率至少是预期共振频率的4到5倍。工业现场常用的加速度传感器,采样率设在25600Hz或51200Hz比较稳妥。采样时间也要足够长,至少包含几十转的数据,否则包络谱频率分辨率不够,没法区分邻近的特征频率。比如转频30Hz,采样2秒,频率分辨率约0.5Hz,能分辨外圈故障频率138Hz和保持架故障频率11.5Hz,足够用了。

拿到数据后,先做一遍原始信号预览,看趋势项重不重、有没有明显的冲击。如果有很大的直流偏置或低频趋势,先去均值、去趋势。这一步别省,后面滤波分量的质量很大程度上取决于预处理干不干净。

3.2 精细滤波参数设置与子带选择

预处理完成,开始非下采样小波包分解。如果你用MATLAB,可以借助SWT(平稳小波变换)实现非下采样分解思路,但标准SWT只做低频每层分解,不做高频小波包细分;想要非下采样小波包,需要自己写滤波器组循环。Python里也没有现成的非下采样小波包库,我一般基于PyWavelets的滤波器系数自己实现à trous分解。

分解后不要急着重构。我习惯按以下几个步骤选子带:

  1. 计算每个子带的峭度值,找出峭度最大的前三个子带。
  2. 对这三个子带分别求包络谱,观察有没有候选故障特征频率及其倍频。
  3. 如果某个子带的包络谱在故障特征频率处出现明显谱峰,且倍频成谐波序列,就把这个子带标记为精细滤波的目标频带。
  4. 重构时,可以单独选一个子带,也可以把峭度高、包络谱特征一致的相邻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是节圆直径,α是接触角。举一个我常用的示例参数:滚动体数z=12,节圆直径D=65mm,滚动体直径d=15mm,接触角α=0°,转频fr=30Hz。代入计算:

故障类型计算结果
外圈BPFO138.5 Hz
内圈BPFI221.5 Hz
滚动体BSF61.5 Hz
保持架FTF11.5 Hz

那如果在外圈故障的包络谱里,138.5Hz处出现峰值,同时在277Hz(2倍频)、415Hz(3倍频)也看到衰减的谱峰,基本可以锁定外圈故障。内圈故障的特征频率通常会伴随转频调制边带,这是因为故障点随轴旋转,冲击的幅值会被转频周期性调制。

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 计算代价与内存优化

非下采样小波包的冗余特性是把双刃剑。J=5时,数据量放大到原来的32倍左右,2秒钟、25600Hz采样率的一段信号,约51200个点,分解后得到32个子带,每个子带51200点,总点数为1638400,存成float64大约13MB,看起来不多。但如果你做在线监测,连续处理长数据,内存会很快吃紧。更麻烦的是,每层分解要和对偶滤波器做卷积,计算量远大于普通小波包。

实际处理时我的经验是:先用一小段数据(1到2秒)离线试算,选定层数和子带后,再用同样参数批量跑剩余数据。千万别上来就把几百万个点的长信号一次性做全分解,既慢又容易让程序崩溃。矩阵运算能向量化就向量化,能用单精度就单精度,甚至可以对原始信号做滑动窗口分段处理,最后再把各段包络谱做平均,这样还能抑制噪声。

4.3 小波基不匹配与频带选择误区

如果小波基的波形和故障冲击脉冲形态差得太远,分解后冲击能量会分散到很多子带里,每个子带的峭度都会不高不低,选择起来很困惑。这种情况我一般会换小波基重跑一版对比。判断标准不是理论指标,而是同一个故障特征频率在不同小波基下的包络谱是否稳定出现。如果换了几种小波基,特征频率依然醒目,说明结果是可靠的;如果只有某一组参数能出结果而其他参数都不行,那大概率是你把噪声当成了特征,需要警惕。

频带选择上还有个很常见的误区:直接选能量最高的子带。故障冲击的能量不一定高,反而是某些结构共振频带常年能量都很大,选了它等于选了背景干扰。我建议以“包络谱峰值因子”为第一参考指标,也就是包络谱中最大峰值与平均幅值之比,这个指标对微弱冲击的敏感度比能量高得多。

4.4 趋势项和低频强干扰的影响

力量巨大的低频振动、安装基座共振、温度漂移等都会在信号里形成趋势项,让小波包子带的低频部分出现虚假能量。处理方法是先去趋势,或者在做非下采样小波包分解之前加一个高通预滤波,把20Hz以下分量去掉。注意高通截止频率不要设太高,否则会把转频信息一并滤掉,影响后续对比验证。

还有一个容易被忽视的干扰来源是电噪声,尤其是变频器驱动设备上的电磁干扰,会在信号里产生固定的高频谐波。这些谐波和非平稳冲击在包络谱上长得不一样:固定频率谐波在包络谱上表现为非常尖锐的稳定谱线,不会伴随谐波倍频族;而故障冲击的包络谱通常能看到1倍频、2倍频、3倍频的衰减序列。遇到可疑峰值,多看看有没有倍频族,能帮你避免不少误判。

5. 一个具体案例:外圈早期故障信号的处理实录

5.1 案例场景与参数设置

我用一段经过实际数据混合处理的案例来说明整套流程,这个方案在诊断测试台上复现过多次。对象是一台小型测试台支撑轴承,人工在外圈滚道上做了一点微小的电火花点蚀,属于典型的早期微弱故障。转频fr=29.8Hz,滚动体数z=12,理论外圈故障频率BPFO≈137.6Hz。采样率fs=25600Hz,采样时长2秒。另外叠加了强烈的随机噪声,信噪比低到原始时域波形里几乎看不到周期性冲击。

先做预处理:去均值和去趋势,然后用J=4的非下采样小波包分解,共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~5J=4子带800Hz,J=5子带400Hz
小波基sym8、db10正则性好,与冲击形态接近
子带选择指标峭度+包络谱峰值因子比能量选择更可靠
包络谱频率分辨率≤1Hz保证故障特征频率分离
信号时长≥1秒至少包含30转以上冲击周期

调试时的顺序建议是:先用常规参数跑一遍,看看包络谱里能不能看到候选特征;看不到再考虑调整子带选择和分解层数,不要一上来就做一堆参数组合的网格搜索,那既费时间也容易让你在噪声里挖出假结论。

我个人的体会是,基于非下采样小波包的精细滤波方法,最大价值不是在某一组数据上一鸣惊人,而是给你一套稳定、可解释、可复现的诊断流程。轴承故障诊断这种问题,最怕的就是“这次运气好”。用固定频带划分去筛选信号,用谱峭度去定位共振区,用包络谱去确认特征频率,每一步都有据可查,出结果的时候心里踏实。如果你正在被早期微弱故障识别折磨,不妨按这套流程扎实跑一遍,把子带选择和大参数逻辑搞明白,那些藏在振动波形里的细微冲击,最后都会老老实实显出身形。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 6:38:58

claude-mem:给Claude API加跨会话长期记忆的开源工具

写个给Claude加记忆的开源小工具:claude-mem。最近在折腾AI Agent工作流时,我发现一个很绕不过去的痛点:Claude每次对话都是“无状态”的,它不记得你上次说过什么。你告诉过它的偏好、项目背景、代码规范,换个会话就全…

作者头像 李华
网站建设 2026/10/9 6:38:58

Cloudflare浏览器渲染服务实战:边缘无头浏览器截图与动态抓取

Cloudflare这波操作,说实话挺让人意外的。很多人以为它做CDN、做WAF、做边缘计算就够忙了,结果它扭头就把浏览器渲染服务给推了出来。用过这玩意儿半个月左右,我的第一感受是:本地管理headless Chrome集群这件事,终于有…

作者头像 李华
网站建设 2026/10/9 6:38:44

串口设备以太网对接实战:智能网关让老旧设备轻松并入PLC系统

现场做项目最头疼的不是控制逻辑本身,而是那些“说话方式”各不相同的设备怎么拉通。前几年我接过一个改造项目,现场有西门子老款PLC、三台温控表、两台ABB变频器,全是RS485串口,而新增的主PLC在控制柜里,离最远一台设…

作者头像 李华
网站建设 2026/10/9 6:38:08

Java选择结构深度解析:if-else、switch与三元运算符的实战避坑指南

1. 先说点实话:Java的选择结构,远没有你想的那么简单我在带新人、也做面试官的时候,最常被低估的一个知识点就是“Java的选择结构”。很多人觉得无非就是if、else、switch,会写就完事了。但正因为人人都觉得自己会,线上…

作者头像 李华
网站建设 2026/10/9 6:37:06

Vue3后台管理系统图标自动导入:从SVG到Iconify的完整实战

做 Vue3 后台管理系统的时候,图标这块我一度很烦躁。前一个项目用的是 Element Plus,页面里要加个按钮,得先 import 一个图标组件,再包进 el-icon;项目里还有大量自定义 SVG 图标,每次用到都要单独引入/ass…

作者头像 李华
网站建设 2026/10/9 6:36:30

SpringBoot养老院管理系统毕设全攻略:从表设计到答辩避坑

今年帮几个学弟学妹跟进毕业设计,发现养老院管理系统几乎是最稳妥的选题之一——业务场景清楚、用户角色明确、CRUD 能落地、也有报表和权限这些能加分的点,关键是答辩的时候评委都能听懂。但越是这样看似“常规”的题目,越容易做得平庸。这次…

作者头像 李华