如何将4输入和4输出系统从状态空间转换为传递函数矩阵?

时间:2016-03-23 20:42:31

标签: matlab state-space control-theory transfer-function

我尝试使用命令ss2tf进行转换,但此命令的sintax显示了输入系统输入数量的位置,而不是输出数量。不过我试着用

获得矩阵传递函数

[num,den]=ss2tf(Ac,Bc,Cc,Dc,4)其中'4'是输入数量。

因此,向量“num”具有4x9维度,而我的向量“den”具有1x9维度,因此使用

时出现错误

F=tf(num,den)

因为“den”应该有4x9维度。

那么,是否有另一种从状态空间获取传递函数的方法(可选择包括输入和输出的数量)??

obs:Ac,Bc,Cc和Dc的dimmension分别为8x8; 8x4,4x8和4x4。

编辑:弄清楚如何解决它。下面有一个答案。

4 个答案:

答案 0 :(得分:3)

这是我应该怎么做的。代码是自我解释。

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))

-Edit-我不得不说我实际上有点惊讶Matlab没有将这个功能合并到函数ss2tf本身。

答案 1 :(得分:1)

如果您的系统有search.addWidget( instantsearch.widgets.hits({ container: '#hits-container', templates: { empty: 'No results', item: '<strong><a href="{{url}}" target="_blank">{{title}}</a></strong><br>{{type}}<br><i><span style="font-size: smaller !important;"{{_highlightResult.summary.value}}</span></i><br>' }, hitsPerPage: 25 }) ); 输入和p输出,则转移函数矩阵q包含G(s)行和p列。 q的每个元素pq是关于entrie G(s)和输出p的SISO传递函数。

q成为系统订单。因此,如果您使用n输入,则会获得尺寸为[b,a] = ss2tf(A,B,C,D,1)的{​​{1}}和尺寸为b的{​​{1}}。要获得qx(n+1)的元素1x1,您必须从a的第一行和向量1x(n+1)获取SISO传递函数。类似地,对于元素1x2,您必须从G(s)的第二行和向量b获取传递函数。使用a的所有行获得传递函数后,您将获得b的第一行。

对于其他行,您必须输入a(并再次获取所有SISO传输函数),然后执行b,依此类推。

最后,使用矩阵连接来获得G(s)的紧凑形式,如:

[b,a] = ss2tf(A,B,C,D,2)

答案 2 :(得分:0)

我认为你误解了函数的语法。这是documentation所说的内容:

  

[b,a] = ss2tf(A,B,C,D)转换a的状态空间表示   系统转换为等效传递函数。 ss2tf返回   拉普拉斯变换传递函数用于连续时间系统和   离散时间系统的Z变换传递函数。 [b,a] = ss2tf(A,B,C,D,ni)返回当结果时产生的传递函数   n具有多个输入的系统的输入由一个单元激发   冲动。

因此,您不需要指定输入/输出的数量,它们由您的状态空间矩阵的相应大小暗示。使用第一种语法,你应该没问题。

答案 3 :(得分:0)

您不需要使用tf2ssss2tf。你可以使用

G_s = tf(G);

直接从一个系统表示转换为另一个系统表示。