clear; close all load input_d Number = 7; ptime=0.1; Maximumx=max(max(d)); numberx = length(d); number=Number+1; screensize = get(0,'ScreenSize'); imf = []; figure('Position',[1 50 screensize(3) screensize(4)-150]); numbercolumn=ceil(number/2); numberrow=ceil(number/2)+1; dx1=d; for iIMF=1:number h1 = dx1; SD = 1; while SD > 0.3 subplot(nrow,2,1:2);axis([0 length(dx1) -1.5*Maximumx 1.5*Maximumx]);title('Input') f1=plot(h1,'blue'); df = diff(h1); Mmaxmin = []; for i1=1:numberx-2 if d(i1)==0 if sign(df(i1-1))~=sign(df(i1+1)) Mmaxmin = [Mmaxmin, i1]; end elseif sign(df(i1))~=sign(df(i1+1)) Mmaxmin = [Mmaxmin, i1+1]; end end if size(Mmaxmin,2) < 2 break end max1=Mmaxmin(1:2:length(Mmaxmin)); min2=Mmaxmin(2:2:length(Mmaxmin)); if h1(Mmaxmin(1))>h1(Mmaxmin(2)) maxes1 = max1; mins1 = min2; else maxes1 = min2; mins1 = max1; end maxes1 = [1 maxes1 numberx]; mins1 = [1 mins1 numberx]; hold on f2=plot(maxes1,h1(maxes1),'r*');f3=plot(mins1,h1(mins1),'g*'); maximumenv = spline(maxes1,h1(maxes1),1:numberx); minimumenv = spline(mins1, h1(mins1),1:numberx); f4=plot(maximumenv,'r--');f5=plot(minimumenv,'g--'); m1 = (maximumenv + minimumenv)/2; prevh = h1; h1 = h1 - m1; f6=plot(m1,'m1--'); eps = 0.0000001; SD = sum ( ((prevh - h1).^2) ./ (prevh.^2 + eps) ); f7=text(0,-Maximumx,['standard deviation = ',num2str(SD)]); drawnow pause (ptime); delete(f1); delete(f2); delete(f3); delete(f4); delete(f5); end imf = [imf; h1]; subplot(nrow,2,iIMF+2);plot(imf(iIMF,:),'blue');title(['IMF',num2str(iIMF)]) if size(Mmaxmin,2) < 2 delete(f1); break end dx1 = dx1 - h1; end title('Residual') Filter=[]; imf2=imf; imf2(Filter,:)=0; for i=1:length(Filter) subplot(nrow,2,Filter(i)+2);plot(0); text(1,0,'Filterted out!','color',[1 0 0]) end subplot(nrow,2,1:2);plot(dx1,'b');hold on;plot(sum(imf2,1),'k--'); title('Input\Output')