eemd2.zip

  • LINGXINSHINE
    了解作者
  • matlab
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 2
    下载次数
  • 2020-07-26 11:54
    上传日期
eemd分解MATLAB函数,内含多个函数,可直接运行
eemd2.zip
  • eemd2.m
    10.8KB
内容介绍
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 that of 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. % % The code is prepared by Zhaohua Wu. For questions, please read the "Q&A" section or % contact % zwu@fsu.edu % function allmode=eemd2(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; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ifndq.m. The module that calculates an instantaneous frequency for a given IMF; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % this is a function to calculate instantaneous based on EMD method % % function omega = ifndq(vimf, dt) % % INPUT: % vimf: an IMF; % dt: time interval of the imputted data % OUTPUT: % omega: instantanesous frequency, which is 2*PI/T, where T % is the period of an ascillation % % References can be found in the "Reference" section. % % The code is prepared by Zhaohua Wu. For questions, please read the "Q&A" section or % contact % zwu@fsu.edu % function omega = ifndq(vimf, dt) Nnormal=5; rangetop=0.90; vlength = max( size(vimf) ); vlength_1 = vlength -1; for i=1:vlength, abs_vimf(i)=vimf(i); if abs_vimf(i) < 0 abs_vimf(i)=-vimf(i); end end for jj=1:Nnormal, [spmax, spmin, flag]=extrema(abs_vimf); dd=1:1:vlength; upper= spline(spmax(:,1),spmax(:,2),dd); for i=1:vlength, abs_vimf(i)=abs_vimf(i)/upper(i); end end for i=1:vlength, nvimf(i)=abs_vimf(i); if vimf(i) < 0; nvimf(i)=-abs_vimf(i); end end for i=1:vlength, dq(i)=sqrt(1-nvimf(i)*nvimf(i)); end for i=2:vlength_1, devi(i)=nvimf(i+1)-nvimf(i-1); if devi(i)>0 & nvimf(i)<1 dq(i)=-dq(i); end end rangebot=-rangetop; for i=2:(vlength-1), if nvimf(i)>rangebot & nvimf(i) < rangetop omgcos(i)=abs(nvimf(i+1)-nvimf(i-1))*0.5/sqrt(1-nvimf(i)*nvimf(i)); else omgcos(i)=-9999; end end omgcos(1)=-9999; omgcos(vlength)=-9999; jj=1; for i=1:vlength, if omgcos(i)>-1000 ddd(jj)=i; temp(jj)=omgcos(i); jj=jj+1; end end temp2=spline(ddd,temp,dd); omgcos=temp2; for i=1:vlength, omega(i)=omgcos(i); end pi2=pi*2; omega=omega/dt; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % extrema.m. A supporting module that is used by the previous two modules %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This is a utility program for significance test. % % function [spmax, spmin, flag]= extrema(in_data) % % INPUT: % in_data: Inputted data, a time series to be sifted; % OUTPUT: % spmax: The locations (col 1) of the maxima and its corresponding % values (col 2) % spmin: The locations (col 1) of the minima and its corresponding % values (col 2) % % References can be found in the "Reference" section. % % The code is prepared by Zhaohua Wu. For questions, please read the "Q&A" section or % contact % zwu@fsu.edu % function [spmax, spmin, flag]= extrema(in_data) flag=1; dsize=length(in_data); spmax(1,1) = 1; spmax(1,2) = in_data(1); jj=2; kk=2; while jj<dsize, if ( in_data(jj-1)<=in_data(jj) & in_data(jj)>=in_data(jj+1) ) spmax(kk,1) = jj; spmax(kk,2) = in_data (jj); kk = kk+1; end jj=jj+1; end spmax(kk,1)=dsize; spmax(kk,2)=in_data(dsize); if kk>=4 slope1=(spmax(2,2)-spmax(3,2))/(spmax(2,1)-spmax(3,1)); tmp1=slope1*(spmax(1,1)-spmax(2,1))+spmax(2,2); if tmp1>spmax(1,2) spmax(1,2)=tmp1; end slope2=(spmax(kk-1,2)-spmax(kk-2,2))/(spmax(kk-1,1)-spmax(kk-2,1)); tmp2=slope2*(spmax(kk,1)-spmax(kk-1,1))+spmax(kk-1,2); if tmp2>spmax(kk,2) spmax(kk,2)=tmp2; end else flag=-1; end msize=size(in_data); dsize=max(msize); xsize=dsize/3; xsize2=2*xsize; spmin(1,1) = 1; spmin(1,2) = in_data(1); jj=2; kk=2; while jj<dsize, if ( in_data(jj-1)>=in_data(jj) & in_data(jj)<=in_data(jj+1)) spmin(kk,1) = jj; spmin(kk,2) = in_data (jj); kk = kk+1; end jj=jj+1; end spmin(kk,1)=dsize; spmin(kk,2)=in_data(dsize); if kk>=4 slope1=(spmin(2,2)-spmin(3,2))/(spmin(2,1)-spmin(3,1)); tmp1=slope1*(spmin(1,1)-spmin(2,1))+spmin(2,2); if tmp1<spmin(1,2) spmin(1,2)=tmp1; end slope2=(spmin(kk-1,2)-spmin(kk-2,2))/(spmin(kk-1,1)-spmin(kk-2,1)); tmp2=slope2*(spmin(kk,1)-spmin(kk-1,1))+spmin(kk-1,2); if tmp2<spmin(kk,2) spmin(kk,2)=tmp2; end else flag=-1; end flag=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % significance.m This is used to obtain the "percenta" line based on Wu and Huang(2004). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % function [sigline, logep] = significance(imfs, percenta) % % that is used to obtain the "percenta" line based on Wu and % Huang (2004). % % NOTE: For this program to work well, the minimum data length is 36 % % INPUT: % percenta: a parameter having a value between 0.0 ~ 1.0, e.g., 0.05 % represents 95% confidence level (upper bound); and 0.95 % represents 5% confidence level (lower bound) % imfs: the true IMFs from running EMD code. The first IMF must % be included for it is used to obtain the relative mean % energy for other IMFs. The trend is not included. % OUTPUT: % sigline: a two column matrix, with the first column the natural % logarithm of mean period, and the second column the % natural logarithm of mean energy for significance line % logep: a two colum matrix, with the first column the natural % logarithm of mean period, and the second column the % n
评论
    相关推荐
    • EEMD,EMD.rar
      EEMD将特殊幅值下的高斯白噪声引入到分解的过程,可以消除上包络和下包络之间存在的拟合误差,从而很好地避免不同尺度下IMF的模态混叠现象,
    • eemd.rar
      对信号进行EEMD分解,程序已调通,欢迎下载。有问题请留言
    • eemd.rar
      集合经验模态分解(EEMD)源程序,内涵实例验证,亲测可用
    • eemd.zip
      EMD,EEMD源代码,可以做信号分析,Hilbert-Huang变换等信号处理项目。
    • eemd.zip
      MATLAB背景下的EEMD函数内容,适合入门学习,欢迎下载。
    • EMD/EEMD program
      EMD/EEMD program,用于信号的分解,EMD和EEMDMATLAB代码
    • eemdmatlab代码-ECG-EMD:心电图
      EEMD Matlab代码最初来自 由于新的Matlab 2019b没有eemd,因此需要eemd。 非常感谢老板。 使用EMD去噪ECG 这些MATLAB代码是基于CEEMDAN的ECG去噪技术的实现,该技术基于以下指导的文献。 这是孟买IIT的一个学期研究...
    • matlabEEMD0.rar
      eemdmatlab源程序,用来希尔伯特变换,分析信号,经验模态,里面还有其他有用子程序。萌新在学习
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档