gusucode.com > 局部均值分解源代码 难得的matlab程序代码源码 > lmd/smove.m

    function [y,flag]=smove(a,k)
%k=1,自动设置跨度,k=3,5,7奇数,为手动设置的跨度,k只能是奇数
%该函数功能是智能选择第一次平滑跨度,第二次平滑之后都是智能选择跨度的
l=length(a);
t=1:l;
x=a;
if k==1 
        x_pos=pos(x);%极值点位置序列
        tpoint=t(x_pos);%极值点时间值
        tpoint_d=link(t(1),t(l),tpoint);%极值点的时间轴上的位置
        kmax=max(diff(tpoint_d));%找出时间跨度最大的  相邻几点 间的 距离
        kmax1=uint16(kmax/3);
        kmax1=double(kmax1);
        jiou=uint8(rem(kmax1,2));
        if kmax1<3
            k_move=3; % b<3,滑动跨度=3,
        elseif jiou==0 % b>=3,当b是偶数时,跨度=b-1
                    k_move=(kmax1-1);
               else k_move=kmax1; %b>=3,b是奇数时,跨度=b
        end
else
%手工选取跨度
        k_move=k;%平滑跨度,瞬时频率平滑跨度的选择怎么设置,需要研究,目前没有固定值,设置为最小平滑跨度
end
%---调用move.m平滑,第一次平滑是手动设置,后面平滑是自动选择的
[y,flag]=move(a,k_move);

%--
end