Constructor examples of the MIIR class


Copy a MIIR object
Construct a MIIR object by loading the object from a file
Construct a MIIR object from a parfrac object (PARFRAC)
Construct a MIIR object from a pole/zero model (PZMODEL)
Construct a MIIR object from a standard type
Construct a MIIR object from an existing model
Construct a MIIR object from a difference equation

Copy an IIR filter object

The following example creates a copy of an IIR filter object (blue command).

>> iir1 = miir(plist('type', 'lowpass'));
>> iir2 = miir(iir2)
------ miir/1 -------
      b: [1 -0.509525449494429]
 histin: 0
version: $Id: miir.m,v 1.98 2009/02/20 15:59:48 nicola Exp
  ntaps: 2
     fs: 1
 infile:
      a: [0.245237275252786 0.245237275252786]
histout: 0
 iunits: [] [1x1 unit]
 ounits: [] [1x1 unit]
   hist: miir.hist  [1x1 history]
   name: lowpass
---------------------


REMARK: The following command copies only the handle of an object and doesn't create a copy of the object (as above). This means that everything that happens to the copy or original happens to the other object.

>> iir1 = miir()
------ miir/1 -------
      b: []
 histin: []
version: $Id: miir.m,v 1.98 2009/02/20 15:59:48 nicola Exp
  ntaps: 0
     fs: []
 infile:
      a: []
histout: []
 iunits: [] [1x1 unit]
 ounits: [] [1x1 unit]
   hist: miir.hist  [1x1 history]
   name: none
---------------------
>> iir2 = iir1;
>> iir2.setName('my new name')
------ miir/1 -------
      b: []
 histin: []
version: $Id: miir.m,v 1.98 2009/02/20 15:59:48 nicola Exp
  ntaps: 0
     fs: []
 infile:
      a: []
histout: []
 iunits: [] [1x1 unit]
 ounits: [] [1x1 unit]
   hist: miir.hist  [1x1 history]
   name: my new name
---------------------


If we display iir1 again then we see that the property 'name' was changed although we only have changed iir2.

>> iir1
------ miir/1 -------
      b: []
 histin: []
version: $Id: miir.m,v 1.98 2009/02/20 15:59:48 nicola Exp
  ntaps: 0
     fs: []
 infile:
      a: []
histout: []
 iunits: [] [1x1 unit]
 ounits: [] [1x1 unit]
   hist: miir.hist  [1x1 history]
   name: my new name
---------------------

Construct a MIIR object by loading the object from a file

The following example creates a new miir object by loading the miir object from disk.

f = miir('f.mat')
f = miir('f.xml')

or in a PLIST

pl  = plist('filename', 'iir.xml');
iir = miir(pl)

Construct a MIIR object from a parfrac object

An IIR filter object can be generated based on a parfrac object. The next example shows how you can convert a parfrac object into a iir filter object.

pf  = parfrac([1 2+1i 2-1i], [6 1+3i 1-3i], 3);
iir = miir(pf)

or in a PLIST with the relevant parameters:

Key Description

'parfrac'

a parfrac object to construct the filters from [default: empty parfrac]

'fs'

sample rate for the filter(s) [default: 8 * upper frequency of the parfrac object]

The following example creates a IIR filter object from an parfrac object.

pf  = parfrac([1 2+1i 2-1i], [6 1+3i 1-3i], 3);
pl  = plist('parfrac', pf, 'fs', 100);

Construct an IIR filter object from a pole/zero model

The following example creates a new IIR filter object from a pole/zero model.

>> pzm = pzmodel(1, {1 2 3}, {4 5}, 'my pzmodel')
---- pzmodel 1 ----
    name: my pzmodel
    gain: 1
   delay: 0
  iunits: []
  ounits: []
pole 001: (f=1 Hz,Q=NaN)
pole 002: (f=2 Hz,Q=NaN)
pole 003: (f=3 Hz,Q=NaN)
zero 001: (f=4 Hz,Q=NaN)
zero 002: (f=5 Hz,Q=NaN)
-------------------
>> iir = miir(pzm) % Use the default sample rate fs=8 * frequency of the highest pole or zero in the model
>> iir = miir(pzm, plist('fs', 100))
------ miir/1 -------
      b: [1 -0.6485 -1.9619 1.3364 0.9644 -0.6854]
 histin: [0 0 0 0 0]
