0001 function f = miir(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 VERSION = '$Id: miir.m,v 1.14 2007/08/31 17:40:08 hewitson Exp $';
0067
0068
0069
0070 function f = init()
0071 f.name = 'None';
0072 f.fs = 0;
0073 f.ntaps = 0;
0074 f.a = [];
0075 f.b = [];
0076 f.g = 0;
0077 f.histin = [];
0078 f.histout = [];
0079 f.infile = '';
0080 f.plist = plist();
0081 f.created = time;
0082 f.version = VERSION;
0083 f = class(f, 'miir');
0084 end
0085
0086
0087
0088 switch nargin
0089
0090
0091
0092 case 0
0093 f = init();
0094
0095
0096 case 1
0097
0098
0099 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0100 f = fromxml(varargin{1});
0101
0102 elseif ischar(varargin{1})
0103
0104 filename = varargin{1};
0105 [path, name, ext, vers] = fileparts(filename);
0106 switch ext
0107 case '.mat'
0108 f = load(filename);
0109 case '.xml'
0110 f = xmlparse(miir, filename);
0111 otherwise
0112 error('### Unknown file type.');
0113 end
0114
0115
0116
0117 elseif isa(varargin{1}, 'miir')
0118 f = varargin{1};
0119 f.version = VERSION;
0120
0121
0122
0123 elseif isstruct(varargin{1})
0124
0125 f = init();
0126
0127 fields = fieldnames(varargin{1});
0128 for ii = 1:length(fields)
0129 field = fields{ii};
0130 try
0131 if strcmp(field, 'plist')
0132 if isstruct(varargin{1}.(field))
0133 f.(field) = plist(varargin{1}.(field));
0134 else
0135 f.(field) = varargin{1}.(field);
0136 end
0137 else
0138 f.(field) = varargin{1}.(field);
0139 end
0140 catch
0141 error('### The field ''%s'' in the struct is not a miir property.', field)
0142 end
0143 end
0144
0145
0146
0147
0148 elseif ischar(varargin{1})
0149
0150 filename = varargin{1};
0151 [path,name,ext,vers] = fileparts(filename);
0152
0153 f = init();
0154
0155 switch ext
0156 case '.filt'
0157 f = mfiltload(filename);
0158 f.infile = filename;
0159 case '.fil'
0160 f = filload(filename);
0161 f.infile = filename;
0162 otherwise
0163 error('### unknown file type as constructor for miir objects.');
0164 end
0165
0166
0167
0168
0169 elseif isa(varargin{1}, 'plist')
0170
0171 pl = varargin{1};
0172 type = find(pl, 'type');
0173 pzm = find(pl, 'pzmodel');
0174
0175 f = init();
0176
0177
0178 if isempty(type) && isempty(pzm)
0179 type = 'lowpass';
0180 end
0181
0182 if ~isempty(type)
0183
0184 plo = parseFilterParams(pl);
0185 switch type
0186 case 'lowpass'
0187 f = mklowpass(f, plo);
0188 case 'highpass'
0189 f = mkhighpass(f, plo);
0190 case 'bandpass'
0191 f = mkbandpass(f, plo);
0192 case 'bandreject'
0193 f = mkbandreject(f, plo);
0194 otherwise
0195 error('### unknown standard filter type in miir constructor.');
0196 end
0197 f.infile = '';
0198 f.plist = plo;
0199
0200 elseif ~isempty(pzm)
0201
0202 f = init();
0203
0204 fs = find(pl, 'fs');
0205 if isempty(fs)
0206
0207 fs = 8*getupperFreq(pzm);
0208 warning([sprintf('!!! no sample rate specified. Designing for fs=%2.2fHz.', fs)...
0209 sprintf('\nThe filter will be redesigned later when used.')]);
0210
0211 end
0212
0213 f = tomiir(pzm, fs);
0214 f = set(f, 'name', get(pzm, 'name'));
0215 f = set(f, 'plist', pl);
0216
0217 else
0218 error('### unknown constructor type for miir.');
0219 end
0220 else
0221 error('### unknown constructor type for miir.');
0222 end
0223
0224
0225 case 2
0226
0227
0228 if isa(varargin{1}, 'database')
0229 f = retrieve(varargin{1}, varargin{2:end});
0230 else
0231 pzm = varargin{1};
0232 if ~isa(pzm, 'pzmodel')
0233 error('### unknown constructor type for miir.');
0234 end
0235 pl = varargin{2};
0236 if ~isa(pl, 'plist')
0237 error('### unknown constructor type for miir.');
0238 end
0239
0240 pl = append(pl, param('pzmodel', pzm));
0241
0242 f = miir(pl);
0243 end
0244
0245
0246 case 3
0247
0248
0249 a = varargin{1};
0250 b = varargin{2};
0251 fs = varargin{3};
0252 if ~isnumeric(a) || ~isnumeric(b) || ~isnumeric(fs)
0253 error('### unknown constructor type for miir.');
0254 end
0255
0256 f = init();
0257 f.name = 'AB';
0258 f.fs = fs;
0259 f.ntaps = length(a);
0260 f.a = a;
0261 f.b = b;
0262 f.g = 1;
0263 f.histin = zeros(1,f.ntaps-1);
0264 f.histout = zeros(1,f.ntaps-1);
0265
0266 otherwise
0267 error('### incorrect input arguments for miir constructor.');
0268 end
0269
0270 end
0271