


MIIR IIR filter object class constructor.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DESCRIPTION: MIIR IIR filter object class constructor.
Create an miir object.
CONSTRUCTOR: f = miir()
creates an empty miir object.
f = miir(fi)
creates a copy of the input miir object, fi.
f = miir('foo_iir.fil')
create an miir object from a LISO IIR .fil file.
f = miir('foo.filt')
create an miir object from a .filt object.
f = miir(pl)
create an miir object from the description
given in the parameter list.
Parameters for standard filters:
'type' - 'highpass', 'lowpass',
'bandpass', 'bandreject'.
<<default: 'lowpass'>>
'gain' - gain of filter
<<default: 1.0>>
'fs' - sample frequency to design for
<<default: 1Hz>>
'order' - order of filter
<<default: 1>>
'fc' - corner frequencies.
This is a two element vector for bandpass
and bandreject filters.
<<default: 0.25 or [0.1 0.3]>>
'ripple' - Specify pass/stop-band ripple for bandpass
and bandreject filters
<<default: 0.5>>
EXAMPLE 1: Create a default lowpass filter.
>> f = miir(plist())
EXAMPLE 2: Create an order 1 highpass filter with high frequency gain 2.
Filter is designed for 1kHz sampled data and has a cut-off
frequency of 200Hz.
>> pl = plist();
>> pl = append(pl, param('type', 'highpass'))
>> pl = append(pl, param('gain', 2.0))
>> pl = append(pl, param('fs', 1000))
>> pl = append(pl, param('fc', 200))
>> f = miir(pl)
VERSION: $Id: miir.m,v 1.14 2007/08/31 17:40:08 hewitson Exp $
HISTORY: 09-02-2007 M Hewitson
Creation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


0001 function f = miir(varargin) 0002 % MIIR IIR filter object class constructor. 0003 % 0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0005 % 0006 % DESCRIPTION: MIIR IIR filter object class constructor. 0007 % Create an miir object. 0008 % 0009 % CONSTRUCTOR: f = miir() 0010 % creates an empty miir object. 0011 % 0012 % f = miir(fi) 0013 % creates a copy of the input miir object, fi. 0014 % 0015 % f = miir('foo_iir.fil') 0016 % create an miir object from a LISO IIR .fil file. 0017 % 0018 % f = miir('foo.filt') 0019 % create an miir object from a .filt object. 0020 % 0021 % f = miir(pl) 0022 % create an miir object from the description 0023 % given in the parameter list. 0024 % 0025 % Parameters for standard filters: 0026 % 0027 % 'type' - 'highpass', 'lowpass', 0028 % 'bandpass', 'bandreject'. 0029 % <<default: 'lowpass'>> 0030 % 'gain' - gain of filter 0031 % <<default: 1.0>> 0032 % 'fs' - sample frequency to design for 0033 % <<default: 1Hz>> 0034 % 'order' - order of filter 0035 % <<default: 1>> 0036 % 'fc' - corner frequencies. 0037 % This is a two element vector for bandpass 0038 % and bandreject filters. 0039 % <<default: 0.25 or [0.1 0.3]>> 0040 % 'ripple' - Specify pass/stop-band ripple for bandpass 0041 % and bandreject filters 0042 % <<default: 0.5>> 0043 % 0044 % EXAMPLE 1: Create a default lowpass filter. 0045 % 0046 % >> f = miir(plist()) 0047 % 0048 % EXAMPLE 2: Create an order 1 highpass filter with high frequency gain 2. 0049 % Filter is designed for 1kHz sampled data and has a cut-off 0050 % frequency of 200Hz. 0051 % 0052 % >> pl = plist(); 0053 % >> pl = append(pl, param('type', 'highpass')) 0054 % >> pl = append(pl, param('gain', 2.0)) 0055 % >> pl = append(pl, param('fs', 1000)) 0056 % >> pl = append(pl, param('fc', 200)) 0057 % >> f = miir(pl) 0058 % 0059 % VERSION: $Id: miir.m,v 1.14 2007/08/31 17:40:08 hewitson Exp $ 0060 % 0061 % HISTORY: 09-02-2007 M Hewitson 0062 % Creation 0063 % 0064 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0065 0066 VERSION = '$Id: miir.m,v 1.14 2007/08/31 17:40:08 hewitson Exp $'; 0067 0068 %%%%%%%%%%%%%%%%%%%%%%%% define miir properties %%%%%%%%%%%%%%%%%%%%%%%%% 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 %%%%%%%%%%%%%%%%%%%%%%%%%% Create miir object %%%%%%%%%%%%%%%%%%%%%%%%%%% 0087 0088 switch nargin 0089 0090 %%%%%%%%%% h = miir() %%%%%%%%%% 0091 % create default miir object 0092 case 0 0093 f = init(); 0094 0095 % Copy, LISO, filt, standard 0096 case 1 0097 0098 %%%%%%%%%% Create from XML fragment %%%%%%%%%%% 0099 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl') 0100 f = fromxml(varargin{1}); 0101 %%%%%%%%%%%% From File %%%%%%%%%%%%% 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 %%%%%%%%%% h = miir(miir) %%%%%%%%%% 0116 % copy 0117 elseif isa(varargin{1}, 'miir') 0118 f = varargin{1}; 0119 f.version = VERSION; 0120 0121 %%%%%%%%%% h = miir(struct) %%%%%%%%%% 0122 % Struct 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 %%%%%%%%%% h = miir('bla.filt') %%%%%%%%%% 0146 %%%%%%%%%% h = miir('bla.fil') %%%%%%%%%% 0147 % File input 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 %%%%%%%%%% h = miir(plist) %%%%%%%%%% 0168 % Parameter list 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 % deal with empty plist 0178 if isempty(type) && isempty(pzm) 0179 type = 'lowpass'; 0180 end 0181 0182 if ~isempty(type) 0183 % check and fill parameter list 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 % get max freq in pzmodel 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 % make MIIR filter 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 %%%%%%%%%% h = miir(pzmodel, plist) %%%%%%%%%% 0225 case 2 % pzmodel followed by plist 0226 0227 %%%%%%%%%%% From DATABASE 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 %%%%%%%%%% h = miir(a, b, fs) %%%%%%%%%% 0246 case 3 0247 0248 % then we have 3 numeric inputs for a and b coefficients and fs 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); % initialise input history 0264 f.histout = zeros(1,f.ntaps-1); % initialise output history 0265 0266 otherwise 0267 error('### incorrect input arguments for miir constructor.'); 0268 end 0269 0270 end % function f = miir(varargin) 0271