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:
barray_like

Numerator polynomial coefficients.

aarray_like

Denominator polynomial coefficients.

Returns:
zndarray

Zeros of the transfer function.

pndarray

Poles of the transfer function.

kfloat

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=[b0,b1,...,bM] and a=[a0,a1,...,aN] can represent an analog filter of the form:

H(s)=b0sM+b1s(M1)++bMa0sN+a1s(N1)++aN

or a discrete-time filter of the form:

H(z)=b0zM+b1z(M1)++bMa0zN+a1z(N1)++aN

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” discrete-time form preferred in DSP:

H(z)=b0+b1z1++bMzMa0+a1z1++aNzN

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 discrete-time transfer function coefficients must first be converted to the “positive powers” form before finding the poles and zeros.

Examples

Find the zeroes, poles and gain of a filter with the transfer function

H(s)=3s2s2+5s+13
>>> from scipy.signal import tf2zpk
>>> tf2zpk([3, 0, 0], [1, 5, 13])
(   array([ 0.               ,  0.              ]),
    array([ -2.5+2.59807621j ,  -2.5-2.59807621j]),
    3.0)