scipy.signal.

tf2zpk#

scipy.signal.tf2zpk(b, a)[source]#

从线性滤波器的分子和分母表示中返回零点、极点、增益 (z, p, k) 表示。

参数:
barray_like

分子多项式系数。

aarray_like

分母多项式系数。

返回值:
zndarray

传递函数的零点。

pndarray

传递函数的极点。

kfloat

系统增益。

备注

如果 b 的一些值过接近 0,则会将其移除。在这种情况下,会发出 BadCoefficients 警告。

ba 数组被解释为传递函数变量的正、降序幂的系数。因此,输入 \(b = [b_0, b_1, ..., b_M]\)\(a =[a_0, a_1, ..., a_N]\) 可以表示以下形式的模拟滤波器:

\[H(s) = \frac {b_0 s^M + b_1 s^{(M-1)} + \cdots + b_M} {a_0 s^N + a_1 s^{(N-1)} + \cdots + a_N}\]

或以下形式的离散时间滤波器:

\[H(z) = \frac {b_0 z^M + b_1 z^{(M-1)} + \cdots + b_M} {a_0 z^N + a_1 z^{(N-1)} + \cdots + a_N}\]

这种“正幂”形式更常见于控制工程中。如果 MN 相等(对由双线性变换生成的 所有 滤波器而言都是如此),则它恰好等效于 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}}\]

虽然这对常见滤波器来说是正确的,但请记住,在一般情况下并非如此。如果 MN 不相等,则必须先将离散时间传递函数系数转换为“正幂”形式,然后再寻找零点和极点。

示例

查找具有以下传递函数的滤波器的零点、极点和增益

\[H(s) = \frac{3s^2}{s^2 + 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)