Home > classes > @miir > miir.m

miir

PURPOSE ^

MIIR IIR filter object class constructor.

SYNOPSIS ^

function f = miir(varargin)

DESCRIPTION ^

 MIIR IIR filter object class constructor.
     Create an miir object.
 
   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'   - one of '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) 
 
 
 M Hewitson 09-02-07

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function f = miir(varargin)
0002 
0003 % MIIR IIR filter object class constructor.
0004 %     Create an miir object.
0005 %
0006 %   f = miir() - creates an empty miir object.
0007 %   f = miir(fi) - creates a copy of the input miir object, fi.
0008 %   f = miir('foo_iir.fil') - create an miir object from a LISO IIR .fil
0009 %                             file.
0010 %
0011 %   f = miir('foo.filt')  - create an miir object from a .filt object.
0012 %
0013 %   f = miir(pl)  - create an miir object from the description given in the
0014 %                   parameter list.
0015 %
0016 % Parameters for standard filters:
0017 %
0018 %   'type'   - one of 'highpass', 'lowpass', 'bandpass', 'bandreject'.
0019 %              [default: 'lowpass']
0020 %   'gain'   - gain of filter [default: 1.0]
0021 %   'fs'     - sample frequency to design for [default: 1Hz]
0022 %   'order'  - order of filter [default: 1]
0023 %   'fc'     - corner frequencies. This is a two element vector for bandpass
0024 %              and bandreject filters. [default: 0.25 or [0.1 0.3] ]
0025 %   'ripple' - Specify pass/stop-band ripple for bandpass and bandreject
0026 %              filters [default: 0.5]
0027 %
0028 % Example 1:
0029 %
0030 % Create a default lowpass filter.
0031 %   >> f = miir(plist())
0032 %
0033 % Example 2:
0034 %
0035 % Create an order 1 highpass filter with high frequency gain 2. Filter is
0036 % designed for 1kHz sampled data and has a cut-off frequency of 200Hz.
0037 %   >> pl = plist();
0038 %   >> pl = append(pl, param('type', 'highpass'))
0039 %   >> pl = append(pl, param('gain', 2.0))
0040 %   >> pl = append(pl, param('fs', 1000))
0041 %   >> pl = append(pl, param('fc', 200))
0042 %   >> f = miir(pl)
0043 %
0044 %
0045 % M Hewitson 09-02-07
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   % Empty
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   % Copy, LISO, filt, standard
0072   case 1
0073     % copy
0074     if isa(varargin{1}, 'miir')
0075       
0076       f = varargin{1};
0077       f.version = VERSION;
0078 
0079     % Struct
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     % File input
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     % Parameter list
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         % check and fill parameter list
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           % get max freq in pzmodel
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         % make MIIR filter
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 % pzmodel followed by plist
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     % then we have 3 numeric inputs for a and b coefficients and fs
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);       % initialise input history
0207     f.histout = zeros(1,f.ntaps-1);       % initialise output history
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

Generated on Fri 08-Jun-2007 16:09:11 by m2html © 2003