【Python】这篇文章能让你明白经验模态分解(EMD)——EMD在python中的实现方法
暂时打断一下滤波专题,插播一条EMD在python中实现方法的文章。
本篇是Mr.看海:这篇文章能让你明白经验模态分解(EMD)——EMD在MATLAB中的实现方法的姊妹篇,也就是要在python中实现EMD分解并画图。
一、使用PyEMD实现EMD分解及画图
在python环境中,PyEMD包是比较好用的。PyEMD中不仅包含了EMD分解方法,还包括EEMD和CEEMDAN,以及绘制简易图片的方式。
PyEMD的官方文档在这里:Intro - PyEMD 0.2.13 documentation
1.1 安装软件包
最简便的安装方式是使用pip安装,也就是在命令行窗口执行:
pip install EMD-signal
注意不是pip install PyEMD哈
另外还有一种手动下载源码安装的方式,具体方式在上边的官方文档里,这里就不详细介绍了。大多数情况下使用pip安装就行。
1.2 导入工具包
接下来就可以编写python脚本了,首先需要导入PyEMD工具包(以及过会儿要用的matplotlib,如果没有安装,需要在命令行窗口执行:pip install Matplotlib):
from PyEMD import EMD
import pylab as plt
生成一个随机信号:
import numpy as np
s = np.random.random(100)
执行EMD分解:
emd = EMD()
IMF = emd.emd(s)
工具包内置了Visualisation可视化工具,但是使用下来并不是特别好用,这里使用Matplotlib画图。
官方提供了一段画图的程序:
N = IMF.shape[0]+1# Plot results
plt.subplot(N,1,1)
plt.plot(t, s, 'r')
plt.title("Input signal")
plt.xlabel("Time [s]")for n, imf in enumerate(IMF):plt.subplot(N,1,n+2)plt.plot(t, imf, 'g')plt.title("IMF "+str(n+1))plt.xlabel("Time [s]")plt.tight_layout()
plt.savefig('simple_example')
plt.show()
画出来是这样的:
咋说呢,有点差强人意。python绘制子图像的标题显示有些小bug,我们可以把它挪到左边,另外按照惯例,我们可以把最后一个分量的名称改成res。
二、画图的快速实现
我们在上述代码的基础上再次进行了封装,实现“一行代码”画图的目的。因为之前我们对MATLAB的“类EMD”分解方法画图有了一系列的方法,这里我们作为姊妹篇,在画图风格上也与之保持一致。
比如绘制EMD分解的时域图像,只需要调用这样一句:
imf = funEMD.pEMD(data,t) #t为数据的时间轴,第二个入口参数也可以输入采样频率fs,会自动计算时间轴
画出来的图是这样的:
这样是不是更符合习惯一些了。
此外还可以绘制时域和频域的对比图,也只需要调用这样一句代码:
imf = funEMD.pEMDandFFT(data,t) #t为数据的时间轴,第二个入口参数也可以输入采样频率fs,会自动计算时间轴
当然啦,如果你直接copy上边的两行代码是画不了图的,因为上述代码运行还依赖一些程序以及环境,不过总体来说还是比较简便易用的了。
需要注意的一点,上边的图片中用到的分析对象信号和在MATLAB那篇文章中是一样的,但是分解结果并不相同。虽然EMD分解的原理是相对明确的,但是在具体的编程实现的过程中还涉及很多具体计算过程,比如包络的求取、停止准则的选定等等,其中参数或者计算方式的变化都会影响到最终结果,MATLAB和python的EMD实现是两个不同的库,在这些细节之处难免存在差异(即使都是用在MATLAB上的官方库和第三方库之间都会有差异),所以使用python和MATLAB进行EMD分解得到的结果不同是正常现象。
如果想要获取上边的封装画图函数和应用案例,可以在下边的链接获取:
EMD画图工具(python版) | 工具箱文档
三、跨平台python补完计划
由于滤波专题讲完之后准备正式开始神经网络专题了,其中关于分类、预测等内容计划同时介绍在MATLAB和python两个平台上的实现方法,考虑到之前专栏基本都是使用MATLAB编程的,所以小编将会开启python补完计划,对于之前已经实现的类EMD分解、特征提取、降噪等等会逐步完善在python中的具体代码实现,希望能保住到有需要的同学们吧。
欢迎持续关注我的专栏与信号处理有关的那些东东。
【Python】这篇文章能让你明白经验模态分解(EMD)——EMD在python中的实现方法相关推荐
- 这篇文章能让你明白经验模态分解(EMD)——基础理论篇
一.为什么要用EMD 在信号处理方面我们了解了时域处理方法(如有效值.峭度).频域处理方法(如频谱.功率谱)以及一些时频域处理方法(如小波分析)(详见专栏文章与信号处理有关的那些东东).时域和频域有各 ...
- 看完这篇文章之后,终于明白了编译到底怎么回事。
看完这篇文章之后,终于明白了编译到底怎么回事. 1 对于同一个语句,有如下三种:高级语言.低级语言.机器语言的表示 C语言 a=b+1; 汇编语言 mov -0xc(%ebp),%eax add ...
- 看完这篇文章之后,终于明白了编译到底怎么回事
看完这篇文章之后,终于明白了编译到底怎么回事. 1 对于同一个语句,有如下三种:高级语言.低级语言.机器语言的表示 C语言 a=b+1; 汇编语言 mov -0xc(%ebp),%eax add ...
- 经验模态分解与Python调用实例
经验模态分解与Python调用实例 经验模态分解 Python代码实现 经验模态分解 如果需要对一个信号进行降噪的话,我们通常会尝试将一个时域信号变换到不同的域空间,以期将信号中的噪声和有效信号在该域 ...
- 使用EMD【经验模态分解】对一维波形信号进行滤波去噪以及Python实现代码[emd eemd ceemdan]
使用EMD[经验模态分解]对一维波形信号进行滤波去噪以及Python实现代码 EMD[ Emprical Mode Decomposition]经验模态分解方法此处不再过多用赘述, 该信号处理方法可以 ...
- Python怎么读?这篇文章说的很明白
python是一门非常火爆且相对易学的编程语言,应用在各种场景.许多人想学习这门python编程语言,就连地产大佬潘石屹也已经学习了python,足见python的魅力. 那么有不少人问python怎 ...
- Python 这篇文章告诉我Python实际中干什么事情
一直心存疑虑:Python可以干什么事情? 对Python在企业级开发中的10大误解 lyxi | 2015-10-15 10:49 浏览量(216) 评论(0) 推荐(0) 数据 在 ...
- IGBT是啥?看完这篇文章你还不明白就不要再做电子行业。
电的发现是人类历史的革命,由它产生的动能每天都在源源不断的释放,人对电的需求不亚于人类世界的氧气,如果没有电,人类的文明还会在黑暗中探索. 然而在电力电子里面,最重要的一个元件就是IGBT.没有IGB ...
- 关于GO语言,这篇文章讲的很明白
摘要:本文从Go的语法,类型系统,编码风格,语言工具,编码工具和使用案例等几方面对Go语言进行了学习和探讨. Go语言发布之后,很多公司特别是云厂商也开始用Go语言重构产品的基础架构,而且很多企业都是 ...
最新文章
- 不职业不同睡姿,你是哪一种?
- 网络推广外包——竞价账户网络推广外包时怎样进行关键词推广?
- 简单的派生类构造函数C++
- PHP案例 网页计数器设计
- 【数据湖加速篇】 —— 数据湖结构化数据优化与查询加速方案
- 捡漏!用谷歌图片搜索自制深度学习数据集 | 教程
- MySQL事务及隔离级别详解
- Arquillian和Jboss的版本问题
- arduino的矩阵示例程序_用树莓派 Arduino 制造 LED 矩阵彩灯
- 没钱发工资?当着董事长总经理是好玩的,不用负责?
- (二)html 复杂表格
- 运放的电压比较器电路
- paddlepaddle手写字体识别
- pm2同时启动多个前端项目
- android 阻尼函数,数学的 H5 应用:拖动阻尼
- 如何查询网站dns服务器地址,如何查询DNS服务器地址 dns服务器地址查询方法详解...
- 牛客网《剑指offer》专栏刷题练习|锻炼递归思想|练习栈的使用
- 如何将分表汇总到总表_如何快速将几个分表合并到一张表
- svm算法 最通俗易懂讲解
- 能力素质有所欠缺_表达能力至关重要