Как преобразовать систему с 4 входами и 4 выходами из пространства состояний в матрицу передаточной функции?
Я пытался конвертировать с помощью команды ss2tf
но синтаксис этой команды показывает, где ввести количество входов системы, а не количество выходов. Тем не менее я попытался получить свою матричную передаточную функцию с
[num,den]=ss2tf(Ac,Bc,Cc,Dc,4)
где "4" - это количество входов.
В результате вектор "num" имеет размерность 4x9, а мой вектор "den" имеет размерность 1x9, поэтому я получил ошибку, используя
F=tf(num,den)
потому что "логово" должно иметь размерность 4х9.
Итак, есть ли другой способ получить передаточную функцию из пространства состояний (с возможностью включения количества входов и выходов)?
obs: размеры Ac, Bc, Cc и Dc соответственно равны 8x8; 8х4, 4х8 и 4х4.
редактировать: понял, как решить. Там ответ ниже.
4 ответа
Вот как я должен это сделать. Код самоочевиден.
clear all;
close all;
clc;
% Generate random state-space system
sys = rss(2,2,2);
%% Generate transfer function matrix with Matlab tf
% For each output
for i = 1:size(sys,1)
% For each input
for j = 1:size(sys,2)
% Get SISO transfer function
[num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D);
% Compute tf
Gtf(i,j) = tf(num,den);
end
end
%% Generate transfer function matrix symbolic
% Laplace variable
s = sym('s');
% For each output
for i = 1:size(sys,1)
% For each input
for j = 1:size(sys,2)
% Get SISO transfer function
[num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D);
% Compute tf
Gsym(i,j) = poly2sym(num,s);
end
end
% Den is the same for all elements
Gsym = Gsym / poly2sym(den,s);
% Numeric vectors is transformed to symbolic vector, to make everything
% readable change the variable precision arithmetic to 4 digits for output
pretty(vpa(Gsym,4))
Я должен сказать, что на самом деле я немного удивлен, что Matlab не имеет этой функции, встроенной в функцию. ss2tf
сам.
Если ваша система имеет p
входы и q
выходы, затем матрица функции переноса G(s)
имеет p
линии и q
колонны. Каждый элемент pq из G(s)
является передаточной функцией SISO по отношению к p
и вывод q
,
Позволять n
быть системным порядком. Итак, если вы введете с [b,a] = ss2tf(A,B,C,D,1)
ты получишь b
с размерностью qx(n+1)
а также a
с размерностью 1x(n+1)
, Для получения элемента 1x1 из G(s)
необходимо получить передаточную функцию SISO из первой строки b
и вектор a
, Аналогично, для элемента 1x2 вы должны получить передаточную функцию из второй строки b
и вектор a
, После того, как вы получите передаточные функции, используя все строки b
у вас будет первая строка G(s)
,
Для других строк вы должны ввести [b,a] = ss2tf(A,B,C,D,2)
(и снова получите все передаточные функции SISO), затем выполните [b,a] = ss2tf(A,B,C,D,3)
и так далее.
Наконец, используйте матричную конкатенацию, чтобы получить компактную форму G(s)
, лайк:
G_s=[g11 g12 g13 ... g1q;g21 g22 ..g2q; ....;gp1 gp2 .. gpq]
Вам не нужно использовать tf2ss
или же ss2tf
, Вы просто можете использовать
G_s = tf(G);
непосредственное преобразование из одного системного представления в другое.
Я думаю, что вы неправильно поняли синтаксис функции. Вот что говорится в документации:
[b,a] = ss2tf(A,B,C,D)
преобразует представление системы в пространстве состояний в эквивалентную передаточную функцию.ss2tf
возвращает передаточную функцию с преобразованием Лапласа для систем с непрерывным временем и передаточную функцию с Z-преобразованием для систем с дискретным временем.[b,a] = ss2tf(A,B,C,D,ni)
возвращает передаточную функцию, которая появляется, когдаn
i-й вход системы с несколькими входами возбуждается единичным импульсом.
Таким образом, вам не нужно указывать количество входов / выходов, они подразумеваются соответствующими размерами ваших матриц пространства состояний. Используйте первый синтаксис и у вас все будет хорошо.