Signal Processing Toolbox Help Desk

zp2sos

Purpose

Zero-pole-gain to second-order section conversion.

Syntax

Description

zp2sos converts a zero-pole-gain representation of a given system to an equivalent second-order section representation.

sos = zp2sos(z,p,k) finds a matrix sos in second-order section form equivalent to the zero-pole-gain system represented by input arguments z, p, and k. Vectors z and p contain the zeros and poles of the system H(z), not necessarily in any order:

k is a scalar gain. The zeros and poles must be real or come in complex conjugate pairs. sos is an L-by-6 matrix:

whose rows contain the numerator and denominator coefficients bik and aik of the second-order sections of H(z):

The number of rows L of matrix sos is the maximum of the ceiling of N/2 and the ceiling of M/2, where N and M are the lengths of z and p, respectively.

sos = zp2sos(z,p,k,'order') specifies the order of the rows in sos, where order is

Example

Find a second-order section form of a Butterworth lowpass filter:

Algorithm

zp2sos uses a four-step algorithm to determine the second-order section representation for an input zero-pole-gain system:

  1. It groups the zeros and poles into complex conjugate pairs using the cplxpair function.
  2. It forms the second-order section by matching the pole and zero pairs according to the following rules:
    1. Match the poles closest to the unit circle with the zeros closest to those poles.
    2. Match the poles next closest to the unit circle with the zeros closest to those poles.
    3. Continue until all of the poles and zeros are matched.

    zp2sos groups real poles into sections with the real poles closest to them in absolute value. The same rule holds for real zeros.

  3. It orders the sections according to the proximity of the pole pairs to the unit circle. zp2sos normally orders the sections with poles closest to the unit circle last in the cascade. You can tell zp2sos to order the sections in the reverse order by specifying the down flag.

    Putting "high Q" sections at the beginning of the cascade, by specifying the down flag, reduces the response sensitivity of the filter to quantization noise near those poles. Putting "high Q" sections at the end of the cascade (the default) prevents reduction in signal power level early in the cascade. zp2sos orders all zero sections according to the minimum of |zi| and |zi-1| where zi (for i = 1, 2) are the zeros in the section. References [1] and [2] provide detailed discussions of section ordering.

  4. zp2sos scales the sections so the maximum of the magnitude of the transfer function of the first N sections in cascade is less than 1:

    subject to the constraint that the overall gain, k, stays the same:

This scaling is an attempt to minimize overflow in some standard fixed point implementations of filtering.

See Also

sos2ss

Second-order section to state-space conversion.

sos2tf

Second-order section to transfer function conversion.

sos2zp

Second-order section to zero-pole-gain conversion.

ss2sos

State-space to second-order section conversion.

References

[1] Oppenheim, A.V., and R.W. Schafer. Discrete-Time Signal Processing. Englewood Cliffs, NJ: Prentice Hall, 1989. Pgs. 363-370.

[2] Jackson, L.B. Digital Filters and Signal Processing. Third Ed. Boston: Kluwer Academic Publishers, 1989. Pgs. 319-324.



[ Previous | Help Desk | Next ]