Single section or cascaded allpass filter
AllpassFilter object filters each channel
of the input using Allpass filter implementations.
To filter each channel of the input:
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,
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|
Use a Regalia shelving structure with a first-order allpass filter to boost frequency components of a random signal. This signal is below 10 kHz by 6 dB.
Fs = 48000; % in Hz wc = 2*pi*10000; Vo = 2; % 6 dB c = -(2-wc/Fs)/(2+wc/Fs); hAP = dsp.AllpassFilter('AllpassCoefficients', c); hSR = dsp.SignalSource(randn(4096, 1), 128); hLOG = dsp.SignalSink; while ~isDone(hSR) in = step(hSR); shelvedOut = -(1-Vo)/2 * step(hAP, in) + (1+Vo)/2 * in; step(hLOG, [in, shelvedOut]); end signalTraces = hLOG.Buffer; figure tfestimate(signalTraces(:,1), signalTraces(:,2),,,,Fs)
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 .
For all structures, a single instance of
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
It also uses
2n delay units and
The coefficients used by the multipliers are the same as
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
units at the expense of requiring
3n adders. To
use this structure, you must specify the coefficients as
Wave Digital Filter (WDF) form. Obtain the WDF equivalent of the conventional
allpass coefficients such as those in vector
the preceding equation, by using the static method
You can also use a similar method,
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 .
This lattice structure uses
2n adders. To use this structure, you
must specify the coefficients as
Lattice form. Obtain these from the conventional polynomial form of
the allpass coefficients by using an appropriate conversion function,
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)
 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
 M. Lutovac, D. Tosic, B. Evans, Filter Design for Signal Processing Using MATLAB and Mathematica. Prentice Hall, 2001