scipy.signal.
tf2zpk#
- scipy.signal.tf2zpk(b, a)[源代码][源代码]#
从线性滤波器的分子和分母表示中返回零点、极点、增益(z, p, k)表示。
- 参数:
- barray_like
分子多项式系数。
- aarray_like
分母多项式系数。
- 返回:
- zndarray
传递函数的零点。
- pndarray
传递函数的极点。
- k浮动
系统增益。
注释
如果 b 的某些值过于接近 0,它们将被移除。在这种情况下,会发出 BadCoefficients 警告。
b 和 a 数组被解释为传递函数变量的正降幂的系数。因此,输入 \(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}\]这种“正幂”形式在控制工程中更为常见。如果 M 和 N 相等(对于由双线性变换生成的所有滤波器都是如此),那么这恰好等同于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}}\]尽管这对常见滤波器是正确的,但请记住,在一般情况下这并不成立。如果 M 和 N 不相等,离散时间传递函数的系数必须首先转换为“正幂”形式,然后才能找到极点和零点。
示例
找到具有传递函数的滤波器的零点、极点和增益
\[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)