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('
returns an Allpass filter System object, PropertyName
',PropertyValue
,
...)H
,
with each property set to the specified value.

Internal allpass filter structure You can specify the internal allpass filter implementation structure
as one of  

Allpass polynomial coefficients Specify the real allpass polynomial filter coefficients. This
property is applicable only when the Structure property is set to 

Wave Digital Filter allpass coefficients Specify the real allpass coefficients in the Wave Digital Filter
form. This property is only applicable when the 

Lattice allpass coefficients Specify the real or complex allpass coefficients as lattice
reflection coefficients. This property is applicable only if the 

Initial values of filter states Specify the initial values of the internal filter states. The
default value of this property is 
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:
$$H(z)=\frac{c(n)+c(n1){z}^{1}+\mathrm{...}+{z}^{n}}{1+c(1){z}^{1}+\mathrm{...}+{z}^{n}}$$
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 singlesection or a multiplesection (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 secondorder 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 WDFform coefficients into their equivalent allpass
polynomial form. The following code shows an example of a secondorder
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 secondorder 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 AllPass 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