-
大小: 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样本熵特征提取\
- 上一篇:平行因子分析法
- 下一篇:matlab画出高斯脉冲以及其功率谱
评论
共有 条评论