EMD/EEMD 经验模态分解/集合经验模态分解

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

EMD/EEMD 经验模态分解/集合经验模态分解_第1张图片

 

你可能感兴趣的:(算法,matlab,信号处理)