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