EEMD.m

Embed Size (px)

Citation preview

  • 8/16/2019 EEMD.m

    1/3

    %Function for CEEMDAN

    %WARNING: for this code works it is necessary to include in the same%directoy the file emd.m developed by Rilling and Flandrin.%This file is available at %http://perso.ens-lyon.fr/patrick.flandrin/emd.html%We use the default stopping criterion.%We use the last modification: 3.2007

    % Syntax

    %modes=ceemdan(x,Nstd,NR,MaxIter,SNRFlag)%[modes its]=ceemdan(x,Nstd,NR,MaxIter,SNRFlag)

    % Description

    %OUTPUT%modes: contain the obtained modes in a matrix with the rows being the modes

    %its: contain the sifting iterations needed for each mode for each realization (

    one row for each realization)

    %INPUT%x: signal to decompose%Nstd: noise standard deviation%NR: number of realizations%MaxIter: maximum number of sifting iterations allowed.%SNRFlag: if equals 1, then the SNR increases for every stage, as in [1].% If equals 2, then the SNR is the same for all stages, as in [2].

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The current is an improved version, introduced in:

    %[1] Colominas MA, Schlotthauer G, Torres ME. "Improve complete ensemble EMD: Asuitable tool for biomedical signal processing"% Biomedical Signal Processing and Control vol. 14 pp. 19-29 (2014)

    %The CEEMDAN algorithm was first introduced at ICASSP 2011, Prague, Czech Republic

    %The authors will be thankful if the users of this code reference the work%where the algorithm was first presented:

    %[2] Torres ME, Colominas MA, Schlotthauer G, Flandrin P. "A Complete Ensemble E

    mpirical Mode Decomposition with Adaptive Noise"% Proc. 36th Int. Conf. on Acoustics, Speech and Signa Processing ICASSP 2011 (May 22-27, Prague, Czech Republic)

    %Author: Marcelo A. Colominas%contact: [email protected]%Last version: 25 feb 2015%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    function [modes,its]=ceemdan(x,Nstd,NR,MaxIter,SNRFlag)x=x(:)';desvio_x=std(x);

    x=x/desvio_x;

    modes=zeros(size(x));

  • 8/16/2019 EEMD.m

    2/3

    temp=zeros(size(x));aux=zeros(size(x));iter=zeros(NR,round(log2(length(x))+5));

    for i=1:NR  white_noise{i}=randn(size(x));%creates the noise realizationsend;

    for i=1:NR  modes_white_noise{i}=emd(white_noise{i});%calculates the modes of white gaussian noiseend;

    for i=1:NR %calculates the first mode  xi=x+Nstd*modes_white_noise{i}(1,:)/std(modes_white_noise{i}(1,:));  [temp, o, it]=emd(xi,'MAXMODES',1,'MAXITERATIONS',MaxIter);  temp=temp(1,:);  aux=aux+(xi-temp)/NR;  iter(i,1)=it;

    end;

    modes= x-aux; %saves the first modemedias = aux;k=1;aux=zeros(size(x));es_imf = min(size(emd(medias(end,:),'MAXMODES',1,'MAXITERATIONS',MaxIter)));

    while es_imf>1 %calculates the rest of the modes  for i=1:NR  tamanio=size(modes_white_noise{i});  if tamanio(1)>=k+1  noise=modes_white_noise{i}(k+1,:);

      if SNRFlag == 2  noise=noise/std(noise); %adjust the std of the noise  end;  noise=Nstd*noise;  try  [temp,o,it]=emd(medias(end,:)+std(medias(end,:))*noise,'MAXMODES',1,'MAXITERATIONS',MaxIter);  catch

    it=0; disp('catch 1 '); disp(num2str(k))  temp=emd(medias(end,:)+std(medias(end,:))*noise,'MAXMODES',1,'MAXITERATIONS',MaxIter);  end;  temp=temp(end,:);  else  try  [temp, o, it]=emd(medias(end,:),'MAXMODES',1,'MAXITERATIONS',MaxIter);  catch  temp=emd(medias(end,:),'MAXMODES',1,'MAXITERATIONS',MaxIter);  it=0; disp('catch 2 sin ruido')  end;  temp=temp(end,:);  end;  aux=aux+temp/NR;  iter(i,k+1)=it;

    end;  modes=[modes;medias(end,:)-aux];  medias = [medias;aux];

  • 8/16/2019 EEMD.m

    3/3

      aux=zeros(size(x));  k=k+1;  es_imf = min(size(emd(medias(end,:),'MAXMODES',1,'MAXITERATIONS',MaxIter)));end;modes = [modes;medias(end,:)];modes=modes*desvio_x;its=iter;