version: $Id: miir.m,v 1.98 2009/02/20 15:59:48 nicola Exp
  ntaps: 6
     fs: 100
 infile:
      a: [0.0102 0.0152 -0.0097 -0.0186 0.0019 0.0057]
histout: [0 0 0 0 0]
 iunits: [] [1x1 unit]
 ounits: [] [1x1 unit]
   hist: miir.hist  [1x1 history]
   name: my pzmodel
---------------------

or in a PLIST with the relevant parameters:

Key Description

'pzmodel'

A pzmodel object to construct the filter from [default: empty pzmodel]

'fs'

Sample rate [default: 8 * frequency of the highest pole or zero in the model]

>> pzm = pzmodel(1, {1 2 3}, {4 5}, 'my pzmodel')
>> pl  = plist('pzmodel', pzm, 'fs', 100)
>> iir = miir(pl)

Construct a MIIR object from a standard type

Construct an IIR filter object from a standard type: 'lowpass', 'highpass', 'bandpass' or 'bandreject'

The relevant parameters are:

Key Description

'type'

one of the types: 'highpass', 'lowpass', 'bandpass', 'bandreject'

[default 'lowpass']

You can also specify optional parameters:

Key Description

'gain'

The gain of the filter [default: 1]

'fc'

The roll-off frequency [default: 0.1 Hz]

'fs'

The sampling frequency to design for [default: 1 Hz]

'order'

The filter order [default: 64]

'win'

Specify window function used in filter design [default: 'Hamming']

'iunits'

the input unit of the filter

'ounits'

the output unit of the filter

The following example creates an order 64 highpass filter with high frequency gain 2. Filter is designed for 1 Hz sampled data and has a cut-off frequency of 0.2 Hz.

pl = plist('type', 'highpass',   ...
                   'order', 64,  ...
                   'gain',  2.0, ...
                   'fs',    1,   ...
                   'fc',    0.2);
f = miir(pl)

Furthermore it is possible to specify a spectral window.

win = specwin('Kaiser', 11, 150);
pl = plist('type', 'lowpass', ...
           'Win',   win,      ...
           'fs',    100,      ...
           'fc',    20,       ...
           'order', 10);
f = miir(pl)

Construct a MIIR object from an existing model

The miir constructor also accepts as an input existing models in different formats:

LISO files

f = miir('foo_iir.fil')

XML files

f = miir('foo_iir.xml')

MAT files

f = miir('foo_iir.mat')

From repository

The relevant parameters for retrieving a IIR filter from a LTPDA repository are:

Key Description

'hostname'

the repository hostname. [default: 'localhost']

'database'

The database name [default: 'ltpda']

'id'

A vector of object IDs. [default: []]

'cid'

Retrieve all rational objects from a particular collection

'binary'

Set to true to retrieve from stored binary representation (not always available). [default: true]

f = miir(plist('hostname', 'localhost', 'database', 'ltpda', 'ID', []))

Construct a MIIR object from a difference equation

Alternatively, the filter can be defined in terms of two vectors specifying the coefficients of the filter and the sampling frequency. The following example creates a IIR filter with sampling frequency 1 Hz and the following recursive equation:

a  = [0.5 -0.01];
b  = [1 0.1]
fs = 1;

f = miir(a,b,fs)

or in a PLIST

The relevant parameters are:

Key Description

'a'

vector of A coefficients (see note ** below) [default: empty]

'b'

vector of B coefficients (see note ** below) [default: empty]

'fs'

sampling frequency of the filter [default: empty]

'name'

name of filter [default: 'None']

a  = [0.5 -0.01];
b  = [1 0.1]
fs = 1;
name = 'my IIR';
pl = plist('a', a, 'fs', fs, 'name', name);

iir = miir(pl)


NOTES:

** The convention used here for naming the filter coefficients is the opposite to MATLAB's convention. The recursion formula for this convention is

b(1)*y(n) = a(1)*x(n) + a(2)*x(n-1) + ... + a(na+1)*x(n-na) - b(2)*y(n-1) - ... - b(nb+1)*y(n-nb)



©LTP Team