scipy.signal.tf2zpk¶

scipy.signal.
tf2zpk
(b, a)[source]¶ Return zero, pole, gain (z, p, k) representation from a numerator, denominator representation of a linear filter.
Parameters: b : array_like
Numerator polynomial coefficients.
a : array_like
Denominator polynomial coefficients.
Returns: z : ndarray
Zeros of the transfer function.
p : ndarray
Poles of the transfer function.
k : float
System gain.
Notes
If some values of b are too close to 0, they are removed. In that case, a BadCoefficients warning is emitted.
The b and a arrays are interpreted as coefficients for positive, descending powers of the transfer function variable. So the inputs \(b = [b_0, b_1, ..., b_M]\) and \(a =[a_0, a_1, ..., a_N]\) can represent an analog filter of the form:
\[H(s) = \frac {b_0 s^M + b_1 s^{(M1)} + \cdots + b_M} {a_0 s^N + a_1 s^{(N1)} + \cdots + a_N}\]or a discretetime filter of the form:
\[H(z) = \frac {b_0 z^M + b_1 z^{(M1)} + \cdots + b_M} {a_0 z^N + a_1 z^{(N1)} + \cdots + a_N}\]This “positive powers” form is found more commonly in controls engineering. If M and N are equal (which is true for all filters generated by the bilinear transform), then this happens to be equivalent to the “negative powers” discretetime form preferred in DSP:
\[H(z) = \frac {b_0 + b_1 z^{1} + \cdots + b_M z^{M}} {a_0 + a_1 z^{1} + \cdots + a_N z^{N}}\]Although this is true for common filters, remember that this is not true in the general case. If M and N are not equal, the discretetime transfer function coefficients must first be converted to the “positive powers” form before finding the poles and zeros.