www.gusucode.com > 局部均值分解源代码 难得的matlab程序代码源码 > lmd/testttt.m
load IR007_0; N=10240;%采样点数(100倍) n=0:N-1; fs=12000;%采样率 t=n/fs;%信号时间序列 x=X105_DE_time(1:N); y=x';%信号幅值序列 m=y c=m; k=0; wucha1=0.001; n_l=nengliang(m); temp=c; while 1 k=k+1; a=1; % h=c; % [pf,a,si]=zhaochun1(a,h,wucha1); [pf,a,si]=zhaochun1(a,c,wucha1); if length(pos(pf))>length(pos(temp)) if k==1 PF(k,:)=temp; A=[]; SI=[]; else PF(k,:)=c; end break; end c=c-pf; PF(k,:)=pf; temp=pf; A(k,:)=a; SI(k,:)=si; c_pos=pos(c); n_c=nengliang(c); n_pf=nengliang(pf); %停止调节 %1.emd用的是三次样条求包络,要求至少3个极值点,所以这里c的极值点个数也应该至少为3 %2.如果上一个PF的极值点数比下一个PF的极值点数少,说明结果也不正确(这个也可以作为停止条件考虑进去) %上面一句是否可以等价于当前PF的极值点个数一定要大于等于残量(c)的极值点个数(目前是用这个作为停止条件的一个参考写入程序) %3.当前PF分量的能量应该大于残量c的能量(这个有待商榷) %4.残余能量不能大于信号能量 %if n_pf<n_c if length(c_pos)<3 %|| n_c<n_l/10 ||k==3%|| n_pf<n_c%||n_c>n_l PF(k+1,:)=c; break end end