Как преобразовать систему с 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) возвращает передаточную функцию, которая появляется, когда ni-й вход системы с несколькими входами возбуждается единичным импульсом.

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

Другие вопросы по тегам