0001 function f = mfiltload(filename)
0002
0003
0004
0005
0006
0007
0008
0009
0010
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
0033 [token, r] = strtok (lbuffer, delims);
0034
0035 if(token(1) ~= '#')
0036 if(strcmp(token, 'NAME'))
0037
0038 [token, r] = strtok (r, delims);
0039 if(length(token) > 0)
0040 filt.name = token;
0041 end
0042 elseif(strcmp(token, 'GAIN'))
0043
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
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
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
0071 [token, r] = strtok (r, delims);
0072 norminst = token;
0073 elseif(strcmp(token, 'COEFF'))
0074 if(ncoeffs <= filt.ntaps)
0075
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
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
0105 fclose(in);
0106
0107
0108 if(length(norminst) > 0)
0109 if(strncmp(norminst, 'dc', 2))
0110
0111 gain = iirdcgain(filt.a, filt.b);
0112 filt.a = filt.a ./ gain;
0113 elseif(strncmp(norminst, 'hf', 2))
0114
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.g = filt.gain;
0128 f.histin = zeros(1, f.ntaps-1);
0129 f.histout = zeros(1, f.ntaps-1);
0130
0131
0132