时序信号高低频分析——EMD和EEMD对比
介绍
时序信号高低频分析是信号处理领域中的一个重要任务,用于分解信号中的高频和低频成分,从而更好地理解信号的特性和行为。在高低频分析中,经验模态分解(Empirical Mode Decomposition,EMD)和改进的经验模态分解(Enhanced Empirical Mode Decomposition,EEMD)是两种常用的方法。本文将介绍这两种方法的原理和公式,并对它们进行比较。
EMD的原理和公式
EMD是一种自适应的数据驱动信号分解方法,其基本思想是通过挑选信号中的局部极值点来构造包络线,并利用包络线来提取信号中的各种振动成分。具体步骤如下:
- 提取局部极值点:找到信号中的局部最大值和局部最小值点。
- 连接局部极值点:连接相邻的局部极值点,得到上包络线和下包络线。
- 计算均值包络线:将上包络线和下包络线的均值作为信号的均值包络线。
- 计算细化的包络线:用原始信号减去均值包络线得到细化的包络线。
- 重复迭代:将细化的包络线作为新的信号进行迭代,直到满足停止条件(如提取的 IMFs 符合某种特定的物理条件)。
- 提取IMF:最终得到的信号即为一组固有模态函数(IMFs),它们是信号中包含的各种振动模式。
EMD的公式详见之前的文章。
EEMD的原理和公式
EEMD是对EMD的改进,主要是为了解决EMD在处理非平稳信号时可能出现的模态混叠问题。EEMD的主要思想是引入噪声,通过多次重复添加随机噪声并进行分解,最后将结果取平均来消除噪声,从而得到更稳定的结果。
两者的区别
- EMD的缺点:EMD在处理非平稳信号时可能出现的模态混叠问题,导致分解结果不稳定。
- EEMD的改进:EEMD引入了随机噪声,通过多次分解并取平均来消除噪声,从而得到更稳定和可靠的结果。
Python实现
下面是使用PyEMD库分别实现EMD和EEMD的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from PyEMD import EMD, EEMD
# 生成示例信号
t = np.linspace(0, 1, 1000)
s = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 20 * t)
# 创建EMD对象
emd = EMD()
# 进行EMD分解
IMFs_emd = emd(s)
# 创建EEMD对象
eemd = EEMD()
# 进行EEMD分解
IMFs_eemd = eemd(s)
# 绘制IMF图
plt.figure(figsize=(12, 8))
# 绘制EMD的IMF图
plt.subplot(2, 1, 1)
for i, imf in enumerate(IMFs_emd):
plt.plot(t, imf, label=f'IMF {i+1}')
plt.title('EMD')
plt.legend()
# 绘制EEMD的IMF图
plt.subplot(2, 1, 2)
for i, imf in enumerate(IMFs_eemd):
plt.plot(t, imf, label=f'IMF {i+1}')
plt.title('EEMD')
plt.legend()
plt.tight_layout()
plt.show()
以上代码将生成一个示例信号,然后分别利用PyEMD库进行EMD和EEMD分解,并绘制每个IMF的图像。可以通过比较两者的结果来观察其区别。
总结
EMD和EEMD是两种常用的时序信号分解方法,它们在信号处理和特征提取中具有重要的应用价值。EMD是一种自适应的分解方法,但在处理非平稳信号时可能出现模态混叠问题,而EEMD通过引入随机噪声的方法解决了这个问题,得到了更稳定和可靠的结果。因此,在实际应用中,可以根据信号的特性和要求选择合适的分解方法。
标签:EMD,plt,包络线,时序,信号,np,EEMD From: https://blog.csdn.net/weixin_39753819/article/details/136230599