• 大小: 17KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: EMD  镜像延拓  

资源简介

EMD代码 该程序使用过的是一维线性插值法,并加端点延拓,端点延拓所用的方法是镜像延拓

资源截图

代码片段和文件信息

function [imfortnbits] = emd1(varargin)
[xtsdsd2tolMODE_COMPLEXndirsdisplay_siftingsdtsd2trimfknbitNbItMAXITERATIONSFIXEFIXE_HMAXMODESINTERPmask] = init(varargin{:});
if display_sifting
  fig_h = figure;
end
while ~stop_EMD(rMODE_COMPLEXndirs) && (k < MAXMODES+1 || MAXMODES == 0) && ~any(mask)
  m = r;
  mp = m;
  if FIXE 
    [stop_siftmoyenne] = stop_sifting_fixe(tmINTERPMODE_COMPLEXndirs);
  elseif FIXE_H 
    stop_count = 0;
    [stop_siftmoyenne] = stop_sifting_fixe_h(tmINTERPstop_countFIXE_HMODE_COMPLEXndirs);
  else 
    [stop_siftmoyenne] = stop_sifting(mtsdsd2tolINTERPMODE_COMPLEXndirs);
  end
  if (max(abs(m))) < (1e-10)*(max(abs(x)))
    if ~stop_sift 
      warning(‘emd:warning‘‘forced stop of EMD : too small amplitude‘)
    else
      disp(‘forced stop of EMD : too small amplitude‘)
    end
    break
  end

  while ~stop_sift && nbit
    if(~MODE_COMPLEX && nbit>MAXITERATIONS/5 && mod(nbitfloor(MAXITERATIONS/10))==0 && ~FIXE && nbit > 100)
      disp([‘mode ‘int2str(k)‘ iteration ‘int2str(nbit)])
      if exist(‘s‘‘var‘)
        disp([‘stop parameter mean value : ‘num2str(s)])
      end
      [imiM] = extr(m);
      disp([int2str(sum(m(im) > 0))‘ minima > 0; ‘int2str(sum(m(iM) < 0))‘ maxima < 0.‘])
    end
    m = m - moyenne;
    if FIXE
      [stop_siftmoyenne] = stop_sifting_fixe(tmINTERPMODE_COMPLEXndirs);
    elseif FIXE_H
      [stop_siftmoyennestop_count] = stop_sifting_fixe_h(tmINTERPstop_countFIXE_HMODE_COMPLEXndirs);
    else
      [stop_siftmoyennes] = stop_sifting(mtsdsd2tolINTERPMODE_COMPLEXndirs);
    end
    if display_sifting && ~MODE_COMPLEX
      NBSYM = 2;
      [indminindmax] = extr(mp);
      [tmintmaxmminmmax] = boundary_conditions(indminindmaxtmpmpNBSYM);
      envminp = interp1(tminmmintINTERP);
      envmaxp = interp1(tmaxmmaxtINTERP);
      envmoyp = (envminp+envmaxp)/2;
      if FIXE || FIXE_H
        display_emd_fixe(tmmprenvminpenvmaxpenvmoypnbitkdisplay_sifting)
      else
        sxp = 2*(abs(envmoyp))./(abs(envmaxp-envminp));
        sp = mean(sxp);
        display_emd(tmmprenvminpenvmaxpenvmoypsspsxpsdtsd2tnbitkdisplay_siftingstop_sift)
      end
    end

    mp = m;
    nbit = nbit+1;
    NbIt = NbIt+1;

    if (nbit==(MAXITERATIONS-1) && ~FIXE && nbit > 100)
      if exist(‘s‘‘var‘)
        warning(‘emd:warning‘[‘forced stop of sifting : too many iterations... mode ‘int2str(k)‘. stop parameter mean value : ‘num2str(s)])
      else
        warning(‘emd:warning‘[‘forced stop of sifting : too many iterations... mode ‘int2str(k)‘.‘])
      end
    end

  end 
  
  imf(k:) = m;
  if display_sifting
    disp([‘mode ‘int2str(k)‘ stored‘])
  end
  nbits(k) = nbit;
  k = k+1;


  r = r - m;
  nbit = 0;


end

% 计入残余信号
if any(r) && ~any(mask)
  imf(k:) = r;
end

% 计数正交指数
ort = io(ximf);

% 关闭图形
if display_sifting
  close
end

end

%--------------------------------

评论

共有 条评论