tf2zpk
Преобразование параметров фильтра передаточной функции в форму нулей, полюсов и коэффициента усиления.
| Библиотека |
|
Синтаксис
Вызов функции
-
z,p,k = tf2zpk(b,a)— находит вектор нулейz, вектор полюсовpи соответствующий коэффициент усиленияkиз параметров передаточной функцииbиa. Функция преобразует полиномиальное представление передаточной функциидискретной системы с одним входом и одним выходом (Single-Input/Single-Output, SISO) в разложенную на множители форму передаточной функции
Используйте функцию tf2zpkпри работе с передаточными функциями, выраженными в степенях . Аналогичная функцияtf2zpболее полезна при работе со степенями , например, в непрерывных передаточных функциях.
Аргументы
Входные аргументы
#
b —
коэффициенты числителя передаточной функции
вектор
Details
Коэффициенты числителя передаточной функции, заданные как вектор. Аргумент b содержит коэффициенты в порядке возрастания степеней .
| Типы данных |
|
#
a —
коэффициенты знаменателя передаточной функции
вектор
Details
Коэффициенты знаменателя передаточной функции, заданные как вектор. Аргумент a содержит коэффициенты в порядке возрастания степеней .
| Типы данных |
|
Выходные аргументы
#
z —
нули системы
вектор
Details
Нули системы, возвращаемые в виде вектора-столбца.
#
p —
полюса системы
вектор
Details
Полюса системы, возвращаемые в виде вектора-столбца.
#
k —
коэффициент усиления системы
скаляр
Details
Коэффициент усиления системы, возвращаемый в виде скаляра.
Примеры
Полюса, нули и коэффициент усиления БИХ-фильтра
Details
Спроектируем фильтр Баттерворта 3-го порядка с нормализованной частотой среза рад/отсчет. Найдем полюса, нули и коэффициент усиления фильтра.
import EngeeDSP.Functions: butter, tf2zpk
b, a = butter(3, 0.4)
z, p, k = tf2zpk(b, a)
println("z = ", z, "\np = ", p, "\nk = ", k)
z = ComplexF64[-1.000006578089738 - 0.0im; -0.9999967109551287 + 5.6968468871119e-6im; -0.9999967109551287 - 5.6968468871119e-6im;;]
p = ComplexF64[0.20942804224088346 + 0.5581994780502226im; 0.20942804224088346 - 0.5581994780502226im; 0.1583844403245364 - 0.0im;;]
k = 0.098531160923927
Построим график полюсов и нулей, чтобы убедиться, что они находятся в ожидаемых местах. Добавим на график единичную окружность для наглядности.
import Pkg
Pkg.add("ControlSystems")
using ControlSystems
H = tf(vec(b), vec(a))
z, p = tzeros(H), poles(H)
pzmap(H)
annotate!([(real(zi)+0.1, imag(zi), text("Zero", 8)) for zi in z])
annotate!([(real(pi)+0.1, imag(pi), text("Pole", 8)) for pi in p])
θ = range(0, 2π, length=200)
plot!(cos.(θ), sin.(θ),
ls=:dash, color=:black,
xlabel="Real Part", ylabel="Imaginary Part",
label="Unit Circle", aspect_ratio=:equal)
display(plot!())