Home > classes > @miir > private > mfiltload.m

mfiltload

PURPOSE ^

MFILTLOAD Load in a filter from *.filt files.

SYNOPSIS ^

function f = mfiltload(filename)

DESCRIPTION ^

 MFILTLOAD Load in a filter from *.filt files.
 
 usage:  f = mfiltload(filename)
 
 M Hewitson 11-02-07
 

 $Id: mfiltload.m,v 1.2 2007/10/24 10:55:11 ingo Exp $

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function f = mfiltload(filename)
0002 
0003 % MFILTLOAD Load in a filter from *.filt files.
0004 %
0005 % usage:  f = mfiltload(filename)
0006 %
0007 % M Hewitson 11-02-07
0008 %
0009 %
0010 % $Id: mfiltload.m,v 1.2 2007/10/24 10:55:11 ingo Exp $
0011 %
0012 
0013 
0014 delims = ' \n';
0015 [in, msg] = fopen(filename, 'rt');
0016 
0017 if(in < 0)
0018   error(['can not open file ' filename]);
0019 end
0020 
0021 
0022 n = 1;
0023 ncoeffs = 1;
0024 filt.a = [];
0025 filt.b = [];
0026 norminst = '';
0027 
0028 lbuffer = fgets(in);
0029 
0030 while (lbuffer > 0)
0031   if(length(lbuffer) > 1)
0032     % read the first token on this line
0033     [token, r] = strtok (lbuffer, delims);
0034     % ignore comments
0035     if(token(1) ~= '#')
0036       if(strcmp(token, 'NAME')) % name tag
0037         % get next token as name
0038         [token, r] = strtok (r, delims);
0039         if(length(token) > 0)
0040           filt.name = token;
0041         end
0042       elseif(strcmp(token, 'GAIN'))
0043         % get next token as gain
0044         [token, r] = strtok (r, delims);
0045         if(length(token) > 0)
0046           filt.gain = str2num(token);          
0047           if(filt.gain < 0 | filt.gain > 1e20)
0048             error(['### gain is a strange number (' num2str(filt.gain) ')']);
0049           end
0050         end
0051       elseif(strcmp(token, 'FS'))
0052         % get next token as fs
0053         [token, r] = strtok (r, delims);
0054         if(length(token) > 0)
0055           filt.fs = str2num(token);          
0056           if(filt.fs < 0 | filt.fs > 1e10)
0057             error(['### sample rate is a strange number (' num2str(filt.fs) ')']);
0058           end
0059         end
0060       elseif(strcmp(token, 'NTAPS'))
0061         % get next token as ntaps
0062         [token, r] = strtok (r, delims);
0063         if(length(token) > 0)
0064           filt.ntaps = str2num(token);
0065           if(filt.ntaps <= 0 | filt.ntaps > 20)
0066             error('### number of taps is out of bounds (1->10)');
0067           end
0068         end
0069       elseif(strcmp(token, 'NORM'))
0070         % get next token as normalisation instruction
0071         [token, r] = strtok (r, delims);
0072         norminst = token;
0073       elseif(strcmp(token, 'COEFF'))
0074         if(ncoeffs <= filt.ntaps)
0075           % get next token as A coeff
0076           [token, r] = strtok (r, delims);
0077           if(length(token) == 0)
0078             filt.a(ncoeffs) = 0; 
0079           else
0080             filt.a(ncoeffs) = str2num(token);
0081           end
0082 
0083           % get next token as B coeff
0084           [token, r] = strtok (r, delims);
0085           if(length(token) == 0)
0086             filt.b(ncoeffs) = 0; 
0087           else
0088             filt.b(ncoeffs) = str2num(token);
0089           end
0090           
0091           ncoeffs = ncoeffs + 1;
0092         else
0093           error(['### max taps reached. Ignoring line ' num2str(n) ]);
0094         end
0095       else
0096         warning(['### keyword not found (line ' num2str(n) ')' ]);
0097       end      
0098     end
0099   end
0100   n = n + 1;
0101   lbuffer = fgets(in);
0102 end
0103 
0104 % close file
0105 fclose(in);
0106 
0107 % before returning, normalise gain if required
0108 if(length(norminst) > 0)
0109     if(strncmp(norminst, 'dc', 2))
0110        % normalise dc to unity
0111        gain = iirdcgain(filt.a, filt.b);
0112        filt.a = filt.a ./ gain;
0113     elseif(strncmp(norminst, 'hf', 2))
0114        % normalise hf to unity
0115        gain = iirhfgain(filt.a, filt.b);
0116        filt.a = filt.a ./ gain;
0117     else
0118       error(['### readfilt: normalisation instruction (' norminst ') not recognised.']);
0119     end
0120 end
0121 
0122 f.name    = filt.name;
0123 f.fs      = filt.fs;
0124 f.ntaps   = filt.ntaps;
0125 f.a       = filt.a;
0126 f.b       = filt.b;
0127 f.gain    = filt.gain;
0128 f.histin  = zeros(1, f.ntaps-1);
0129 f.histout = zeros(1, f.ntaps-1);
0130 
0131 
0132 % END

Generated on Mon 31-Mar-2008 13:54:54 by m2html © 2003