很多同学留言要EMD的代码,这篇文章就写一下吧。
如果你的MATLAB版本是2018a及更新版本,那么是可以直接调用emd函数的。
以下代码在MATLAB2019a中编写,未在其他版本中测试。
load('sinusoidalSignalExampleData.mat','X','fs') %载入数据t = (0:length(X)-1)/fs;plot(t,X) %绘制原始信号图xlabel('Time(s)') emd(X,'Interpolation','pchip') %emd分解得到原始信号图如下图,它是由不同的振幅和频率的正弦信号叠加得到的。

原始信号
得到的EMD分解图为:

EMD分解结果
从title中可以看到,一种有9个 IMF 分量,而图中只显示了其中的IMF1~IMF3,如果要显示其他分量,在图片的空白处点击右键:

然后选择“IMF Selector”,打开如下界面:

从IMF Selector中可以选择在图片中显示的IMF分量、原始信号和残差值。
使用新版MATLAB的简单emd的 使用方法 就是这样,如果想要进一步使用emd的分解结果,可以查看MATLAB的官方文档:Empirical mode decomposition - MATLAB emd - MathWorks 中国
具体的内容这里不展开讲了,提示两个地方:
有一个常用的 EMD工具箱 ,由G-Rilling提供,在MATLAB2017及以下的版本中可以使用。当然在新版本的MATLAB中同样可以安装使用。
该工具箱与MATLAB自带的emd函数相比,可以说各有千秋。在我们最常用的emd分解上来说,该工具箱不像自带函数那样有丰富的设置。其典型调用形式如下:
imf = emd(varargin)相比新版MATLAB自带函数来讲,似乎有些简陋,只能返回各分量的分解结果,无法自动画图。不过没关系,没有枪没有炮我们自己造。
fs = 100; %采样频率t = 0:1/fs:10;x = sin(20*pi*t);y = 2*sin(1*pi*t);sig = x+y;PlotEMDandFFT(sig,fs)其中PlotEMDandFFT是由笔者编写的函数,输入原始信号和采样频率,可以得到下图:

EMD分解结果及各分量对应的频谱
使用这个函数可以得到各IMF分量图和对应的频谱图。由于加入了频谱,从某中程度上来看这个图比MATLAB自带函数画图还要更好用一些。
要如何安装这个工具箱呢,正常的方法是把工具箱添加到MATLAB的路径中,不过有很多同学跟我说没用过MATLAB,不知道怎样添加路径。于是博主把常用的三个跟EMD相关的工具箱(EMD/package_emd/TFTB)打包在一起,写了个便捷安装函数,可以实现一键安装。

便捷安装EMD工具箱
如果你的MATLAB版本不是2018或者2019,那么可以使用第二种方法实现emd的功能。
如果想要获取工具箱和PlotEMDandFF函数等代码,关注我的公众号“看海的城堡”,微信号为“khscience”,回复“EMD”就能拿到啦,公众号里可能还会有更多有趣的东西分享。
欢迎持续关注我的专栏与信号处理有关的那些东东
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删