1

我试图使用该命令进行转换,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的尺寸分别为8x8;8x4、4x8 和 4x4。

编辑:想出了如何解决它。下面有答案。

4

4 回答 4

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本身中,这让我感到有点惊讶。

于 2016-03-24T08:55:33.177 回答
1

如果您的系统有p输入和q输出,则传输函数矩阵G(s)p行和q列。每个元素 pqG(s)是关于 entriep和 output的 SISO 传递函数q

n成为系统顺序。所以,如果你输入 with[b,a] = ss2tf(A,B,C,D,1)你会得到bwith dimensionqx(n+1)awith dimension 1x(n+1)。要获得 的元素 1x1 G(s),您必须从 的第一行b和向量获得 SISO 传递函数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]

于 2016-03-23T22:47:38.017 回答
0

我认为您误解了函数的语法。这是文档中的内容:

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

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

于 2016-03-23T21:52:27.960 回答
0

你不需要使用tf2ssor ss2tf。你可以使用

G_s = tf(G);

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

于 2017-07-17T00:47:45.280 回答