findpeak.m
function n=findpeak(x)%Find peaks.找到极大值,n 为极值所在位置 n=find(diff(diff(x)>0)x(n));n(u)=n(u)+1;
getspline.m
function s=getspline(x)%三次样条函数拟合成元数据包络线
N=length(x);p=findpeak(x);s=spline([0 p N+1],[0 x(p) 0],1:N);
isimf.m
function u=isimf(x)%u=0,表示 x 不是固有模式函数,u=1 表示 x 是固有函数模式 N=length(x);
u1= sum(x(1:N-1).*x(2:N) < 0);
%求零点数 u2= length(findpeak(x))+length(findpeak(-x));%求极值点数 if abs(u1-u2)>1 u=0;
else u=1;
end
ismonotonic.m%EMD 终止条件
function u=ismonotonic(x)%u=0 表示 x 不是单调函数,u=1 表示 x 为单调函数 u1=length(findpeak(x))*length(findpeak(-x));
if u1>0 u=0; else u=1;
end
emd.m
function imf=emd(x,SDmin,SDmax)% imf = emd(x,SDmin,SDmax) x=x';
imf=