Main Content

Transfer function to coupled allpass lattice

`[k1,k2] = tf2cl(b,a)`

[k1,k2] = tf2cl(b,a)

[k1,k2,beta] = tf2cl(b,a)

`[k1,k2] = tf2cl(b,a)`

where `b`

is
a real, symmetric vector of numerator coefficients and `a`

is
a real vector of denominator coefficients, corresponding to a stable
digital filter, will perform the coupled allpass decomposition

$$H(z)=\frac{B(z)}{A(z)}=\left(\frac{1}{2}\right)[H1(z)+H2(z)]$$

of a stable IIR filter *H(z)* and convert the
allpass transfer functions *H1(z)* and *H2(z)* to
a coupled lattice allpass structure with coefficients given in vectors `k1`

and `k2`

.

`[k1,k2] = tf2cl(b,a)`

where `b`

is
a real, antisymmetric vector of numerator coefficients and `a`

is
a real vector of denominator coefficients, corresponding to a stable
digital filter, performs the coupled allpass decomposition

$$H(z)=\frac{B(z)}{A(z)}=\left(\frac{1}{2}\right)\left[H1(z)-H2(z)\right]$$

of a stable IIR filter *H(z)* and converts
the allpass transfer functions *H1(z)* and *H2(z)* to
a coupled lattice allpass structure with coefficients given in vectors `k1`

and `k2`

.

In some cases, the decomposition is not possible with real *H1(z)* and *H2(z)*.
In those cases, a generalized coupled allpass decomposition may be
possible, using the syntax described below.

`[k1,k2,beta] = tf2cl(b,a)`

performs the
generalized allpass decomposition of a stable IIR filter *H(z)* and
converts the complex allpass transfer functions *H1(z)* and *H2(z)* to
corresponding lattice allpass filters

$$H(z)=\frac{B(z)}{A(z)}=\left(\frac{1}{2}\right)\left[\overline{\beta}\cdot H1(z)+\beta \cdot H2(z)\right]$$

where `beta`

is a complex scalar of magnitude
equal to 1.

**Note**

Coupled allpass decomposition is not always possible. Nevertheless, Butterworth, Chebyshev, and Elliptic IIR filters, among others, can be factored in this manner. For details, refer to Signal Processing Toolbox™ User's Guide.

[b,a]=cheby1(9,.5,.4); [k1,k2]=tf2cl(b,a); % Get the reflection coeffs. for the lattices. [num1,den1]=latc2tf(k1,'allpass'); % Convert each allpass lattice [num2,den2]=latc2tf(k2,'allpass'); % back to transfer function. num = 0.5*conv(num1,den2)+0.5*conv(num2,den1); den = conv(den1,den2); % Reconstruct numerator and denonimator. MaxDiff=max([max(b-num),max(a-den)]); % Compare original and reconstructed % numerator and denominators.