讲解EMD分解

EMD分解

emd分解是一个实验需要用到的技术,先记下来,以后复习。

经验模态分解技术-EMD-李新亮_哔哩哔哩_bilibili

image-20230309204722588

首先来说EMD方法是分解波形的,一个复杂波形可能是由简单波形加减得到的,也有可能波形是随时间变换的。这时可以尝试对波形分解,然后来看趋势项和波动项。

1)根据原始信号上下极值点,分别画出上、下包络线。

img

上、下包络线

2)求上、下包络线的均值,画出均值包络线。

img

均值包络线

3)原始信号减均值包络线,得到中间信号。

img

原始信号减均值包络线

4)判断该中间信号是否满足IMF的两个条件,如果满足,该信号就是一个IMF分量;如果不是,以该信号为基础,重新做1)~4)的分析。IMF分量的获取通常需要若干次的迭代。

img

不满足约束2,需要继续迭代

使用上述方法得到第一个IMF后,用原始信号减IMF1,作为新的原始信号,再通过1)~4)的分析,可以得到IMF2,以此类推,完成EMD分解。

img

迭代分解结果

上述例子中的图来自http://perso.ens-lyon.fr/patrick.flandrin/emd.ppt

简单python代码:

import numpy as np
from pyemd import EMD, Visualisation,EEMD
import pandas as pd
#构建信号
time=np.arange(start=0,stop=1.01,step=0.01)
signal=signal = np.cos(11*2*np.pi*time*time)+6*time*time
# 提取imfs和剩余
emd = EMD()
emd.emd(signal,time)
imfs, res = emd.get_imfs_and_residue()

vis = Visualisation()
vis.plot_imfs(imfs=imfs, residue=res, t=time, include_residue=True)
# 绘制并显示所有提供的IMF的瞬时频率
vis.plot_instant_freq(time, imfs=imfs)
vis.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lKcib72p-1678452110595)(D:/01Data/typora%E5%9B%BE%E7%89%87/%E8%AE%B2%E8%A7%A3EMD%E5%88%86%E8%A7%A3/emdvmd_1_0.png)]

png
可能存在的问题?

1.TypeError: ‘AxesSubplot’ object is not iterable
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[11], line 10
      7 imfs, res = emd.get_imfs_and_residue()
      9 vis = Visualisation()
---> 10 vis.plot_imfs(imfs=imfs, residue=res, t=time, include_residue=True)
     11 # 绘制并显示所有提供的IMF的瞬时频率
     12 vis.plot_instant_freq(time, imfs=imfs)

File D:\Anaconda3\lib\site-packages\pyemd\visualisation.py:62, in Visualisation.plot_imfs(self, imfs, residue, t, include_residue)
     59 fig, axes = plt.subplots(num_rows, 1, figsize=(self.PLOT_WIDTH, num_rows * self.PLOT_HEIGHT_PER_IMF),dpi=300)
     61 if num_rows == 1:
---> 62     axes = list(axes)
     64 axes[0].set_title("Time series")
     66 for num, imf in enumerate(imfs):

TypeError: 'AxesSubplot' object is not iterable

此时查看imf,发现信号未分解,图像没法画,建议修改信号,使它可以分解:

#不可分解的信号
signal = np.sin(2 * np.pi * time)+6*time*time
#可以分解的信号
signal = np.cos(11*2*np.pi*time*time)+6*time*time
2.pyemd导包的问题

可能需要修改源代码的大小写。

EMD实例

可以分解的信号
signal = np.cos(112np.pitimetime)+6timetime


##### 2.pyemd导包的问题

可能需要修改源代码的大小写。

## EMD实例

参考论文:基于时间序列 EEMD 重构的滑坡位移 PSO-SVR 预 测方法—以三峡库区滑坡为例
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值