function y=hht(x,t,thr)
xend = x;
nmode = 1;
extreamaNum=100;
y=[];
while extreamaNum > 3
xstart = xend;
iter = 1;
B=0;
while iter<10
[spmax, spmin]=extrema(t,xstart);
upper= spline(spmax(:,1),spmax(:,2),t);
lower= spline(spmin(:,1),spmin(:,2),t);
mean_ul = (upper + lower)/2;
xstart = xstart - mean_ul;
%=====check=====
% [spmax, spmin]=extrema(t,xstart);
n=2;
B=0;
while n<length(xstart)
k1=1;
k2=1;
%=====local max=====
if ( xstart(n)>xstart(n+1) && xstart(n)>xstart(n-1))
if xstart(n)<0, B=1;break;end
spmax(k1,1)=n;
spmax(k1,2)=xstart(n);
k1=k1+1;
end
%=====local min=====
if ( xstart(n)<xstart(n+1) && xstart(n)<xstart(n-1))
if xstart(n)>0, B=1;break;end
spmin(k2,1)=n;
spmin(k2,2)=xstart(n);
k2=k2+1;
end
n=n+1;
end
if B==0
upper= spline(spmax(:,1),spmax(:,2),t);
lower= spline(spmin(:,1),spmin(:,2),t);
mean_ul = (upper + lower)/2;
%
if all(abs(mean_ul)<thr), break; end
end
% if ( all(spmax(:,2)>0) && all(spmin(:,2)<0) )
% upper= spline(spmax(:,1),spmax(:,2),t);
% lower= spline(spmin(:,1),spmin(:,2),t);
% mean_ul = (upper + lower)/2;
% if all(abs(mean_ul)<thr)
% break;
% end
% end
iter = iter +1;
end
xend = xend - xstart;
[spmax, spmin]=extrema(t,xend);
extreamaNum=length(spmax)+length(spmin);
nmode=nmode+1;
y=[y;xstart];
end
y=[y;xend];
end