matthiasm@8: function [dfout,m] = adapt_thresh(df,pre,post); matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: df = df(:)'; matthiasm@8: % uses juan's adaptive median threshold matthiasm@8: matthiasm@8: alpha = 9; matthiasm@8: thresh=0.033; matthiasm@8: fn = @mean; matthiasm@8: matthiasm@8: if(nargin<2) matthiasm@8: pre = 8; matthiasm@8: post = 7; matthiasm@8: end matthiasm@8: matthiasm@8: %df = df-min(df); matthiasm@8: %alpha norm matthiasm@8: %df = df/real(mean(abs(df+eps).^alpha).^(1/alpha)); matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: % low pass filtering matthiasm@8: matthiasm@8: %[b,a]=butter(2,0.28); matthiasm@8: matthiasm@8: %b = [0.1600 0.3200 0.1600]; matthiasm@8: %a = [1.0000 -0.5949 0.2348]; matthiasm@8: matthiasm@8: matthiasm@8: %df=filtfilt(b,a,df); matthiasm@8: matthiasm@8: matthiasm@8: % median threshold matthiasm@8: matthiasm@8: N=length(df); matthiasm@8: matthiasm@8: for i=1:min(post,N) matthiasm@8: k=min(i+pre,N); matthiasm@8: m(i)=feval(fn,df(1:k)); matthiasm@8: % m2(i) = feval(@mean,df(1:k)); matthiasm@8: end matthiasm@8: matthiasm@8: if N>(post+pre) matthiasm@8: m=[m feval(fn,buffer(df,post+pre+1,post+pre,'nodelay'))]; matthiasm@8: end matthiasm@8: matthiasm@8: % if N>(post+pre) matthiasm@8: % m2=[m2 feval(@mean,buffer(df,post+pre+1,post+pre,'nodelay'))]; matthiasm@8: % end matthiasm@8: matthiasm@8: for i=N+(1-pre:0) matthiasm@8: j=max(i-post,1); matthiasm@8: m(i)=feval(fn,df(j:end)); matthiasm@8: % m2(i)=feval(@mean,df(j:end)); matthiasm@8: end matthiasm@8: matthiasm@8: %df = (df- m*thresh); matthiasm@8: df = df-m; matthiasm@8: matthiasm@8: dfout = (df>0).*df; matthiasm@8: %dfout = df;