


一、研究背景
在机械故障诊断、生物医学信号处理、振动分析等领域,采集到的信号往往包含强噪声和非平稳特征。有效的信号分解 与降噪是提取故障特征的关键。
- FMD(Filtered Mode Decomposition) 是一种结合频带分割与迭代滤波的信号分解方法,能够自适应地将复杂信号分解为若干本征模态分量(IMF)。
- 然而,FMD 的性能高度依赖滤波器大小 和模态个数两个参数,传统人工调参效率低、难以获得全局最优。
- 因此,引入NRBO(Newton-Raphson-based Optimizer,牛顿-拉夫逊优化算法) 自动寻优这两个关键参数,并以多种熵(包络熵、信息熵等)或峭度因子作为适应度函数,实现自适应最优分解。
- 分解后进一步利用小波阈值降噪对低相关分量进行处理,提升重构信号质量。
二、主要功能
- 自适应FMD分解:通过NRBO优化滤波器大小和模态个数,对输入信号进行最优分解,得到多个IMF分量。
- 多目标适应度选择:支持6种目标函数(包络熵最小、信息熵最小、排列熵最小、样本熵最小、能量熵最小、包络峭度因子最小),用户可根据信号特性选择。
- IMF质量评估与筛选:计算每个IMF与原始信号的皮尔逊相关系数,自动区分"保留分量"与"需降噪分量"。
- 小波阈值降噪:对低相关系数分量分别进行软阈值和硬阈值降噪,并重构信号。
- 可视化与结果导出:绘制原始信号、迭代曲线、参数变化、分解图、幅值谱、功率谱、希尔伯特谱、降噪前后对比图,并输出Excel文件。
三、算法步骤
| 步骤 | 描述 |
|---|---|
| 1 | 读取信号数据(data.xlsx),绘制原始信号。 |
| 2 | 设置全局参数:cutnum(频带切割数)、maxiternum(迭代次数)、fs(采样频率)。 |
| 3 | 定义优化变量:滤波器大小 [10,50],模态个数 [5, cutnum]。设置NRBO种群规模(10)、最大迭代次数(20)。 |
| 4 | 选择目标函数类型(value=1~6),调用 getObjValue 计算适应度。 |
| 5 | 运行NRBO优化算法,得到最优参数 Best_pos 和最优适应度 Best_score。 |
| 6 | 用最优参数调用 FMD 函数进行信号分解,获得IMF矩阵。 |
| 7 | 计算各IMF与原始信号的皮尔逊相关系数,依据阈值 TH1 区分保留分量(K2)与需降噪分量(K1)。 |
| 8 | 对需降噪分量进行小波阈值降噪(db1小波,2层分解,全局软/硬阈值),绘制降噪前后对比。 |
| 9 | 重构信号:保留分量 + 降噪后分量,分别生成软阈值和硬阈值降噪结果,并保存为Excel文件。 |
四、技术路线
原始信号 → NRBO优化(寻优滤波器大小、模态个数)→ FMD分解 → 计算相关系数
↓
┌────┴────┐
↓ ↓
保留分量 需降噪分量 → 小波阈值降噪(软/硬阈值)
└────┬────┘
↓
信号重构 → 输出降噪后信号与评估图表
五、公式与原理
1. 适应度函数(以包络熵为例)
对于每个IMF分量 (c_i(t)),先求希尔伯特包络:
ai(t)=∣Hilbert(ci(t))∣ a_i(t) = |\text{Hilbert}(c_i(t))| ai(t)=∣Hilbert(ci(t))∣
归一化:
pi(t)=ai(t)∑tai(t) p_i(t) = \frac{a_i(t)}{\sum_t a_i(t)} pi(t)=∑tai(t)ai(t)
包络熵:
Eenv=−∑tpi(t)logpi(t) E_{\text{env}} = -\sum_t p_i(t) \log p_i(t) Eenv=−t∑pi(t)logpi(t)
适应度取所有IMF中包络熵的最小值(熵越小,信号越规律,冲击特征越明显)。
2. FMD核心 ------ 最大相关峭度解卷积(MCKD)
FMD内部调用 xxc_mckd,其目标最大化相关峭度(Correlated Kurtosis, CK):
CKM(T)=∑n=1N(∏m=0Myn−mT)2(∑n=1Nyn2)M+1 \text{CK}M(T) = \frac{\sum{n=1}^{N} \left( \prod_{m=0}^{M} y_{n-mT} \right)^2}{\left( \sum_{n=1}^{N} y_n^2 \right)^{M+1}} CKM(T)=(∑n=1Nyn2)M+1∑n=1N(∏m=0Myn−mT)2
其中 (y) 为滤波输出,(T) 为故障周期,(M) 为移位阶数。
通过迭代求解最优滤波器 (f),使CK最大,从而增强周期性冲击成分。
3. 小波阈值降噪
- 对需降噪分量进行
db1小波2层分解。 - 估计噪声标准差 σ=wnoiset(c,l,1)\sigma = \text{wnoiset}(c,l,1)σ=wnoiset(c,l,1)。
- 全局阈值 λ=σ2lnN\lambda = \sigma \sqrt{2\ln N}λ=σ2lnN (NNN为信号长度)。
- 软阈值函数:
w^=sgn(w)⋅max(∣w∣−λ,0) \hat{w} = \text{sgn}(w) \cdot \max(|w|-\lambda, 0) w^=sgn(w)⋅max(∣w∣−λ,0) - 硬阈值函数:
w^=w⋅1∣w∣≥λ \hat{w} = w \cdot \mathbf{1}_{|w| \ge \lambda} w^=w⋅1∣w∣≥λ
六、参数设定(来自 main.m 及全局变量)
| 参数 | 值 | 含义 |
|---|---|---|
cutnum |
5 | 频带切割数(决定初始滤波器组数量) |
maxiternum |
20 | FMD内部迭代次数 |
fs |
20000 Hz | 采样频率 |
lb |
[10, 5] | 滤波器大小下限,模态个数下限 |
ub |
[50, cutnum] | 滤波器大小上限,模态个数上限 |
dim |
2 | 优化变量维数 |
SearchAgents_no |
10 | NRBO种群规模 |
Max_iter |
20 | NRBO最大迭代次数 |
value |
1~6 | 目标函数选择开关 |
七、运行环境
- 软件:MATLAB(推荐 R2020b 及以上版本)
- 输入文件 :
data.xlsx(单列信号数据) - 输出文件 :
NRBO-FMD分解结果.xlsx,NRBO-FMD降噪后信号_软/硬阈值.xlsx
八、应用场景
- 旋转机械故障诊断:轴承、齿轮箱等振动信号中的周期性冲击提取。
- 生物医学信号处理:心电图(ECG)、脑电图(EEG)的噪声抑制与特征分离。
- 结构健康监测:桥梁、管道等结构的振动响应分解与损伤识别。
- 地球物理勘探:地震信号中反射波与噪声的分离。