资源简介
emd 的改进版程序ceemd,在emd加噪声的基础上,减去了emd的噪声,这使得噪声得到抑制。
代码片段和文件信息
function [imftresidtspecwaddmeancountimfnresidn] = ceemdnew(xthrshsthreshNalpha)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% [imfresidspecwaphsmeancount] = emd(xthrshsthreshNalpha)
% Inputs:
% thrsh=thershold variance [0.2 to 0.3 usually]
% sthrh=threshold for first iteration [between 4/8]
% N=number of trials for the ensemble emd
% alpha=multiplier for white noise (defaults to .1*std(x) as suggested by Huang)
% Outputs:
% imf= intrinsic mode functions (imf(:end))
% resid=residue; spec is the spectrum (A*e^jwt) w is the
% frequency a is the ampitlude phs is the instphase
x = transpose(x(:));
imf = [];
k=0;
xt=x;
if nargin<5
% alpha=.1*std(xt);
alpha=0.5*std(xt);% 按照需要修改,huang的建议是0.1,但是0.1会造成端点噪声大。
end
cx=0;
s=0;
i=1;
lim=1;
imfprev=[];
while i if i~=1
Noise=alpha.*randn(size(xt));
else
Noise=0;
end
for t=1:lim
count=0;
x=xt+(-1)^t*Noise;
while ~ismonotonic(x)
count=count+1;
if i==1
k=k+1;
imf{count}=zeros(size(x));
meancount(k)=0;
end
x1 = x;
VA = Inf;
cn=0;
while (VA > thrsh) | ~isimf(x1)
cn=cn+1;
s1 = getspline(x1);
s2 = -getspline(-x1);
x2 = x1-(s1+s2)/2;
VA = var((s1+s2)./(2*x1));
x1 = x2;
if i==1 cx=cx+1; elseif cn>cx*2 break; end
if i==1 && cx>numel(xt)/2
s=s+1;
if s>sthresh
x1=xt+alpha.*randn(size(xt));
s=0;
cx=0;
disp(‘Restarting Sifting‘);
end
end
end
% if cn>cx*2 && i~=1
% disp(‘Too long for ensemble member breaking count‘)
% flag=1;
% break;
% else
% flag=0;
% end
if count<=k
if i==1
imf{count} = x1+imf{count};
else
相关资源
- CEEMDAN,EEMD和EMD.rar
- CEEMD代码,matlab亲测可用
- 经验模态分解CEEMDAN
- 加注释完整CEEMD程序的matlab代码
- SVD分解结合ceemdan去噪
- matlab代码 CEEMD程序+注释
- CEEMD 法国人改进EMD的新程序
- CEEMD 新的EMD改进算法
- CEEMD_V ceemdan是对EMD EEMD的改进算法
- CEEMD-Noise
- [HHT]-fast-EMDEEMDCEEMD-with-ref 本压缩文件
- CEEMD_eemd 此文件包含了法国人Gabriel
- emdcmp 对心电信号进行EMD分解
- ceemd 一段eemd分解的程序
- 关于经验模态分解的的一些matlab程序
评论
共有 条评论