EMD和EEMD是两种常规的数据分解方法;EMD最初由新加坡南洋理工的黄教授首先开发,但由于存在模态混叠和端点效应现象,法国的Handrin等人用EMD对白噪声分解后的结果进行统计,提出了基于噪声辅助分析的改进EMD方法,即集合经验模态分解(EEMD)。
由于两种方法提出的时间较早,这里不做具体的分析介绍,读者可自行参看相关文献。
直接上代码
unction allmode=eemd(Y,Nstd,NE)
xsize=length(Y);
dd=1:1:xsize;
Ystd=std(Y);
Y=Y/Ystd;
TNM=fix(log2(xsize))-1;
TNM2=TNM+2;
for kk=1:1:TNM2,
for ii=1:1:xsize,
allmode(ii,kk)=0.0;
end
end
for iii=1:1:NE,
for i=1:xsize,
temp=randn(1,1)*Nstd;
X1(i)=Y(i)+temp;
end
for jj=1:1:xsize,
mode(jj,1) = Y(jj);
end
xorigin = X1;
xend = xorigin;
nmode = 1;
while nmode <= TNM,
xstart = xend;
iter = 1;
while iter<=10,
[spmax, spmin, flag]=extrema(xstart);
upper= spline(spmax(:,1),spmax(:,2),dd);
lower= spline(spmin(:,1),spmin(:,2),dd);
mean_ul = (upper + lower)/2;
xstart = xstart - mean_ul;
iter = iter +1;
end
xend = xend - xstart;
nmode=nmode+1;
for jj=1:1:xsize,
mode(jj,nmode) = xstart(jj);
end
end
for jj=1:1:xsize,
mode(jj,nmode+1)=xend(jj);
end
allmode=allmode+mode;
end
allmode=allmode/NE;
allmode=allmode*Ystd;
读入EXCEL数据,根据子程序计算。
[z]=xlsread('C:\Users\ljw\Desktop\计算\单独30min 数据\30min.xlsx') ;%读入数据
d=eemd(z,0,1);%根据子程序进行分解
EEMD程序中有三个参数(Y、Nstd、NE);Y为输入数据、Nstd/NE可根据数据类型和参考文献确定。值得注意的是,EEMD是在EMD的基础上开发出来的,当EEMD中的参数NSTD为0,NE为1时,程序为EMD