|
本帖最后由 fzwxjtu 于 2012-4-24 22:23 编辑
EMD中的包络方法还是比较理想的,下面是我仿真做的代码,楼主可以试试能用不?其实用Hilbert包络同样可以解调的,效果没这个好,就不贴了。- clear;
- fs=12800;
- t=0:1/fs:10-1/fs;t=t';
- f1=5;f2=100;
- x=cos(2*pi*f1*t).*sin(2*pi*f2*t);
- n=length(x);
- s=x;
- t=0:length(s)-1;
- s1=s;
- sd=1;
- if(sd>0.3)
- jd=find(diff(sign(diff(s1)))==-2)+1; %找h1极大值的位置
- jx=find(diff(sign(diff(s1)))==2)+1; %找h1极小值的位置
- ah=length(jd);
- al=length(jx);
- jdz(ah)=0;
- for i=1:ah
- bh=jd(i);
- jdz(i)=s1(bh);
- end %找出h1极大值对应函数值
- jxz(al)=0;
- for i=1:al
- bl=jx(i);
- jxz(i)=s1(bl);
- end %找出h1极小值对应函数值
- jsbl=spline(jd,jdz,t); %极大值拟和的上包络
- jxbl=spline(jx,jxz,t); %极小值拟和的下包络
- m1=(jsbl+jxbl)/2; %上下包络均值
- m1=m1';
- h1=s1-m1;
- sd=sum(((s1-h1)./h1).^2);
- end
- figure(1)
- plot(x);
- hold on;
- plot(jsbl,'r');
- title('采用EMD中的包络方法');
复制代码 下面是效果图,红线是包络线。
|
|