Matlab使用EMD

先产生了一个正弦信号便于分解,显示其波形和频谱图便于对照。

clear;clc;
%% 产生原始信号
f1=5;                        	   % 信号1的频率
f2=2;                              % 信号2的频率
f3=10;                      	   % 信号3的频率
fs=30;                             % 采样率
N=fs*60;
t = 0 : 1/fs : (N-1)/fs;
y1=5*sin(2*pi*f1*t)+10*sin(2*pi*f2*t)+8*sin(2*pi*f3*t); 
figure(1);subplot(2,1,1);plot(y1,'r');    
%% 画出原信号的频率谱
n=0:N-1;
f=n*fs/N;                      
y=fft(y1,N);                  
mag=abs(y)*2/N;               
subplot(2,1,2);                   
plot(f(1:N/2),mag(1:N/2));     
%% 画出EMD分解的IMF值的图像
% [imf,residual,info] = emd(y1,'Interpolation','pchip');
emd(y1,'Interpolation','pchip');

原始信号的波形及频谱图如图所示:
在这里插入图片描述
EMD函数画出的图像如图所示:(只自动显示了3个IMF图像)

在这里插入图片描述
在空白位置单击右键可以选择显示剩下的IMF值。
在这里插入图片描述
在这里插入图片描述
按OK后即可同时显示所有IMF的图像。
在这里插入图片描述
同时显示波形和频谱图
对上面的代码需要简单的修改,该方法需要知道每个IMF分解出的值,并通过FFT变换为频域中画图。

[imf,residual,info] = emd(y1,'Interpolation','pchip');
for i= 1:size(imf,2)
    subplot(size(imf,2),2,2*i-1);plot(imf(:,i));
    subplot(size(imf,2),2,2*i);
    y1=fft(imf(:,i),N);  
    mag=abs(y1)*2/N;    
    f=n*fs/N;    
    plot(f(1:N/2),mag(1:N/2)); 
end

运行结果如下图所示:
在这里插入图片描述
[imf,residual,info] =emd(y1,‘Interpolation’,‘pchip’);该式子可获取到EMD分解的结果,即IMF值及残差值等参数,在后续可以通过for循环画出对应的波形和频谱图。

可以通过matlab右侧的变量区看分解出来的IMF是横着的还是竖着的格式。

在EMD函数中可以通过添加参数来增多分解的IMF值,在matlab的输入参数部分可以找到详细介绍,同时也推荐一位up主的学习视频。

可以通过[imf,residual,info] = emd(y1,‘Interpolation’,‘pchip’,“SiftRelativeTolerance”,0.02);个人理解的是修改后面的参数值会分解得更细致,本来默认的0.2可能会使幅度相近的两个信号在一个IMF中,改小可以识别到这样的情况会减小混叠情况。

推荐学习视频https://www.bilibili.com/video/BV1Tk4y1r7h1

  • 20
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑电信号要分类

你的鼓励是我创作的前进动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值