往期精彩内容:
风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客
风速预测(三)EMD-LSTM-Attention模型-CSDN博客
风速预测(四)基于Pytorch的EMD-Transformer模型-CSDN博客
风速预测(五)基于Pytorch的EMD-CNN-LSTM模型-CSDN博客
风速预测(六)基于Pytorch的EMD-CNN-GRU并行模型-CSDN博客
本文基于前期介绍的风速数据(文末附数据集),进行集成经验模态算法(Ensemble Empirical Mode Decomposition,EEMD)的介绍与参数选择,最后通过Python实现对风速数据的EEMD分解。风速数据集的详细介绍可以参考下文:
Python 中 EEMD包的下载安装:
# 下载
pip install EMD-signal
# 导入
from PyEMD import EEMD
切记,很多同学安装失败,不是pip install EMD,也不是pip install PyEMD, 如果 pip list 中 已经有 emd,emd-signal,pyemd包的存在,要先 pip uninstall 移除相关包,然后再进行安装。
集成经验模态算法(Ensemble Empirical Mode Decomposition,EEMD)方法是吴兆华和黄锷[1]于 2009 年为克服 EMD 的模态混叠而提出一种噪声辅助信号分析方法。?
EEMD 利用了 EMD 的尺度分离能力,确保 EMD 方法对任何数据都是二进滤波器组3。 通过加入有限噪声,EEMD 在很大程度上消除了模态混合问题,并保持了分解的物理唯一 性。?
EEMD 定义 IMF 为试验集合的平均值,每个试验都由信号加上一个有限振幅的白噪声 组成。通过这种集成方法可以很自然清晰地分离尺度,而无需任何先验的主观标准选择。
引入噪声: EEMD 引入了随机噪声(通常是白噪声),以打破原始信号的固有对称性,避免模态重叠和端效应。
多次迭代: EEMD 对每一次迭代都会生成不同的噪声序列,然后将原始信号与不同噪声序列相加进行多次迭代。每次迭代产生一组 IMFs。
模态平均: 对于每次迭代,得到的 IMFs 通过多次重复迭代得到的 IMFs 进行平均。这种模态平均有助于降低随机性引入的影响,提高结果的稳定性。
初始化: 将原始信号进行初始化,并选择要添加到信号中的噪声类型和水平。
迭代过程: 对于每次迭代,将随机噪声序列与原始信号相加,然后进行经验模态分解(EMD)以获得 IMFs。
累积: 累积每次迭代得到的 IMFs,得到累积的 IMFs。
模态平均: 对累积的 IMFs 进行模态平均,得到最终的 EEMD 结果。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
# 读取已处理的 CSV 文件
df = pd.read_csv('wind_speed.csv' )
# 取风速数据
winddata = df['Wind Speed (km/h)'].tolist()
winddata = np.array(winddata) # 转换为numpy
# 可视化
plt.figure(figsize=(15,5), dpi=100)
plt.grid(True)
plt.plot(winddata, color='green')
plt.show()
from PyEMD import EEMD
# 创建 EEMD 对象
eemd = EEMD(trials=200, noise_width=0.2)
# 对信号进行 EEMD分解
IMFs = eemd(winddata)
# 可视化
plt.figure(figsize=(20,15))
plt.subplot(len(IMFs)+1, 1, 1)
plt.plot(winddata, 'r')
plt.title("原始信号")
for num, imf in enumerate(IMFs):
plt.subplot(len(IMFs)+1, 1, num+2)
plt.plot(imf)
plt.title("IMF "+str(num+1), fontsize=10)
# 增加第一排图和第二排图之间的垂直间距
plt.subplots_adjust(hspace=0.8, wspace=0.2)
plt.show()
参数:
trials:迭代次数(集总平均次数),一般在几百次以上,非常耗时。虽然增加集合平均次数可降低重构误差, 但这是以增加计算成本为代价,且有限次数的集合平均并不能完全消除白噪声,导致算法重 构误差大,分解完备性差
noise_width:添加的白噪声幅值
通过集成经验模态算法(EEMD)得到了信号的分量,可以进行许多不同的分析和处理操作,以下是一些常见的对分量的利用方向:
(1)信号重构:将分解得到的各个本征模态函数(IMF)相加,可以重构原始信号。这可以用于验证分解的效果,或者用于信号的重建和恢复。
(2)去噪:对于复杂的信号,可能存在噪声或干扰成分。通过分析各个IMF的频率和振幅,可以识别和去除信号中的噪声成分。
(3)频率分析:分析每个IMF的频率成分,可以帮助理解信号在不同频率上的振荡特性,从而揭示信号的频域特征。
(4)特征提取:每个IMF代表了信号的局部特征和振荡模式,可以用于提取信号的特征,并进一步应用于机器学习或模式识别任务中。
(5)信号预测:通过对分解得到的各个IMF进行分析,可以探索信号的未来趋势和发展模式,从而用于信号的预测和预测建模。
(6)模式识别:分析每个IMF的时域和频域特征,可以帮助对信号进行模式识别和分类,用于识别信号中的不同模式和特征。
(7)异常检测:通过分析每个IMF的振幅和频率特征,可以用于探测信号中的异常或突发事件,从而用于异常检测和故障诊断。
在得到了信号的分量之后,可以根据具体的应用需求选择合适的分析和处理方法,以实现对信号的深入理解、特征提取和应用。
优点:
提高稳定性: EEMD 通过引入噪声和多次迭代的方式,提高了信号分解的稳定性,减轻了 EM D 中的一些问题,如模态重叠和端效应。
随机性: 引入随机噪声的随机性有助于打破信号的对称性,提高了对非平稳信号的适应能力。
模态平均: 模态平均降低了随机性的影响,使得 EEMD 的结果更加可靠。
缺点:
计算复杂度: EEMD 的计算复杂度较高,尤其是对于较长的信号序列。
参数选择: 对于 EEMD,需要合适地选择引入的噪声类型和水平,以及迭代的次数等参数。
集总平均后的 IMF 可能不再符合 IMF 的要求(偏差一般较小,不影响瞬时频率的计算)。 白噪声在集总平均之后基本抵消,但存在残留的白噪声,重建之后噪声不可忽略[2]。
参考文献
[1] Huang NE, Shen Z, Long SR, et al. The empirical mode decomposition and the Hilbert spectrum for nonlinear and non-stationary time series analysis. The Royal Society, ?1998,454:903-995.
[2]《非平稳数据分解理论 ?从入门到实践》.蒋锋,杨华.中国财政经济出版社.