Z-transform partial-fraction expansion
Compute the partial-fraction expansion corresponding to the third-order IIR lowpass filter described by the transfer function
Express the numerator and denominator as polynomial convolutions.
b0 = 0.05634; b1 = [1 1]; b2 = [1 -1.0166 1]; a1 = [1 -0.683]; a2 = [1 -1.4461 0.7957]; b = b0*conv(b1,b2); a = conv(a1,a2);
Compute the residues, poles, and direct terms of the partial-fraction expansion.
[r,p,k] = residuez(b,a)
r = 3×1 complex -0.1153 - 0.0182i -0.1153 + 0.0182i 0.3905 + 0.0000i
p = 3×1 complex 0.7230 + 0.5224i 0.7230 - 0.5224i 0.6830 + 0.0000i
k = -0.1037
Plot the poles and zeros of the transfer function and overlay the poles you just found.
zplane(b,a) hold on plot(p,'^r') hold off
residuez again to reconstruct the transfer function.
[bn,an] = residuez(r,p,k)
bn = 1×4 0.0563 -0.0009 -0.0009 0.0563
an = 1×4 1.0000 -2.1291 1.7834 -0.5435
ai— Polynomial coefficients
Polynomial coefficients, specified as vectors. Vectors
a specify the coefficients of the polynomials of the
in descending powers of z.
If there are multiple roots and
Residues of the partial fraction, specified as a vector.
Poles of the partial fraction, specified as a vector.
ki— Direct terms
Direct terms, specified as a row vector.
Residues of the partial fraction, returned as a vector.
Pole of the partial fraction, returned as a vector. The number of poles is
n = length(a)-1 = length(r) = length(p)
p(j) = ... = p(j+s-1) is a pole of
s, then the expansion includes terms of the form
ko— Direct term
Direct terms, returned as a row vector. The direct term coefficient vector
k is empty if
length(b) is less than
length(k) = length(b) - length(a) + 1
ao— Polynomial coefficients
Polynomial coefficients, returned as vectors.
residuez converts a discrete time system, expressed as the ratio of two
polynomials, to partial fraction expansion, or residue, form. It also converts the partial
fraction expansion back to the original polynomial coefficients.
Numerically, the partial fraction expansion of a ratio of polynomials is an ill-posed problem. If the denominator polynomial is near a polynomial with multiple roots, then small changes in the data, including round-off errors, can cause arbitrarily large changes in the resulting poles and residues. You should use state-space or pole-zero representations instead.
residuez applies standard MATLAB® functions and partial fraction techniques to find
a. It finds
The direct terms
deconv (polynomial long division) when
The poles using
Any repeated poles, reordering the poles according to their multiplicities.
The residue for each nonrepeating pole pj by multiplying b(z)/a(z) by 1/(1 - pjz−1) and evaluating the resulting rational function at z = pj.
The residues for the repeated poles by solving
S2*r2 = h - S1*r1
h is the
impulse response of the reduced
S1 is a matrix whose columns are impulse responses of the first-order
systems made up of the nonrepeating roots, and
r1 is a column
containing the residues for the nonrepeating roots. Each column of matrix
S2 is an impulse response. For each root
pj of multiplicity
sj columns representing the impulse
responses of each of the following systems.
h and matrices
xtra rows, where
n is the total number of roots and the internal parameter
xtra, set to 1 by default, determines the degree of
over-determination of the system of equations.
 Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.