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

    
function ff=shunpin(y)
% 求瞬时频率
% 1.调整信号,使其使用于直接法求取瞬时频率
% 2.求反余弦,求导,不足点数
% 3.对求取后的频率经过平滑去毛刺,平滑跨度的选取还是个遗留问题
S = size(y);          %S(1):x行数,S(2): x列数
style=3;%style设置平滑跨度,只能是奇数,为1:自动选频率平滑跨度 其他奇数:手工设置的其他奇数的平滑跨度值
if ((S(1) > 1) && (S(2) > 1)) || (length(S) > 2)  %如果y是矩阵,
      num=S(1);
      for nn=1:num
            yy=tiaozheng(y(nn,:));  %极大值极小值处理,调整y的范围到[-1,1]
            q=acos(yy);%求反余弦
            f=abs(diff(q))/(2*pi);
            f=cat(2,f(1),f);%补充一个点,将f的第一个点补充到序列左边(使得与时间长度相等)
            %--------通过选取相邻极值点的最大跨度的1/3自动选取滑动跨度
            ff(nn,:)=smove(f,style);
      end      
else%否则y是向量
            yy=tiaozheng(y);%极大值极小值处理,调整y的范围到[-1,1]
            q=acos(yy);%求反余弦
            f=abs(diff(q))/(2*pi);
            f=cat(2,f(1),f);%补充一个点,将f的第一个点补充到序列左边(使得与时间长度相等)
            %--------通过选取相邻极值点的最大跨度的1/3自动选取滑动跨度
            ff=smove(f,style);
end
end