李清志 发表于 2011-10-18 09:56

将原函数的两个端点作为极值怎么画包络线?

原函数的EMD分解时的包络线程序如下:
t=0:1:500;
s=cos(0.04*pi*t)+0.6*cos(0.08*pi*t)+0.5*sin(0.01*pi*t)
s1=s;
sd=1;
for n=1:3
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=0:(ah+1)
       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;       %上下包络均值
   h1=s1-m1;
   sd=sum(((s1-h1)./h1).^2);
end
end
=extr(s,t)
tt1=indmax
tt2=indmin
max=s(indmax)
min=s(indmin)
tt=indmax(1):indmax(end)
TT=indmin(1):indmin(end)
max1=spline(tt1,max,tt)
min1=spline(tt2,min,TT)
= envelope_s(t,s1,'linear')
figure(1)
plot(s1,'c')
hold on
plot(jsbl,'r')
plot(jxbl,'r')
plot(jd,jdz,'o')
plot(tt,max1,'m')
plot(TT,min1,'m')
plot(t,up,'b-.');
plot(t,down,'b-.');
hold off;
要想把原函数的两个端点作为极值点程序该怎么写啊?要想把延拓后的极值点包进去又该怎么写啊?求高手指点。
页: [1]
查看完整版本: 将原函数的两个端点作为极值怎么画包络线?