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.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

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

Generated on Mon 03-Sep-2007 12:12:34 by m2html © 2003