MATLAB EMD函数测试

实验数据

Ts = 0.1;
t=-5:Ts:95;
f = cos(pi*t/25)+0.6*cos(2*pi*t/25)+0.5*sin(pi*t/100);

调用matlab,emd(f)函数解算的imf波形,本征模态函数不存在端点发散问题。数据质量好

 

自个写emd过程matlab代码

第一步求出原始波形的上下包络线

第二波求上下包络线平均

第三步原始信号-上下包络线平均得到第一IMF(本征模态函数)

 

实验结论,matlab的EMD函数解决了EMD端点效应,具体解决方法未知。

%%%%MATLAB的EMD函数算出的第一本征模态函数和按照自个理解算出的第一本征模态函数对比%%%%%

clear;
Ts = 0.1;
t=5:Ts:95;
f = cos(pi*t/25)+0.6*cos(2*pi*t/25)+0.5*sin(pi*t/100);%端点问题,18版MATLAB已经解决
% y1 = wgn(1,length(f),1);
% y=f+0.02*y1;
t=1:1:length(f);
[imf1,residual1]=emd(f);
b=zeros(length(f),1);   %EMD
imf_len1=size(imf1);%EMD
figure(2);
for i=1:1:imf_len1(2)
    b=b+imf1(1:end,i);
    subplot(4,1,i);
    plot(imf1(1:end,i));
end
b=b+residual1;
%%%%%%%%三次样条极大值点%%%%%%%
[pks,locs]=findpeaks(f);
xi=1:1:length(f);
y1=spline(locs,pks,xi);
%%%%%%%三次样条极小值点%%%%%%%
[pks,locs]=findpeaks(-f);
y2=spline(locs,-pks,xi);
c=(y1+y2)/2;
imf=f-c;
figure(1);plot(t,f,'r',t,y1,'k',t,y2,'b',t,c,'g'),title('原始信号');legend('原始','上包络','下包络','平均');
figure(3);plot(t,imf1(1:end,1),'g',t,imf,'r');legend('matlab调用emd函数第一本征imf','按照emd原理算出本征imf(原始-(上下包络平均))');
%%%%%%%%%%%%结论,MATLAB自带的EMD 解决了端点问题,自己写的EMD计算结果存在端点发散问题%%%%%%%%%%%
figure(4);plot(f);

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值