Документация Engee

tf2zp

Преобразование параметров фильтра передаточной функции в форму нулей, полюсов и коэффициента усиления.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • z,p,k = tf2zp(b,a) — находит матрицу нулей z, вектор полюсов p и соответствующий вектор коэффициентов усиления k из параметров передаточной функции b и a. Функция преобразует полиномиальное представление передаточной функции

    непрерывной системы с одним входом и несколькими выходами (Single-Input/Multi-Output, SIMO) в разложенную на множители форму передаточной функции

    Функцию tf2zp следует использовать при работе со степенями , например, в непрерывных передаточных функциях. Аналогичная функция tf2zpk более полезна при работе с передаточными функциями, выраженными в степенях .

Аргументы

Входные аргументы

# b — коэффициенты числителя передаточной функции
вектор | матрица

Details

Коэффициенты числителя передаточной функции, заданные как вектор или матрица. Если b — матрица, то каждая строка b соответствует выходному сигналу системы. Аргумент b содержит коэффициенты в порядке убывания степеней . Количество столбцов b должно быть меньше или равно длине аргумента a.

Типы данных

Float32, Float64

# a — коэффициенты знаменателя передаточной функции
вектор

Details

Коэффициенты знаменателя передаточной функции, заданные как вектор. Аргумент a содержит коэффициенты в порядке убывания степеней .

Типы данных

Float32, Float64

Выходные аргументы

# z — нули
матрица

Details

Нули системы, возвращаемые в виде матрицы. Аргумент z содержит нули числителя в своих столбцах. Аргумент z имеет столько столбцов, сколько выходов.

# p — полюса
вектор

Details

Полюса системы, возвращаемые в виде вектора-столбца. Аргумент p содержит координаты полюсов коэффициентов знаменателя передаточной функции.

# k — коэффициенты усиления
вектор

Details

Коэффициенты усиления системы, возвращаемые в виде вектора-столбца. Аргумент k содержит коэффициенты усиления для каждой передаточной функции числителя.

Примеры

Нули, полюса и коэффициент усиления непрерывной системы

Details

Создадим систему со следующей передаточной функцией

Найдем нули, полюса и коэффициент усиления системы. Используем функцию eqtflength, чтобы убедиться, что числитель и знаменатель имеют одинаковую длину.

import EngeeDSP.Functions: eqtflength, tf2zp

b = [2 3]
a = [1 1/sqrt(2) 1/4]

b, a = eqtflength(b, a)
z, p, k = tf2zp(b, a)
println("z = ", z, "\np = ", p, "\nk = ", k)
z = [-1.5, 0.0]
p = ComplexF64[-0.35355339059327373 - 0.35355339059327384im, -0.35355339059327373 + 0.35355339059327384im]
k = 2.0

Построим график полюсов и нулей, чтобы убедиться, что они находятся в ожидаемых местах. Добавим на график единичную окружность для наглядности.

import Pkg
Pkg.add("ControlSystems")
using ControlSystems

H = tf(b, 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,
      label="Unit Circle", aspect_ratio=:equal)

display(plot!())

tf2zp