经验模态分解(EMD)的Python实现。该软件包包含多种EMD变体,并计划在未来提供更多。
PyEMD允许您使用不同的样条曲线进行包络线插值,以及不同的停止准则和极值插值方法。
安装软件包最快的方法是通过pip。
$ pip install EMD-signal
这样您就可以安装PyEMD在PyPi上托管的最新稳定版本
如果您只想使用EMD及其变体,通过pip安装PyEMD是最好的方法。
但是,如果您想要PyEMD的最新版本,或者出于某种原因想要下载代码并自己构建软件包,也可以这样做。
源代码是公开的,托管在GitHub上。
要下载代码,您可以进入源代码页面并点击Code -> Download ZIP,或使用git命令行
$ git clone https://github.com/laszukdawid/PyEMD
从源代码安装软件包使用以下命令行:
$ python3 -m pip install .
在进入由git创建的PyEMD目录后执行此命令。
从源代码安装PyEMD的更快方法是在同一命令中使用pip和git:
$ python3 -m pip install git+https://github.com/laszukdawid/PyEMD.git
注意,这将在当前环境中安装它。如果您在处理多个项目,或与他人共享资源,我们建议使用虚拟环境。
如果您想使安装可编辑,请使用pip的-e标志
更详细的示例包含在文档中或 PyEMD/examples目录中。
在大多数情况下,默认设置就足够了。只需导入EMD并将您的信号传递给实例或emd()方法。
from PyEMD import EMD import numpy as np s = np.random.random(100) emd = EMD() IMFs = emd(s)
下图是使用以下输入生成的: $S(t) = cos(22 \pi t^2) + 6t^2$

使用集成EMD(EEMD)最简单的方法是导入EEMD并将您的信号传递给实例或eemd()方法。
Windows:请不要跳过if __name__ == "__main__"部分。
from PyEMD import EEMD import numpy as np if __name__ == "__main__": s = np.random.random(100) eemd = EEMD() eIMFs = eemd(s)
与前面的方法一样,使用CEEMDAN也有一种简单的方法。
Windows:请不要跳过if __name__ == "__main__"部分。
from PyEMD import CEEMDAN import numpy as np if __name__ == "__main__": s = np.random.random(100) ceemdan = CEEMDAN() cIMFs = ceemdan(s)
该软件包包含一个简单的可视化辅助工具,可以帮助您,例如,处理时间序列和瞬时频率。
import numpy as np from PyEMD import EMD, Visualisation t = np.arange(0, 3, 0.01) S = np.sin(13*t + 0.2*t**1.4) - np.cos(3*t) # 提取内在模态函数(IMF)和残余 # 对于EMD emd = EMD() emd.emd(S) imfs, res = emd.get_imfs_and_residue() # 一般情况: #components = EEMD()(S) #imfs, res = components[:-1], components[-1] vis = Visualisation() vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True) vis.plot_instant_freq(t, imfs=imfs) vis.show()
即时(JIT)编译的EMD是EMD的一个版本,它在处理非常大的信号或多次重复使用同一实例时表现出色。强烈建议在使用Jupyter笔记本进行实验时使用它,特别是在修改输入而不是方法本身时。
JIT的问题在于编译发生在第一次执行时,这可能会耗费大量时间。对于小型信号或只执行一次分解,额外的编译时间将明显大于分解时间,从而降低性能。
更多信息请参阅文档或示例了解如何使用代码。 这是实验性的,因为它的价值仍有待商榷,而且作者(我)并不精通JIT优化,所以可能会出现错误。
欢迎任何反馈。如果有兴趣,我很乐意改进。请提交问题单提出问题和建议。
要在PyEMD中启用JIT,请使用jit选项安装,即
$ pip install EMD-signal[jit]
遗憾的是,这是实验性的,我们不能保证输出是有意义的。
最简单的用法是将图像作为单色numpy 2D数组传递。与其他模块一样,可以使用实例的默认设置,或者更明确地使用emd2d()方法。
from PyEMD.EMD2d import EMD2D #, BEMD import numpy as np x, y = np.arange(128), np.arange(128).reshape((-1,1)) img = np.sin(0.1*x)*np.cos(0.2*y) emd2d = EMD2D() # BEMD()也可以 IMFs_2D = emd2d(img)
不幸的是,这是它们的本质。它们每次都执行多次EMD,每次都稍微修改版本。添加的噪声可能会导致许多极值的产生,这将降低自然三次样条的性能。关于如何解决这个问题的一些技巧,请参阅文档中的加速技巧。
如果你有任何问题、请求或只是想打个招呼,请随时联系我。 知道我帮助了某人或使他们的工作变得更容易总是很高兴的。 对项目做出贡献也是可以接受的,并且非常欢迎。
如果你发现这个包很有用,并想在你的工作中引用它, 请使用以下结构:
@misc{pyemd, author = {Laszuk, Dawid}, title = {Python implementation of Empirical Mode Decomposition algorithm}, year = {2017}, publisher = {GitHub}, journal = {GitHub Repository}, howpublished = {\url{https://github.com/laszukdawid/PyEMD}}, doi = {10.5281/zenodo.5459184} }

一站式AI短剧创作平台
Pixmax专注打造下一代“ AI 视觉创作引擎”,整合行业顶尖 AI 大模型、工工业级精准控制及企业级协同管理功能,是全方位的 AI 内容创作平台。


字节跳动旗下 AI 智能助手
字节跳动旗下 AI 智能助手


GPT充值
支持 ChatGPT Plus / Pro 充值服务,支付便捷,自动发货,售后可查。


AI 图片生成平台
GPT Image 2 是面向用户的 AI 图片生成平台,支持文生图、图生图及多模型创意工作流。


你的AI Agent团队
Vecbase 是专为 AI 团队打造的智能工作空间,将数据管理、模型协作与知识沉淀整合于一处。算法、产品与业务在同一平台无缝协同,让从数据到 AI 应用的落地更快一步。


全球首个AI音乐社区
音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。


阿里Qoder团队推出的桌面端AI智能体
QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。


一站式搞定所有学习需求
不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。


为AI短剧协作而生
专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。


能听懂你表达的视频模型
Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号