G.Rilling 团队 EMD 信号处理算法工具箱 (MATLAB 实现)
项目介绍
本项目是基于 Gabriel Rilling 团队开发的经典经验模态分解(EMD)算法体系的 MATLAB 实现。该工具箱专门用于处理非线性及非平稳时间序列信号,其核心价值在于能够自适应地将复杂信号分解为一系列具有物理意义的本征模态函数(IMF)以及一个代表总趋势的残余分量(Residue)。相比于传统的傅里叶变换,该实现能够有效捕捉信号在局部时间尺度上的特征变化,是希尔伯特-黄变换(HHT)的核心技术基础。
功能特性
- 自适应分解逻辑:算法完全依据信号自身的局部特征点驱动,无需预先设定基函数。
- 优化的停止准则:实现了 Rilling 提出的三参数停止准则,精细控制筛选过程中的循环次数,在保证分解精度的同时避免过度迭代。
- 完善的端点处理:内置镜像扩展算法(Mirror Extension),通过在信号两端生成镜像极值点,显著缓解了三次样条插值中常见的端点效应问题。
- 完备的频域分析:集成希尔伯特变换功能,可提取各阶 IMF 的瞬时幅值与瞬时频率。
- 多维度可视化:自动生成原始信号对比图、IMF 分解序列图、希尔伯特时频谱(Time-Frequency-Amplitude)以及边际谱。
系统要求
- 软件平台:MATLAB R2016b 或更高版本。
- 必备工具箱:Signal Processing Toolbox(用于执行 hilbert 变换及信号平滑处理)。
程序实现逻辑说明
主程序按照以下流程顺序执行:
- 信号仿真构建:程序首先合成了一个包含 50Hz 余弦、10Hz 余弦、一个随时间变化的调频正弦信号、线性趋势项以及随机噪声的复合非平稳信号,作为算法的测试基准。
- 经验模态分解主循环:进入 EMD 分解核心函数,通过外层循环控制 IMF 的阶数,内层循环执行筛选过程(Sifting Process)。
- 极值提取与包络构造:在筛选过程中,程序自动识别局部极大值与极小值,应用镜像扩展策略补充边界,随后利用三次样条插值拟合上、下包络线。
- 均值剥离与准则判断:根据上下包络计算均值面,从当前信号中减去均值,并利用 Rilling 停止准则判断当前分量是否满足 IMF 条件。
- 瞬时特征提取:对分解出的每一阶 IMF 执行希尔伯特变换,计算每一采样点对应的瞬时频率和瞬时幅值,并进行平滑去噪。
- 能量积分与绘图:计算希尔伯特谱,并对全时间段内的幅值按频率轴进行累加,生成反映能量分布的边际谱。
关键算法与函数细节分析
- 经验模态分解函数 (emd_decomposition)
这是算法的核心,负责协调筛选过程。它定义了最大分解层数,并在残余项呈现单调性或无法提取足够极值点时自动触发终止条件。
- 镜像扩展算法 (mirror_extension)
针对 EMD 算法中的端点散逸问题,该函数通过在信号边界处寻找最近的极值点并进行时间与幅值的镜像翻转,为三次样条插值提供了合理的外部支撑点,保证了端点处包络线的稳定性。
- 三次样条包络构造 (get_envelopes)
利用内置的 spline 函数对扩展后的极值序列进行拟合。该步骤决定了 IMF 从原始信号中分离的准确度,通过构建上下包络线的均值,将高频振荡成分从慢速变化成分中剥离。
- Rilling 停止准则判断
通过输入三个关键阈值(theta1, theta2, alpha),程序不仅监测局部均值的绝对偏差,还考虑了均值相对于包络幅值的比例。这种动态准则能够更好地处理调幅信号,确保筛选过程在最优时刻停止,从而获得对称性较好的 IMF。
- 希尔伯特变换与平滑 (calculate_hht)
利用解析信号(Analytic Signal)的性质,通过 phase 信息的差分运算获取频率。为了解决差分运算可能带来的高频毛刺问题,函数内部应用了平滑滤波,使生成的时频谱更加清晰。
- 边际谱计算 (marginal_spectrum)
该功能将所有 IMF 在整个时间跨度内的能量分配映射到频率轴上。与传统频谱不同,边际谱排除了虚假谐波的干扰,能够更真实地反映信号中实际物理振荡频率的能量分布。
使用说明
- 启动 MATLAB 并将当前工作目录设置为本程序所在目录。
- 运行主函数,系统将自动生成模拟信号并开始分解。
- 待计算完成后,程序会自动弹出三个窗口,展示分解结果、时频分布及能量谱。
- 用户可根据实际需求,在主函数起始位置修改输入信号 x 和时间向量 t,或调整停止准则参数以适配不同的应用场景。