Mercurial > hg > ltpda
diff m-toolbox/classes/@miir/mkallpass.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@miir/mkallpass.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,44 @@ +% MKALLPASS returns an allpass filter miir(). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: MKALLPASS returns an allpass filter miir(). +% +% CALL: f = mkallpass(f, pl) +% +% VERSION: $Id: mkallpass.m,v 1.2 2010/10/29 16:09:14 ingo Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function f = mkallpass(f, pl) + + fs = find(pl, 'fs'); + method = find(pl, 'method'); + D = find(pl, 'delay'); + N = find(pl, 'N'); + + % Build filter coefficients + switch method + case 'thirlen' + for k=0:N + a(k+1) = (-1.0)^k * factorial(N)/(factorial(k)*factorial(N-k)); + for n=0:N + a(k+1) = a(k+1) * (D-N+n)/(D-N+k+n); + end + end + + a = a/sum(a); + b(1) = 1; + + otherwise + error(['Unrecognised method [' method ']']); + end + + % Set filter properties + f.name = 'bandpass'; + f.fs = fs; + f.a = a; + f.b = b; + f.histin = zeros(1,f.ntaps-1); % initialise input history + f.histout = zeros(1,f.ntaps-1); % initialise output history +end +