Convert zero-pole-gain filter parameters to second-order sections form
[sos,g] = zp2sos(z,p,k)
[sos,g] = zp2sos(z,p,k,'order'
)
[sos,g] = zp2sos(z,p,k,'order'
,'scale'
)
[sos,g] = zp2sos(z,p,k,'order'
,'scale'
,zeroflag)
sos = zp2sos(...)
zp2sos
converts a discrete-time zero-pole-gain
representation of a given digital filter to an equivalent second-order
section representation.
[sos,g] = zp2sos(z,p,k)
creates a matrix 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.
$$H(z)=k\frac{(z-{z}_{1})(z-{z}_{2})\cdots (z-{z}_{n})}{(z-{p}_{1})(z-{p}_{2})\cdots (z-{p}_{m})}$$
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
$$\text{sos}=\left[\begin{array}{cccccc}{b}_{01}& {b}_{11}& {b}_{21}& 1& {a}_{11}& {a}_{21}\\ {b}_{02}& {b}_{12}& {b}_{22}& 1& {a}_{12}& {a}_{22}\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ {b}_{0L}& {b}_{1L}& {b}_{2L}& 1& {a}_{1L}& {a}_{2L}\end{array}\right]$$
whose rows contain the numerator and denominator coefficients b_{ik} and a_{ik} of the second-order sections of H(z).
$$H(z)=g{\displaystyle \prod _{k=1}^{L}{H}_{k}(z)=g{\displaystyle \prod _{k=1}^{L}\frac{{b}_{0k}+{b}_{1k}{z}^{-1}+{b}_{2k}{z}^{-2}}{1+{a}_{1k}{z}^{-1}+{a}_{2k}{z}^{-2}}}}$$
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.
[sos,g] = zp2sos(z,p,k,
specifies
the order of the rows in '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)
[sos,g] = zp2sos(z,p,k,
specifies
the desired scaling of the gain and the numerator coefficients of
all second-order sections, where 'order'
,'scale'
)'scale'
is
'none'
, to apply no scaling (default)
'inf'
, to apply infinity-norm scaling
'two'
, to apply 2-norm scaling
Using 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.
Note Infinity-norm and 2-norm scaling are appropriate only for direct-form II implementations. |
[sos,g] = zp2sos(z,p,k,
specifies
whether to keep together real zeros that are the negatives of each
other instead of ordering them according to proximity to poles. Setting 'order'
,'scale'
,zeroflag)zeroflag
to true
keeps
the zeros together and results in a numerator with a middle coefficient
equal to zero. The default for zeroflag
is false
.
sos = zp2sos(...)
embeds
the overall system gain, g
, in the first section, H_{1}(z),
so that
$$H(z)={\displaystyle \prod _{k=1}^{L}{H}_{k}(z)}$$
Note
Embedding the gain in the first section when scaling a direct-form
II structure is not recommended and may result in erratic scaling.
To avoid embedding the gain, use |
[1] Jackson, L. B. Digital Filters and Signal Processing, 3rd Ed. Boston: Kluwer Academic Publishers, 1996, chap. 11.
[2] Mitra, S. K. Digital Signal Processing: A Computer-Based Approach. New York: McGraw-Hill, 1998, chap. 9.
[3] Vaidyanathan, P. P. "Robust Digital Filter Structures." Handbook for Digital Signal Processing (S. K. Mitra and J. F. Kaiser, eds.). New York: John Wiley & Sons, 1993, chap. 7.