| Signal Processing Toolbox | ![]() |
Convert digital filter zero-pole-gain parameters to second-order sections form.
Syntax
[sos,g] =zp2sos(z,p,k)[sos,g] = zp2sos(z,p,k,'order')[sos,g] = zp2sos(z,p,k,'order','scale')sos = zp2sos(...)
Description
zp2sos converts a discrete-time zero-pole-gain representation of a given digital filter to an equivalent second-order section representation.
Use to obtain a matrix [sos,g] = zp2sos(z,p,k)
sos in second-order section form with gain g equivalent to the discrete-time zero-pole-gain filter represented by input arguments z, p, and k. Vectors z and p contain the zeros and poles of the filter's transfer function H(z), not necessarily in any particular order.
where n and m are the lengths of z and p, respectively, and k is a scalar gain. The zeros and poles must be real or 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 L of rows of the matrix sos is the closest integer greater than or equal to the maximum of n/2 and m/2.
specifies the order of the rows in [sos,g] = zp2sos(z,p,k,'order')
sos, where 'order' is:
'down', to order the sections so the first row of sos contains the poles closest to the unit circle'up', to order the sections so the first row of sos contains the poles farthest from the unit circle (default) specifies the desired scaling of the gain and the numerator coefficients of all second-order sections, where [sos,g] = zp2sos(z,p,k,'order','scale')
'scale' is:
'none', to apply no scaling (default)'inf', to apply infinity-norm scaling'two', to apply 2-norm scalingUsing infinity-norm scaling in conjunction with up-ordering minimizes the probability of overflow in the realization. Using 2-norm scaling in conjunction with down-ordering minimizes the peak round-off noise.
sos embeds the overall system gain, = zp2sos(...)
g, in the first section, H1(z), so that
Example
Find a second-order section form of a Butterworth lowpass filter.
[z,p,k]=butter(5,0.2); sos=zp2sos(z,p,k);
Algorithm
zp2sos uses a four-step algorithm to determine the second-order section representation for an input zero-pole-gain system:
cplxpair function.
zp2sos groups real poles into sections with the real poles closest to them in
absolute value. The same rule holds for real zeros.
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.
zp2sos scales the sections by the norm specified in the 'scale' argument. For arbitrary H(
), the scaling is defined by
where p can be either
or 2. See the references for details on the scaling.
This scaling is an attempt to minimize overflow or peak round-off noise in
fixed point filter implementations.
See Also
|
Group complex numbers into complex conjugate pairs. |
|
Convert digital filter second-order section parameters to zero-pole-gain form. |
|
Convert digital filter state-space parameters to second-order sections form. |
|
Convert digital filter transfer function parameters to second-order sections form. |
|
Convert zero-pole-gain filter parameters to state-space form. |
|
Convert zero-pole-gain filter parameters to transfer function form. |
References
[1] Jackson, L.B., Digital Filters and Signal Processing, 3rd ed., Kluwer Academic Publishers, Boston, 1996, Chapter 11.
[2] Mitra, S.K., Digital Signal Processing: A Computer-Based Approach, McGraw-Hill, New York, 1998, Chapter 9.
[3] Vaidyanathan, P.P., "Robust Digital Filter Structures," Handbook for Digital Signal Processing, S.K. Mitra and J.F. Kaiser, ed., John Wiley & Sons, New York, 1993, Chapter 7.
| yulewalk | zp2ss | ![]() |