时间序列分析之经验模态分解(EMD)和集成经验模态分解(EEMD)

一、经验模态分解(Empirical Mode Decomposition, EMD)

目的

EMD是由 NE. Huang 等人提出的一种将信号分解成特征模态的方法。它的优点是不会运用任何已经定义好的函数作为基底,而是根据所分析的信号而自适应生成固有模态函数。可以用于分析非线性、非平稳的信号序列,具有很高的信噪比和良好的时频聚焦性。

步骤

EMD分解时有几个假设条件:

  1. 信号至少存在两个极值点,一个极大值,一个极小值。
  2. 时间尺度特性是由两个极值点之间的时间尺度确定的。

EMD分解的目的是将一个信号 f ( t ) f(t) f(t)分解为N个固有模态函数(Intrinsic Mode Function, IMF)和一个残差(residual)。其中,每个IMF需要满足一下两个条件:

  1. 在整个数据范围内,局部极值点和过零点的数目必须相等,或者相差数目最多为1。
  2. 在任意时刻,局部最大值的包络(上包络线)和局部最小值的包络(下包络线)的平均值必须为零。

EMD分解的步骤如下:

第一步:找出原始信号中全部的局部极大值和极小值点,然后通过曲线拟合的方法结合各个极值点构造出上包络线和下包络线,这样原始信号就被上下包络线所包络。
第二步:由上下包络线可构造出它们的均值曲线 m ( t ) m(t) m(t),再用原始信号 f ( t ) f(t) f(t)减去均值曲线,这样得到的 H ( t ) H(t) H(t)就是IMF。
第三步:由于第一、二步得到的IMF通常不会满足IMF的两个条件,所以要不断重复第一二步,直到SD(筛分门限值,一般取值 0.2~0.3)小于门限值时才停止,这样得到的第一个满足条件的 H ( t ) H(t) H(t)就是第一个IMF。
SD的求法: S D = ∑ t = 0 r ∣ H k − 1 ( t ) − H k ( t ) ∣ 2 / ∑ t = 0 T H k − 1 2 ( t ) SD = \sum_{t=0}^{r}|H_{k-1}(t) - H_{k}(t)|^{2}/\sum_{t=0}^{T}H_{k-1}^{2}(t) SD=t=0rHk1(t)Hk(t)2/t=0THk12(t)第四步:残差 r ( t ) = f ( t ) − H ( t ) r(t) = f(t) - H(t) r(t)=f(t)H(t),重复第一、二、三步,直到 r ( t ) r(t) r(t)满足预先设定的条件。

问题
  1. IMF 分解时存在着模态混叠现象,也就是说一个IMF中会包含不同时间尺度的特征成分。一方面是由于信号本身的原因,另一方面是EMD算法本身的缺陷。
  2. 在分解出IMF的过程中需要迭代很多次,而停止迭代的条件缺乏一个标准,所以不同的停止迭代的条件得到的IMFs也是不同的。

二、集成经验模态分解(Ensemble Empirical Mode Decomposition, EEMD

目的

为了解决EMD中存在的模态混叠等问题,Huang通过了一种噪声辅助信号处理(NADA),将信号中加入了噪声进行辅助分析。在EMD 方法中,得到合理IMF 的能力取决于信号极值点的分布情况,如果信号极值点分布不均匀,会出现模态混叠的情况。为此,Huang 将白噪声加入待分解信号,利用白噪声频谱的均匀分布,当信号加在遍布整个时频空间分布一致的白噪声背景上时,不同时间尺度的信号会自动分布到合适的参考尺度上,并且由于零均值噪声的特性,经过多次平均后,噪声将相互抵消,集成均值的结果就可作为最终结果。

步骤

第一步:定义一个 MaxIter,表示要进行EMD的总次数,还有一个 m 作为进行 EMD 的当前次数。
第二步:将信号加入白噪声,得到加噪之后的待处理信号。用EMD的方法进行分解待处理信号,得到 p 个IMF分量 C j , m C_{j,m} Cj,m,表示第 m 次分解出来的第 j 个IMF。
第三步:将 MaxIter 次EMD得到的每个阶段对应的 IMF 进行求平均值,这个最后的值就是通过 EEMD 得到的最终 IMFs。 I M F j ˉ = ∑ m = 1 M a x I t e r C j , m / M a x I t e r \bar{IMF_{j}} = \sum_{m=1}^{MaxIter}C_{j,m} / MaxIter IMFjˉ=m=1MaxIterCj,m/MaxIter

Ref

https://blog.csdn.net/woaidapaopao/article/details/51953302
《基于 EEMD 和多尺度模糊熵的电机轴承故障特征提取方法研究 》

### 经验模态分解(EMD)算法的集成方法及其应用场景 #### 集成经验模态分解(EMD)算法的方法 在项目中集成经验模态分解(EMD)算法通常涉及以下几个方面: 1. **MATLAB环境下的EMD实现** MATLAB 提供了强大的数值计算功能,适合用于实现 EMD 算法。可以通过调用内置函数 `emd` 或者自行编写代码来完成信号的分解[^2]。以下是基于 MATLAB 的简单 EMD 实现示例: ```matlab % 输入信号 t = 0:0.001:1; s = sin(2*pi*50*t) + sin(2*pi*120*t); % 使用 emd 函数进行分解 [imf,residual,info] = emd(s,'Interpolation','pchip'); % 可视化结果 figure; subplot(length(imf)+1,1,1:length(imf)); for k=1:length(imf) plot(t, imf(:,k)); title(['IMF ',num2str(k)]); end subplot(length(imf)+1,1,length(imf)+1); plot(t, residual); title('Residual'); ``` 2. **扩展到其他编程语言** 如果不在 MATLAB 中工作,则可以考虑 Python 或 C++ 等语言中的第三方库支持。Python 库如 PyEMD scipy.signal.emd 是常见的选择。 3. **参数调整与优化** 在实际应用中,需注意设置合适的停止条件筛选次数阈值以提高效率并减少误差[^1]。 --- #### 经验模态分解的应用场景 1. **信号去噪** 利用 EMD 将复杂信号分解为若干 IMF 分量后,可移除高频噪声分量从而保留主要趋势项。 2. **特征提取** 对于振动监测、心电信号分析等领域而言,通过对各阶次 IMF 进行频谱变换能够获取更多关于原始数据内在结构的信息。 3. **时间序列预测** 基于希尔伯特黄变换(HHT),结合 EMD 方法可用于非线性动态系统的建模与短期预报研究之中。 4. **模式识别** 当面对多源混合型输入时,借助该技术分离不同频率范围内的成分有助于提升分类准确性。 --- #### 改进版——集合经验模态分解(EEMD) 为了克服传统 EMD 存在的一些局限性(比如端点效应),提出了集合经验模态分解 (Ensemble Empirical Mode Decomposition, EEMD)[^3]。它通过引入白噪音扰动平均机制改善了原算法性能,在某些特定条件下表现更优。 ```matlab % 加载 eemd.m 文件作为外部脚本运行 addpath('eemd'); % 设置参数 noise_std = 0.2; num_ensemble = 100; % 执行 EEMD 处理流程 [e_IMFs, e_residue] = eemd(signal_data, noise_std, num_ensemble); disp(e_IMFs); disp(e_residue); ``` 上述代码片段展示了一个典型的 EEMD 调用方式,其中包含了必要的配置选项以便更好地适应具体需求情境下可能出现的变化情况。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值