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

ss2tf

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

Библиотека

EngeeDSP

Синтаксис

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

  • b,a = ss2tf(A,B,C,D) — преобразует представление системы в пространстве состояний в эквивалентную передаточную функцию. Функция ss2tf возвращает передаточную функцию преобразования Лапласа для систем непрерывного времени и передаточную функцию Z-преобразования для систем дискретного времени.

  • b,a = ss2tf(A,B,C,D,ni) — возвращает передаточную функцию, которая получается при возбуждении единичным импульсом ni-го входа системы с несколькими входами.

Аргументы

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

# A — матрица состояний
матрица

Details

Матрица состояний, заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то A имеет размер на .

Типы данных

Float32, Float64

# B — матрица «вход-состояние»
матрица

Details

Матрица «вход-состояние», заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то B имеет размер на .

Типы данных

Float32, Float64

# C — матрица «выход-состояние»
матрица

Details

Матрица «выход-состояние», заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то C имеет размер на .

Типы данных

Float32, Float64

# D — матрица сквозной передачи
матрица

Details

Матрица сквозной передачи, заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то D имеет размер на .

Типы данных

Float32, Float64

# ni — индекс входа
1 (по умолчанию) | скаляр

Details

Индекс входа, заданный как целочисленный скаляр. Если система имеет входов, используйте функцию ss2tf с аргументом ni для вычисления отклика на единичный импульс, приложенный к ni-му входу.

Типы данных

Int32, Int64

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

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

Details

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

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

Details

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

Примеры

Система «масса-пружина»

Details

Одномерная колебательная система с дискретным временем состоит из единичной массы , прикрепленной к стене пружиной с единичной упругой постоянной . Датчик регистрирует ускорение массы с частотой Гц.

tf2sos

Сгенерируем 50 отсчетов времени. Определим интервал дискретизации .

Fs = 5
dt = 1 / Fs
N = 50
t = dt * (0:N-1)

Осциллятор можно описать уравнениями пространства состояний:



где — вектор состояния, и — положение и скорость массы соответственно, и матрицы

A = [cos(dt) sin(dt); -sin(dt) cos(dt)]
B = [1-cos(dt); sin(dt)]
C = [-1 0]
D = 1

Система возбуждается единичным импульсом в положительном направлении. Используем модель пространства состояний для вычисления временной эволюции системы, начиная с нулевого начального состояния.

u = [1.0; zeros(N-1)]

x = [0; 0]
y = zeros(N)

for k = 1:N
    y[k] = (C * x)[1] + D * u[k]
    global x = A * x + B * u[k]
end

Построим график зависимости ускорения массы от времени.

plot(t, y,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2tf 1

Вычислим зависимость ускорения от времени, используя передаточную функцию для фильтрации входного сигнала. Построим график результата.

import EngeeDSP.Functions: ss2tf, filter

b, a = ss2tf(A, B, C, D)
yt = filter(b, a, u)
plot(t, yt,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2tf 2

Передаточная функция системы имеет аналитическое выражение:

Используем это выражение для фильтрации входного сигнала. Построим график отклика.

bf = [1 -(1 + cos(dt)) cos(dt)]
af = [1 -2*cos(dt) 1]
yf = filter(bf, af, u)

plot(t, yf,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2tf 3

Результат одинаков во всех трех случаях.

Осциллятор для двух тел

Details

Идеальная одномерная колебательная система состоит из двух единичных масс и , заключенных между двумя стенками. Каждая масса прикреплена к ближайшей стенке пружиной с единичной упругой постоянной . Другая такая же пружина соединяет две массы. Датчики регистрируют ускорения масс и , с частотой Гц.

ss2tf

Зададим общее время измерения 16 с. Определим интервал дискретизации .

Fs = 16
dt = 1 / Fs
N = 257
t = dt * (0:N-1)

Систему можно описать с помощью модели пространства состояний:



где — вектор состояния, а и — положение и скорость -й массы соответственно. Входной вектор и выходной вектор . Матрицы пространства состояний:

где , — матрицы пространства состояний непрерывного времени:

а обозначает единичную матрицу соответствующего размера.

using LinearAlgebra

Ac = [0 1 0 0; -2 0 1 0; 0 0 0 1; 1 0 -2 0]
A = exp(Ac * dt)

Bc = [0 0; 1 0; 0 0; 0 1]
B = Ac \ (A - I(4)) * Bc

C = [-2 0 1 0; 1 0 -2 0]
D = I(2)

Первая масса получает единичный импульс в положительном направлении.

ux = [1; zeros(N-1)]'
u0 = zeros(1, N)
u = [ux; u0]

Используем модель пространства состояний для вычисления временной эволюции системы, начиная с нулевого начального состояния.

x = zeros(4)
y = zeros(2, N)

for k = 1:N
    y[:, k] = C * x + D * u[:, k]
    global x = A * x + B * u[:, k]
end

Построим график зависимости ускорений двух масс от времени.

plot(t, y',
     seriestype = :stem,
     marker = :circle,
     markersize = 1.5,
     xlabel = "t",
     label = ["a₁" "a₂"],
     title = "Mass 1 Excited",
     grid = true)

ss2tf 4

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

import EngeeDSP.Functions: ss2tf, filter

b1, a1 = ss2tf(A, B, C, D, 1)
y1u1 = filter(b1[1, :], a1, ux)
y1u2 = filter(b1[2, :], a1, ux)

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

plot(t, [y1u1; y1u2]',
     seriestype = :stem,
     marker = :circle,
     markersize = 1.5,
     xlabel = "t",
     label = ["a₁" "a₂"],
     title = "Mass 1 Excited",
     grid = true)

ss2tf 5

Система возвращается в исходное состояние. Теперь другая масса, , получает единичный импульс в положительном направлении. Вычислим временную эволюцию системы.

u = [u0; ux]
x = zeros(4)

for k = 1:N
    y[:, k] = C * x + D * u[:, k]
    global x = A * x + B * u[:, k]
end

Построим график ускорений. Отклики отдельных масс поменялись местами.

plot(t, y',
     seriestype = :stem,
     marker = :circle,
     markersize = 1.5,
     xlabel = "t",
     label = ["a₁" "a₂"],
     title = "Mass 2 Excited",
     grid = true)

ss2tf 6

Найдем отклик системы на положительное единичное импульсное воздействие на вторую массу.

b2, a2 = ss2tf(A, B, C, D, 2)
y2u1 = filter(b2[1, :], a2, ux)
y2u2 = filter(b2[2, :], a2, ux)

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

plot(t, [y2u1; y2u2]',
     seriestype = :stem,
     marker = :circle,
     markersize = 1.5,
     xlabel = "t",
     label = ["a₁" "a₂"],
     title = "Mass 2 Excited",
     grid = true)

ss2tf 7

Дополнительно

Передаточная функция

Details

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

  • Для дискретных систем матрицы пространства состояний связывают вектор состояния , вход и выход :



    Передаточная функция представляет собой Z-преобразование импульсной характеристики системы. Ее можно выразить через матрицы пространства состояний следующим образом:

  • Для непрерывных систем матрицы пространства состояний связывают вектор состояния , вход и выход :



    Передаточная функция представляет собой преобразование Лапласа импульсной характеристики системы. Ее можно выразить через матрицы пространства состояний следующим образом: