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元)。付款完成后刷新一下本页面即可看到下载链接。
(注意支付跳转失败的话,请使用浏览器打开本页面)
七、完整版代码重要更新
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
即可解决。