搞旋转机械故障诊断的同行,对“信号越测越糊”这件事应该都不陌生。加速度传感器贴在轴承座上,实测信号里真正的冲击成分早就被轴承座、壳体、传感器安装方式层层滤波,再叠上齿轮啮合、转子不平衡这些强干扰,包络谱里往往只剩一团糊状底噪。解卷积周期估计这一支方法,就是为了把“被路径抹平”的冲击序列重新“捋”出来,其中最小熵反卷积(MED)和最大相关峰度反卷积(MCKD)又是用得最多的两种。这篇文章就把这两类盲反卷积方法的原理、MATLAB源码、参数调试经验和常见坑一次讲透,适合正在做滚动轴承、齿轮箱故障特征提取,或者被包络谱搞到头秃的同学参考。
我最早接触MED的时候,心里其实有个疑问:信号都已经被传递路径污染成这样了,光靠一个滤波器怎么可能恢复得出来?后来把Wiggins那套思路和McDonald的MCKD推导都过了一遍,才明白这类方法本质上是“利用冲击信号的统计特征反推滤波器系数”。这篇文章不打算铺开讲太多数学,重点放在“为什么这么做、代码怎么写、参数怎么调、效果怎么判断”。
1. 为什么实测信号里的冲击特征会被“淹没”——从盲反卷积的出发点讲起
1.1 实测信号路径上的层层失真
先建立一个直观的画面。滚动轴承内圈出现点蚀以后,滚珠每经过一次缺陷位置就会产生一个冲击,理论上这个冲击是极窄的脉冲序列。但传感器采集到的信号,是脉冲经过轴承内外圈、轴承座、端盖、传感器磁座、压电晶体等多个环节之后的结果。每个环节都相当于一个低通滤波器或谐振器,冲击信号的高频成分被大幅衰减,原本尖锐的脉冲被展宽成衰减振荡,幅度也小了很多。
传递路径还会引入另一个问题:相位失真。不同频率成分经过路径后的延迟不一样,导致波形进一步畸变。如果再叠加上来自齿轮啮合、不对中、松动等与旋转同步的强周期成分,以及环境噪声,那么实测信号的时域波形看起来就是一团乱麻。这个时候直接在时域上看有没有周期性冲击,基本靠猜。
频域呢?用FFT看频谱,也只能看到几个转频谐波和结构共振峰,冲击对应的故障特征频率往往淹没在噪声底里。包络谱虽然能解调出低频调制成分,但效果严重依赖带通滤波器的中心频率和带宽选择,选不好就什么都看不到。
1.2 传统包络谱分析为什么经常失灵
包络谱分析的基本流程是:带通滤波 → Hilbert变换求包络 → 对包络做FFT。这套流程的标准做法是先通过谱峭度或快速峭度图找共振频带,再在这个频带内做解调。谱峭度图本身没什么问题,但在信噪比低、干扰成分多的场合,峭度图选出来的频带经常是干扰最严重的频带,而不是故障冲击最集中的频带。
还有一个更隐蔽的问题:传递路径对冲击的响应是卷积关系,即传感器信号是真实冲击序列与路径脉冲响应的卷积。包络谱本质上是在频域做乘法然后在特定频带解调,它无法从根本上“反演”卷积过程。说得再直白一点,包络谱只是在做“观测信号的解调”,而盲反卷积在做“恢复源信号本身”。这两件事的目标是有本质区别的。
1.3 反卷积思路的直观理解
反卷积的想法其实很简单:既然观测信号x[n]等于源信号s[n]和路径响应h[n]的卷积,而系统是不可知的,那么我们就设计一个逆滤波器g[n],让y[n] = x[n] * g[n]能够尽可能恢复s[n]的统计特性。
关键在于“统计特性”怎么定义。Wiggins提出MED时,用的统计特性是峭度。熵小意味着信号“更锐利”,所以最小熵反卷积可以理解为:让恢复信号的峭度最大化,即寻找信号中稀疏的、大幅值的冲击成分。MCKD沿用了这个思路,但把目标函数换成了“相关峭度”,它显式地考虑了冲击的周期间隔T,更适合提取周期性冲击。
用一句话总结:MED是在“盲”的状态下把任何稀疏冲击都放大,MCKD则在你告诉它“周期大概是T”的前提下,专门把间隔为T的冲击放大。两种方法都需要源码实现,下面结合MATLAB代码逐一拆解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MED最小熵反卷积:把“峭度最大”当作目标函数
2.1 MED的数学目标与迭代逻辑
MED的目标函数是最大化恢复信号y的峭度,即:
O(g) = (Σ y[n]^4) / (Σ y[n]^2)^2
其中y[n] = Σ x[n - k] * g[k],k = 1,...,L,L是逆滤波器长度。
目标函数对滤波器系数g求偏导并令其等于零,整理后可以得到一个迭代求解的方程组。这个方程组没办法直接闭式求解,只能迭代逼近,每一步都根据当前滤波器系数计算新的恢复信号,然后更新滤波器系数,循环往复。
标准MED迭代步骤大致如下:
- 初始化逆滤波器系数,通常设为全零序列中心位置的单位冲激,即g = [0,...,1,...,0]。
- 根据当前g对观测信号x做卷积,得到y。
- 根据y的统计量计算目标矩阵,更新g。
- 归一化g,使滤波器能量保持不变。
- 判断迭代前后滤波器系数的变化量或目标函数
