To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / _beattracker / adapt_thresh.m
History | View | Annotate | Download (949 Bytes)
| 1 |
function [dfout,m] = adapt_thresh(df,pre,post); |
|---|---|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
df = df(:)'; |
| 7 |
% uses juan's adaptive median threshold |
| 8 |
|
| 9 |
alpha = 9; |
| 10 |
thresh=0.033; |
| 11 |
fn = @mean; |
| 12 |
|
| 13 |
if(nargin<2) |
| 14 |
pre = 8; |
| 15 |
post = 7; |
| 16 |
end |
| 17 |
|
| 18 |
%df = df-min(df); |
| 19 |
%alpha norm |
| 20 |
%df = df/real(mean(abs(df+eps).^alpha).^(1/alpha)); |
| 21 |
|
| 22 |
|
| 23 |
|
| 24 |
|
| 25 |
% low pass filtering |
| 26 |
|
| 27 |
%[b,a]=butter(2,0.28); |
| 28 |
|
| 29 |
%b = [0.1600 0.3200 0.1600]; |
| 30 |
%a = [1.0000 -0.5949 0.2348]; |
| 31 |
|
| 32 |
|
| 33 |
%df=filtfilt(b,a,df); |
| 34 |
|
| 35 |
|
| 36 |
% median threshold |
| 37 |
|
| 38 |
N=length(df); |
| 39 |
|
| 40 |
for i=1:min(post,N) |
| 41 |
k=min(i+pre,N); |
| 42 |
m(i)=feval(fn,df(1:k)); |
| 43 |
% m2(i) = feval(@mean,df(1:k)); |
| 44 |
end |
| 45 |
|
| 46 |
if N>(post+pre) |
| 47 |
m=[m feval(fn,buffer(df,post+pre+1,post+pre,'nodelay'))]; |
| 48 |
end |
| 49 |
|
| 50 |
% if N>(post+pre) |
| 51 |
% m2=[m2 feval(@mean,buffer(df,post+pre+1,post+pre,'nodelay'))]; |
| 52 |
% end |
| 53 |
|
| 54 |
for i=N+(1-pre:0) |
| 55 |
j=max(i-post,1); |
| 56 |
m(i)=feval(fn,df(j:end)); |
| 57 |
% m2(i)=feval(@mean,df(j:end)); |
| 58 |
end |
| 59 |
|
| 60 |
%df = (df- m*thresh); |
| 61 |
df = df-m; |
| 62 |
|
| 63 |
dfout = (df>0).*df; |
| 64 |
%dfout = df; |