• 大小: 7KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-04
  • 语言: Matlab
  • 标签: matlab,EMD  

资源简介

利用经验模态分解提取IMF向量与残余向量的matlab程序,可以直接运行emdplus.m,亲测有效,不能运行不要钱~,主函数与样本熵函数samp经过了分析,里面有详细注解,EMD.m函数用的歪国人写的的~目前也是较为常用的版本了

资源截图

代码片段和文件信息

%当X是一个真正的矢量时,计算X的经验模态分解,
%每一行包含一个max的经验模态?最后一个是残余向量,默认准则在文献2提出
%本函数用于对原始信号varargin进行分解,imf为分解出的本征模态向量
%函数返回值imf为本征模态向量ort=一个数,nbits为1*4的向量?
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

  % in case the current mode is so small that machine precision can cause
  %如果当前模式太小机器精度的原因
  % spurious extrema to appear
  %伪极值出现
  if (max(abs(m))) < (1e-16)*(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

    % display
    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 ite

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1701  2015-09-02 21:36  EMD样本熵特征提取\Emdplus.m
     文件       17907  2015-09-02 21:37  EMD样本熵特征提取\emd.m
     文件         656  2015-09-02 21:35  EMD样本熵特征提取\samp.m
     目录           0  2015-09-02 22:36  EMD样本熵特征提取\

评论

共有 条评论

相关资源