eemd.rar

  • jackma_yun
    了解作者
  • matlab
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 6
    下载次数
  • 2020-04-09 21:38
    上传日期
对信号进行EEMD分解,程序已调通,欢迎下载。有问题请留言
eemd.rar
  • eemd
  • EEMD1.m
    5.3KB
内容介绍
%调用:imf=eemd(X,0.1,50,1);TNM2为分解的IMF的层数。 % This is an EMD/EEMD program % % function allmode=eemd(Y,Nstd,NE) % % INPUT: % Y: Inputted data; % Nstd: ratio of the standard deviation of the added noise and thatof % Y;即为添加噪声和原始信号的标准差之比 % NE: Ensemble number for the EEMD,集合平均次数 % OUTPUT: % A matrix of N*(m+1) matrix, where N is the length of the input % data Y, and m=fix(log2(N))-1. Column 1 is the original data, columns 2, 3, ... % m are the IMFs from high to low frequency, and comlumn (m+1) is the % residual (over all trend). % % NOTE: % It should be noted that when Nstd is set to zero and NE is set to 1, the % program degenerates to a EMD program. % % References can be found in the "Reference" section. % function imf=EEMD1(x,Nstd,NE,yes) N=length(x); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%EEMD程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%入口参数设置%%%%%% Y=x; %Y行向量,一行多列 xsize=length(Y); %%%%%%%%%%%%%%%%%%%%%%%%%%%% dd=1:1:xsize; %dd为原始数据采样点数序号 Ystd=std(Y); %得到Y的二阶统计标准差,反映信号在均值处的波动大小 Y=Y/Ystd; %原始信号幅值归一化 TNM=13; TNM2=TNM+2; %TNM2=8 %IMF的层数 allmode=zeros(xsize,TNM2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %此大循环为NE次集合EMD算法过程 for iii=1:1:NE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %此循环为单次emd算法循环中加入白噪声 % for i=1:xsize, % temp=randn(1,1)*Nstd; %产生一个正态分布的随机数 % X1(i)=Y(i)+temp; %X1为单次算法中的加入白噪声信号 % end X1=Y+yes*randn(xsize,1)*Nstd; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % for jj=1:1:xsize, % mode(jj,1) = Y(jj); %多维数组mode的第一列(多行)为归一化的原始信号 % end mode(1:xsize,1)=Y; iii xorigin = X1; %xorigin、X1为单次算法中的加入白噪声信号 xend = xorigin; mean_energy=0; nmode = 1; %nmode为基本模式分量的个数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %此循环为对加入白噪声的白噪声进行EMD分解 while nmode <= TNM %分解次数为6次,即IMF的个数为6 xstart = xend; %返回迭代 SD =16; while SD>0.0001 [spmax, spmin, flag]=extrema_eemd(xstart); upper= spline(spmax(:,1),spmax(:,2),dd);%spmax的第一列为极大值点的横坐标数组,第二列为极大值点的纵坐标数组,最后插值出dd处的函数值 lower= spline(spmin(:,1),spmin(:,2),dd); mean_ul = (upper + lower)/2; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %mean_energy为均值曲线与x轴包围的面积 % for i=xsize % mean_energy=mean_energy+abs(mean_ul(i)); % end mean_energy=sum(abs(mean_ul(:))); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %停止准则采用的是于德介讲述的能量差跟踪法 E1=0; Etot=0; %Ex为每次循环中待分解信号纵坐标的平方和,即为待分解信号的总能量 Ex=0; % for i=1:xsize % Ex=Ex+xstart(i)^2; % end Ex=sum(xstart.^2); xstart = xstart - mean_ul'; %从待处理信号xstart中减去其上下包络线均值mean_ul rest=Y-xstart; SD=0; % for i=1:xsize % Etot=mean_ul(i)^2+Etot; % E1=xstart(i)^2+E1; % end Etot=sum(mean_ul.^2); E1=sum(xstart.^2); SD=abs(Etot+E1-Ex)/E1; end %单个基本模式分量分解结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% xend = xend - xstart; nmode=nmode+1; % for jj=1:1:xsize, % mode(jj,nmode) = xstart(jj);%在进行第nmode次(加入白噪声的原始信号)EMD分解后mode的第nmode列为基本模式分量值 % end mode(1:xsize,nmode)=xstart; end %TNM个基本模式分量分解结束,即为单次集成EMD分解结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %mode的最后一列为剩余模式分量 % for jj=1:1:xsize, % mode(jj,nmode+1)=xend(jj); % end mode(1:xsize,nmode+1)=xend; %%%%%%%%%%%%%%% allmode=allmode+mode; end %进行NE集成次数的EMD分解算法结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% allmode=allmode/NE; %集成结果 allmode=allmode*Ystd; %恢复幅值,去除归一化 IMFs=allmode'; %IMFs为一个node+1行xsize列的矩阵 %%%%%%%%%%%%%%%%%%%%% %for j=1:nmode+1 % for i=1:xsize % xx(j,i,ij)=IMFs(j,i); % end %end % xx(1:nmode+1,1:xsize,ij)=IMFs(1:nmode+1,1:xsize); %xx为一个三维阵列(nmode+1行xsize列M页),每一页为IMFs的二维矩阵 %%%%%%%%%%%%%%%%%%%%%% %for ij=1:M 且(M=10) %结果是形成了10页的IMFs %end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%for ij=1,M % for j=1:nmode+1 % for i=1:xsize % xxxx(j,i)=mean(xx(j,i)); %mean(A)为求A的每一列的均值,mean(A,2)为求A的每行的均值 % end % end xxxx(1:nmode+1,1:xsize)=IMFs; %end %此段为对每一页 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % for i=1:nmode+1 % subplot(nmode+1,1,i) %h= subplot(m,n,p)将figure划分为m×n块,在第p块创建坐标系 % plot(xxxx(i,:)) % end imf=xxxx; return
评论
    相关推荐
    • EEMD Matlab runcode.rar
      eemd信号分解,分解成多个固有经验函数
    • eemd.rar
      集合经验模态分解(EEMD)源程序,内涵实例验证,亲测可用
    • eemdmatlab代码-EMD_EEMD:EMD_EEMD
      EEMD Matlab代码原始副本来自 需要emd_eemd部分 ceced部分可能直接来自MaríaEugenia Torres或Patric Flandrin。 宣告 由于没有matlab许可证和项目迁移,因此不再提供对matlab代码的支持。 我强烈建议您安装免费软件...
    • EMD/EEMD program
      EMD/EEMD program,用于信号的分解,EMD和EEMDMATLAB代码
    • eemdmatlab代码-ECG-EMD:心电图
      EEMD Matlab代码最初来自 由于新的Matlab 2019b没有eemd,因此需要eemd。 非常感谢老板。 使用EMD去噪ECG 这些MATLAB代码是基于CEEMDAN的ECG去噪技术的实现,该技术基于以下指导的文献。 这是孟买IIT的一个学期研究...
    • emd 和 eemdMATLAB源程序
      emd 和 eemdMATLAB源程序,供大家参考学习了
    • matlabEEMD0.rar
      eemdmatlab源程序,用来希尔伯特变换,分析信号,经验模态,里面还有其他有用子程序。萌新在学习
    • EEMD和EMD工具箱 matlab
      matlab中~~EEMD和EMD~工具箱~ 供有需要的下载 ,,,
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档