## Documentation Center |

**Package: **dsp

Single section or cascaded allpass filter

The `AllpassFilter` object filters each channel
of the input using Allpass filter implementations.

To filter each channel of the input:

Define and set up your Allpass filter. See Construction.

Call

`step`to filter each channel of the input according to the properties of`dsp.AllpassFilter`. The behavior of`step`is specific to each object in the toolbox.

`H = dsp.AllpassFilter` returns
an Allpass filter System object™, `H`, that filters
each channel of the input signal independently using an allpass filter,
with the default structure and coefficients.

`H = dsp.AllpassFilter('PropertyName',PropertyValue,
...)` returns an Allpass filter System object,

clone | Create System object with same property values |

isLocked | Locked status for input attributes and nontunable properties |

release | Allow property value and input characteristics changes |

reset | Reset internal states of a System object |

step | Process inputs using allpass filter |

The transfer function of an allpass filter is defined by:

given the nontrivial polynomial coefficients in *c*.
The order *n* of the transfer function is given by
the length of the vector *c*.

`dsp.AllpassFilter` realizes an allpass filter
using three different implementation structures: Minimum multiplier,
Wave Digital Filter, and Lattice. These structures differ from generic
IIR filters such as df1, df1t, df2, df2t, in that they are computationally
more economical and structurally more stable [1].
For all structures, a single instance of `dsp.AllpassFilter` can
handle either a single-section or a multiple-section (cascaded) allpass
filter. The different sections can have different orders but they
are all implemented according to the same structure.

This structure realizes the allpass filter with the minimum
number of required multipliers, equal to the order `n`.
It also uses `2n` delay units and `2n` adders.
The coefficients used by the multipliers are the same as `AllpassCoefficients`,
which are equal to the polynomial vector c in the allpass transfer
function. The following code shows an example of a second-order section
as a Simulink diagram using basic building blocks. You need a Simulink
license to generate the actual diagram using realizemdl.

hap = dsp.AllpassFilter('AllpassCoefficients', [0.1, -0.7]); realizemdl(hap)

This structure uses `n` multipliers, but only `n` delay
units at the expense of requiring `3n` adders. To
use this structure, you must specify the coefficients as `WDFCoefficients` in
Wave Digital Filter (WDF) form. Obtain the WDF equivalent of the conventional
allpass coefficients such as those in vector `c` in
the preceding equation, by using the static method `dsp.AllpassFilter.poly2wdf`.
You can also use a similar method, `dsp.AllpassFilter.wdf2poly` to
convert given WDF-form coefficients into their equivalent allpass
polynomial form. The following code shows an example of a second-order
section as a Simulink diagram using basic operation blocks. You need
a Simulink license to generate the actual diagram using realizemdl.
Use these coefficients for a functionally equivalent filter to the
previous Minimum multiplier example.

c = [0.1, -0.7]; w = dsp.AllpassFilter.poly2wdf(c); hap = dsp.AllpassFilter('Structure', 'Wave Digital Filter', 'WDFCoefficients', w); realizemdl(hap)

The multipliers used in the filter implementation are a transformation of the WDF coefficients previously provided. The implementation structure around each multiplier depends on the actual value of the multiplier and can vary for different filtering stages among five different options. For example notice how in the preceding diagram, the first and the second stages are realized with two different inner structures. For more details refer to [2].

This lattice structure uses `2n` multipliers, `n` delay
units, and `2n` adders. To use this structure, you
must specify the coefficients as `LatticeCoefficients` in
Lattice form. Obtain these from the conventional polynomial form of
the allpass coefficients by using an appropriate conversion function,
such as `tf2latc`. The following code shows an example
of a second-order section as a Simulink diagram using basic operation
blocks. You need a Simulink license to generate the actual diagram
using realizemdl. Use these coefficients for a functionally equivalent
filter to the Minimum multiplier structure.

c = [0.1 -0.7]; k = tf2latc([1 c]); hap = dsp.AllpassFilter('Structure', 'Lattice', 'LatticeCoefficients', k); realizemdl(hap)

[1] Regalia, Philip A. and Mitra Sanjit K.
and Vaidyanathan, P. P. (1988) "The Digital All-Pass Filter:
AVersatile Signal Processing Building Block." *Proceedings
of the IEEE*, Vol. 76, No. 1, 1988, pp. 19–37

[2] *M. Lutovac, D. Tosic, B. Evans,
Filter Design for Signal Processing Using MATLAB and Mathematica.
Prentice Hall, 2001*

Was this topic helpful?