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