Mercurial > hg > ltpda
diff m-toolbox/classes/@miir/filload.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/filload.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,77 @@ +function f = filload(filename) + + % Load a LISO *_iir.fil file to get the filter taps and return a + % miir type object. + % + % M Hewitson 11-02-07 + % + % $Id: filload.m,v 1.4 2008/08/08 12:12:04 hewitson Exp $ + % + + delims = ' \n'; + in = fopen(filename, 'rt'); + + name = filename(1:end-4); + + if(in < 0) + error(['can not open file ' filename]); + end + lbuffer = fgets(in); + n = 1; + nacoeffs = 0; + nbcoeffs = 0; + filt.a = []; + filt.b = []; + norminst = ''; + + while (lbuffer > 0) + if(length(lbuffer) > 1) + % read the first token on this line + [token, r] = strtok (lbuffer, delims); + + % Get fs + if(strcmp(token, 'iir')) + [token, r] = strtok (r, delims); % value + fs = str2double(token); + end + + % Get a coeffs + if(token(1) == 'a') + [token, r] = strtok (r, delims); % value + nacoeffs = nacoeffs+1; + filt.a(nacoeffs) = str2double(token); + end + % Get b coeffs + if(token(1) == 'b') + [token, r] = strtok (r, delims); % value + nbcoeffs = nbcoeffs+1; + filt.b(nbcoeffs) = str2double(token); + end + end + + n = n + 1; + lbuffer = fgets(in); + end + fclose(in); + + if(nacoeffs > nbcoeffs) + error('## unstable filter: nacoeffs > nbcoeffs'); + end + + if(nacoeffs < nbcoeffs) + filt.a = [filt.a zeros(1,(nbcoeffs-nacoeffs))]; + end + + ncoeffs = nbcoeffs; + + f.name = name; + f.fs = fs; + f.a = filt.a; + f.b = filt.b; + f.ntaps = ncoeffs; + f.gain = 1; + f.histin = zeros(1, f.ntaps-1); + f.histout = zeros(1, f.ntaps-1); +end + +