Main Content

Decimate by factor of two using polyphase IIR

The `dsp.IIRHalfbandDecimator`

System object™ performs efficient polyphase decimation of the input signal by a factor of two.
To design the halfband filter, you can specify the object to use an elliptic design or a
quasi-linear phase design. The object uses these design methods to compute the filter
coefficients. To filter the inputs, the object uses a polyphase structure. The allpass filters
in the polyphase structure are in a minimum multiplier form.

Elliptic design introduces nonlinear phase and creates the filter using fewer coefficients than quasi linear design. Quasi-linear phase design overcomes phase nonlinearity at the cost of additional coefficients.

Alternatively, instead of designing the halfband filter using a design method, you can specify the filter coefficients directly. When you choose this option, the allpass filters in the two branches of the polyphase implementation can be in a minimum multiplier form or in a wave digital form.

You can also use the `dsp.IIRHalfbandDecimator`

object to implement the
analysis portion of a two-band filter bank to filter a signal into lowpass and highpass
subbands.

To filter and downsample your data:

Create the

`dsp.IIRHalfbandDecimator`

object and set its properties.Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?.

returns a halfband decimator, `iirhalfbanddecim`

= dsp.IIRHalfbandDecimator`iirhalfbanddecim`

, with the default
settings. Under the default settings, the System object filters and downsamples the input data with a halfband frequency of
`22050`

Hz, a transition width of `4100`

Hz, and a
stopband attenuation of `80`

dB.

returns an IIR halfband decimator, with additional properties specified by one or more
`iirhalfbanddecim`

= dsp.IIRHalfbandDecimator(`Name,Value`

)`Name,Value`

pair arguments.

```
iirhalfbanddecim = dsp.IIRHalfbandDecimator('Specification','Filter
order and stopband attenuation')
```

creates an IIR halfband decimator object with
filter order set to `9`

and stopband attenuation set to
`80`

dB.`[`

computes the `ylow`

,`yhigh`

] = iirhalfbanddecim(`x`

)`ylow`

and `yhigh`

, of the analysis
filter bank, `iirhalfbanddecim`

for input `x`

. A
*Ki*-by-*N* input matrix is treated as
*N* independent channels. The System object generates two power-complementary output signals by adding and subtracting
the two polyphase branch outputs respectively. `ylow`

and
`yhigh`

are of the same size
(*Ko*-by-*N*) and data type. *Ko* =
*Ki*/2, where `2`

is the decimation factor.

To use an object function, specify the
System object as the first input argument. For
example, to release system resources of a System object named `obj`

, use
this syntax:

release(obj)

[1] Lang, M. *Allpass Filter Design and Applications.* IEEE
Transactions on Signal Processing. Vol. 46, No. 9, Sept 1998, pp. 2505–2514.

[2] Harris, F.J. *Multirate Signal Processing for Communication
Systems*. Prentice Hall. 2004, pp. 208–209.

[3] Regalia, Phillip A., Sanjit K. Mitra, and P. P. Vaidyanathan. "The Digital All-Pass
Filter: A Versatile Signal Processing Building Block." *Proceedings of the
IEEE.* Vol. 76, Number 1, 1988, pp. 19-37.