基于MATLAB的经验模态分解(EMD)算法与三次样条插值工具包
项目介绍
本项目提供了一套完全基于MATLAB原生代码实现的经验模态分解(Empirical Mode Decomposition, EMD)算法工具包。该项目的核心目标是解决非线性和非平稳信号的时频分析问题。
与传统的调用现成工具箱不同,本项目从底层数学原理出发,自主实现了三次样条插值(Cubic Spline Interpolation)算法,并将其集成到EMD的包络构建过程中。这使得代码在不依赖特定MATLAB信号处理工具箱的高级函数(如spline或findpeaks)的情况下,依然能够高效、准确地完成复杂的信号分解任务。
主要功能特性
- 自适应信号分解:能够将复杂的非平稳信号分解为多个固有模态函数(IMF)和一个残差项,物理意义明确。
- 自主研发的三次样条插值:内置基于三对角矩阵追赶法(Thomas Algorithm)的自然三次样条插值算法,用于精准拟合上下包络线。
- 不依赖第三方工具箱的核心算法:极值查找、插值拟合等核心步骤均为原生实现,提高了代码的可移植性和底层可控性。
- 非平稳信号模拟:内置复杂的模拟信号生成器,包含低频、中频、调幅高频、非线性趋势及随机噪声,用于算法验证。
- 希尔伯特谱分析演示:提供对分解出的IMF分量进行瞬时频率分析的示例。
- 完整可视化:自动生成原始信号、IMF分量分解图以及残差图。
系统要求
- MATLAB版本:R2016a 及以上版本(主要为了确保图形句柄及基础语法兼容性)。
- 工具箱:
* 核心算法(EMD分解、插值):不需要任何额外工具箱。
* 结果可视化(main函数):使用了
hilbert 函数进行瞬时频率展示,这属于 Signal Processing Toolbox;若无此工具箱可注释掉可视化部分的希尔伯特变换代码,不影响EMD核心计算。
使用方法
- 下载本项目源代码。
- 在MATLAB环境中打开包含主程序文件的文件夹。
- 直接运行主程序入口函数。
- 程序将自动执行以下流程:生成模拟信号 -> 执行EMD分解 -> 弹出结果分析图表。
---
详细功能与算法实现分析
本项目的主程序及辅助函数严格遵循EMD的理论框架,具体实现逻辑如下:
1. 模拟非平稳信号生成
程序首先构建了一个极其复杂的测试信号,时长1秒,采样率1000Hz,用于验证算法对不同频率和趋势的捕捉能力。信号由以下五个部分叠加而成:
- 低频分量:5Hz的正弦波。
- 中频分量:30Hz的正弦波(带相位偏移)。
- 高频调制分量:100Hz的载波,被2Hz的正弦波进行幅度调制(AM信号)。
- 非线性趋势项:二次函数 $2t^2$,模拟信号中的基线漂移。
- 随机噪声:幅度为0.1的高斯白噪声。
2. 经验模态分解 (EMD) 核心逻辑
EMD的核心通过筛选过程(Sifting Process)实现,将信号层层剥离:
- 筛选停止准则:采用了标准差(Standard Deviation, SD)作为内循环停止的依据。计算相邻两次筛选结果的差异,当SD小于设定的阈值(
stop_thr = 0.05)或达到最大迭代次数(100次)时,停止当前IMF的筛选。 - 单调性判断:通过检查残差是否为单调函数或极值点极少,来决定是否结束整个分解过程。
- 端点处理:为了抑制EMD常见的 "端点效应",在查找极值点时,算法强制将信号的时间起点和终点纳入极值点序列(采用直接端点约束法),确保包络线贯穿整个时间轴。
3. 自定义三次样条插值算法 (Cubic Spline Interpolation)
这是本项目的技术核心,用于根据极值点构建上下包络线。代码完全手动实现了数学推导过程,而非调用MATLAB内置函数:
- 方程构建:根据三次样条的二阶导数连续性性质,构建了关于二阶导数(弯矩)的线性方程组 $A cdot M = d$。
- 边界条件:采用了自然样条(Natural Spline)边界条件,即假定两端点的二阶导数为0 ($S''(x_1)=0, S''(x_n)=0$)。
- 求解算法:由于系数矩阵 $A$ 是三对角矩阵,代码实现了追赶法(Thomas Algorithm),这是一种高斯消元法的特定简化形式,能够以 $O(N)$ 的时间复杂度快速求解出线性方程组。
- 插值计算:解出二阶导数后,计算每个区间上三次多项式的系数 ($a, b, c, d$),进而计算任意查询点处的包络值。
- 鲁棒性处理:当极值点数量不足3个时,算法自动退化为线性插值以避免报错。
4. 极值查找与管理
- 自定义极值搜寻:编写了专门的函数遍历信号寻找局部极大值和极小值,不依赖
findpeaks 函数。 - 数据清洗:对找到的索引进行了去重和排序操作,确保插值节点的单调递增性,这是样条插值数学计算的必要前提。
5. 结果分析与可视化
程序执行完毕后会生成两个图形窗口:
- 分解结果图:自上而下依次展示原始合成信号、分解出的若干个IMF分量(通常包含高频到低频的特征)、以及最终的残差趋势项。这直观地展示了EMD将混合信号中的噪声、高频调制、纯正弦波和二次趋势项逐级分离的能力。
- 瞬时频率分析图:选取分解出的第一个IMF分量(IMF 1),对其进行希尔伯特变换,计算并绘制其瞬时频率曲线。这通常用于观察信号中频率随时间变化的非平稳特征。