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

资源简介

对于正在开始研究EMD进行信号处理的朋友有帮助,里面有EMD的源码,可以直接在MATLAB实验。

资源截图

代码片段和文件信息

%EMD
function [imfortnbits] = emd(varargin)
[xtsdsd2tolMODE_COMPLEXndirsdisplay_siftingsdtsd2trimfknbitNbItMAXITERATIONSFIXEFIXE_HMAXMODESINTERPmask] = init(varargin{:});
if display_sifting
  fig_h = figure;
end
%主循环 : 要求至少有3个极值
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_

评论

共有 条评论