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 ALGONAME = mfilename;
0049 VERSION = '$Id: miir.html,v 1.1 2007/06/08 14:15:06 hewitson Exp $';
0050
0051
0052 switch nargin
0053
0054
0055 case 0
0056
0057 f.name = 'None';
0058 f.fs = 0;
0059 f.ntaps = 0;
0060 f.a = [];
0061 f.b = [];
0062 f.g = 0;
0063 f.histin = [];
0064 f.histout = [];
0065 f.infile = '';
0066 f.plist = plist();
0067 f.created = sprintf('%s', datestr(now));
0068 f.version = VERSION;
0069 f = class(f, 'miir');
0070
0071
0072 case 1
0073
0074 if isa(varargin{1}, 'miir')
0075
0076 f = varargin{1};
0077 f.version = VERSION;
0078
0079
0080 elseif isstruct(varargin{1})
0081 fstruct = varargin{1};
0082 f.name = fstruct.name;
0083 f.fs = fstruct.fs;
0084 f.ntaps = fstruct.ntaps;
0085 f.a = fstruct.a;
0086 f.b = fstruct.b;
0087 f.g = fstruct.g;
0088 f.histin = fstruct.histin;
0089 f.histout = fstruct.histout;
0090 f.infile = fstruct.infile;
0091 pl = fstruct.plist;
0092 if isstruct(pl)
0093 pl = plist(pl);
0094 end
0095 f.plist = pl;
0096 f.created = fstruct.created;
0097 f.version = fstruct.version;
0098 f = class(f, 'miir');
0099
0100
0101 elseif ischar(varargin{1})
0102
0103 filename = varargin{1};
0104 [path,name,ext,vers] = fileparts(filename);
0105
0106 switch ext
0107 case '.filt'
0108 f = mfiltload(filename);
0109 f.infile = filename;
0110 f.plist = plist();
0111 f.created = sprintf('%s', datestr(now));
0112 f.version = VERSION;
0113 f = class(f, 'miir');
0114 case '.fil'
0115 f = filload(filename);
0116 f.infile = filename;
0117 f.plist = plist();
0118 f.created = sprintf('%s', datestr(now));
0119 f.version = VERSION;
0120 f = class(f, 'miir');
0121 otherwise
0122 error('### unknown file type as constructor for miir objects.');
0123 end
0124
0125
0126
0127 elseif isa(varargin{1}, 'plist')
0128
0129 pl = varargin{1};
0130 type = find(pl, 'type');
0131 pzm = find(pl, 'pzmodel');
0132
0133 if ~isempty(type)
0134
0135 plo = parseFilterParams(pl);
0136 switch type
0137 case 'lowpass'
0138 f = mklowpass(plo);
0139 case 'highpass'
0140 f = mkhighpass(plo);
0141 case 'bandpass'
0142 f = mkbandpass(plo);
0143 case 'bandreject'
0144 f = mkbandreject(plo);
0145 otherwise
0146 error('### unknown standard filter type in miir constructor.');
0147 end
0148 f.infile = '';
0149 f.plist = plo;
0150 f.created = sprintf('%s', datestr(now));
0151 f.version = VERSION;
0152 f = class(f, 'miir');
0153 elseif ~isempty(pzm)
0154
0155 fs = find(pl, 'fs');
0156 if isempty(fs)
0157
0158 fs = 8*getupperFreq(pzm);
0159 warning([sprintf('!!! no sample rate specified. Designing for fs=%2.2fHz.', fs)...
0160 sprintf('\nThe filter will be redesigned later when used.')]);
0161
0162 end
0163
0164 f = tomiir(pzm, fs);
0165 f = set(f, 'name', get(pzm, 'name'));
0166 f = set(f, 'plist', pl);
0167
0168 else
0169 error('### unknown constructor type for miir.');
0170 end
0171 else
0172 error('### unknown constructor type for miir.');
0173 end
0174
0175 case 2
0176
0177 pzm = varargin{1};
0178 if ~isa(pzm, 'pzmodel')
0179 error('### unknown constructor type for miir.');
0180 end
0181 pl = varargin{2};
0182 if ~isa(pl, 'plist')
0183 error('### unknown constructor type for miir.');
0184 end
0185
0186 pl = append(pl, param('pzmodel', pzm));
0187
0188 f = miir(pl);
0189
0190 case 3
0191
0192
0193 a = varargin{1};
0194 b = varargin{2};
0195 fs = varargin{3};
0196 if ~isnumeric(a) || ~isnumeric(b) || ~isnumeric(fs)
0197 error('### unknown constructor type for miir.');
0198 end
0199
0200 f.name = 'AB';
0201 f.fs = fs;
0202 f.ntaps = length(a);
0203 f.a = a;
0204 f.b = b;
0205 f.g = 1;
0206 f.histin = zeros(1,f.ntaps-1);
0207 f.histout = zeros(1,f.ntaps-1);
0208 f.infile = '';
0209 f.plist = plist();
0210 f.created = sprintf('%s', datestr(now));
0211 f.version = VERSION;
0212 f = class(f, 'miir');
0213
0214 otherwise
0215 error('### incorrect input arguments for miir constructor.');
0216 end
0217