EMD画图工具(python版)

最后更新于:2024-07-06 12:02:55

这是使用PyEMD包在python环境下进行EMD分解并画图的程序

可以快速实现EMD分解、EMD分解图绘制、EMD分解及频谱图绘制

该程序是MATLAB实现EMD的姊妹篇,两者实现的功能大体一致

致力于实现优质、易用的程序,帮助研究人员快速实现目的

一、代码运行环境

已测试python3.9,理论上其他python3.X可以使用,python2.X不能使用

依赖包包括:PyEMD、numpy、Matplotlib

在运行程序前,请确保在当前python环境下安装了上述包,命令行的安装指令为:

pip install EMD-signal
pip install numpy
pip install Matplotlib

二、程序介绍

程序文件
程序文件
1.demoEMD.py

用于EMD分解画图测试功能的案例文件,可以直接运行。程序运行过程中会绘制出分解图像,注意图像会阻塞程序运行,需要关闭图像窗口程序才会继续运行。程序运行结束后,会在当前文件夹创建imf.csv文件,并保存imf分量数据。

运行过程中会绘制如下两个图像:

EMD分解图,绘制各个IMF分量

EMD分解及对应频谱图

2.funEMD.py(试用版代码中为funEMD.pyd)

集合了kEMD、kFFT、pEMD、pEMDandFFT等方法,具体实现PyEMD函数调用实现EMD分解以及画图等功能。

具体包含的方法有:

def pEMD(data,FsOrT):
    '''
    用于计算EMD分解得到imf分量的函数,同时绘制imf分量时域图

    输入:
    data - 待分解数据,需要是一维数据,array类型
    FsOrT - 采样频率或采样时间向量:
            如果为采样频率,该变量输入单个值;
            如果为时间向量,该变量为与data相同长度的一维向量。
            如果未知采样频率,可设置为1
    输出:
    imf - 分解后的imf分量
    '''
def kFFT(data,fs):
    '''
    用于计算快速傅里叶变换结果的函数

    输入:
    data - 待分解数据,需要是一维数据,array类型
    fs - 采样频率,即每秒钟的数据点数
    输出:
    amp - 幅值数据
    fre - 频率轴数据
    '''
def pEMD(data,FsOrT):
    '''
    用于计算EMD分解得到imf分量的函数,同时绘制imf分量时域图

    输入:
    data - 待分解数据,需要是一维数据,array类型
    FsOrT - 采样频率或采样时间向量:
            如果为采样频率,该变量输入单个值;
            如果为时间向量,该变量为与data相同长度的一维向量。
            如果未知采样频率,可设置为1
    输出:
    imf - 分解后的imf分量
    '''
def pEMDandFFT(data,FsOrT):
    '''
    用于计算EMD分解得到imf分量的函数,同时绘制imf分量时域图

    输入:
    data - 待分解数据,需要是一维数据,array类型
    FsOrT - 采样频率或采样时间向量:
            如果为采样频率,该变量输入单个值;
            如果为时间向量,该变量为与data相同长度的一维向量。
            如果未知采样频率,可设置为1
    输出:
    imf - 分解后的imf分量
    
    '''

三、视频教程

四、关于完整版与试用版代码

完整版代码可以看到funEMD文件中的全部源码,并且没有数据长度等限制,对于有研究需求的同学们推荐购买完整版~

功能完整版试用版
数据导入、参数设置、实现绘制分解图像
软件全部源码(函数py文件)py文件,可以看到源码pyd文件,无法看到源码
分析数据长度无限制200个点以内

五、获取试用版代码

EMD分解【python】试用版代码

六、获取完整版代码

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需21元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 21元 才能查看此处内容!立即支付

七、完整版代码重要更新

20221226 1.修复引起“module object is not callable”报错的bug;2.修复FsOrT设置为采样频率时plot时t与data维度可能会不同的bug。

20221109 完成初版代码(公开版代码所在版本)

八、常见问题

1.为什么使用python和MATLAB做出的分解结果不相同?

虽然EMD分解的原理是相对明确的,但是在具体的编程实现的过程中还涉及很多具体计算过程,比如包络的求取、停止准则的选定等等,其中参数或者计算方式的变化都会影响到最终结果,MATLAB和python的EMD实现是两个不同的库,在这些细节之处难免存在差异(即使都是用在MATLAB上的官方库和第三方库之间都会有差异),所以使用python和MATLAB进行EMD分解得到的结果不同是正常现象。

在试用版代码中可以使用但是看不到源码,在完整版代码中可以看到全部源码。

2.提示No module named ‘PyEMD’,即使安装EMD-signal包后,from pyemd import EMD依旧失败

解决方法:

1.首先在终端运行:

pip uninstall PyEMD
pip uninstall EMD-signal

2.然后运行:
pip install EMD-signal

即可解决。