scipy.signal.

tf2zpk#

scipy.signal.tf2zpk(b, a)[источник]#

Вернуть представление нулей, полюсов, усиления (z, p, k) из представления числителя и знаменателя линейного фильтра.

Параметры:
barray_like

Коэффициенты полинома числителя.

aarray_like

Коэффициенты полинома знаменателя.

Возвращает:
zndarray

Нули передаточной функции.

pndarray

Полюса передаточной функции.

kfloat

Системное усиление.

Примечания

Если некоторые значения b слишком близки к 0, они удаляются. В этом случае генерируется предупреждение BadCoefficients.

The 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 равны (что верно для всех фильтров, сгенерированных билинейным преобразованием), то это оказывается эквивалентным форме с "отрицательными степенями" в дискретном времени, предпочитаемой в ЦОС:

\[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)