Documentation |
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, H, with each property set to the specified value.
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(n-1){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 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