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