5

简介
作为更大系统的一部分,我正在尝试创建一个多输入多输出传递函数,该函数仅将输入链接到前导对角线上的输出*。即它在输入 1 和输出 1、输入 2 和输出 2 等之间具有非零传递函数。

*您是否真的认为 MIMO 系统是一个公平的评论,我希望它采用这种格式,因为它链接到一个真正是 MIMO 的更大系统。

硬编码
我可以通过连接传递函数来实现这一点

tf1=tf([1 -1],[1 1]);
tf2=tf([1 2],[1 4 5]);
tf3=tf([1 2],[5 4 1]);

G=[tf1 0 0; 0 tf2 0; 0 0 tf3]; 

效果很好,但是(a)对输入/输出的数量进行硬编码,并且(b)您拥有的输入和输出越多,就会变得越来越可怕。

Diag 函数
这个问题对于 diag 函数来说似乎是完美的,但是 diag 似乎没有为类型 'tf' 定义

G=diag([tf1, tf2, tf3])
??? Undefined function or method 'diag' for input arguments of type 'tf'.

手动矩阵操作
我也尝试手动操作矩阵(并不是我真的希望它能够工作)

G=zeros(3);
G(1,1)=tf1;
G(2,2)=tf2;
G(3,3)=tf3;
??? The following error occurred converting from tf to double:
Error using ==> double
Conversion to double from tf is not possible.

tf 的直接到 MIMO 格式
tf 还有一种格式,其中所有的分子和分母都分别表示,直接创建了一个 MIMO 系统。我试图以非硬编码格式使用它

numerators=diag({[1 -1], [1 2],[1 2]})
denominators=diag({[1 1], [1 4 5],[5 4 1]})
G=tf( numerators , denominators )
??? Error using ==> checkNumDenData at 19
Numerators and denominators must be specified as non empty row vectors.

几乎起作用了,不幸的是,分子和分母在非对角线上是空的,而不是 0;导致错误

问题
是否可以在不“硬编码”输入和输出数量的情况下从传递函数创建 MIMO 系统

4

2 回答 2

2

我建议您尝试将每个 SISO实现(Ak, Bk, Ck, Dk)为一个状态空间系统,例如,组装一个大型对角系统,例如

A = blkdiag(A1,....)
B = blkdiag(B1,...)
C = blkdiag(C1,...)
D = diag([D1, ....])

然后用于ss2tf计算增强系统的传递函数。

于 2013-07-30T15:55:48.247 回答
0

diag in matlab is not the same as blkdiag. The overloaded LTI operator is the blkdiag to put things on a diagonal of a matrix structure.

In your case, it is done simply by

tf1=tf([1 -1],[1 1]);
tf2=tf([1 2],[1 4 5]);
tf3=tf([1 2],[5 4 1]);
G = blkdiag(tf1,tf2,tf3)

The MIMO syntax requires cells to distinguish the polynomial entries from the MIMO structure. Moreover, it does not like identically zero denominator entries (which is understandable) hence if you wish to enter in the mimo context you need to use

G = tf({[1 -1],0,0;0,[1 2],0;0,0,[1 2]},{[1 1],1,1;1,[1 4 5],1;1,1,[5 4 1]})

or in your syntax

Num = {[1 -1],0,0;0,[1 2],0;0,0,[1 2]};
Den = {[1 1],1,1;1,[1 4 5],1;1,1,[5 4 1]};
tf(Num,Den)

Instead of ones you can basically use anything valid nonzero entries.

于 2015-07-25T14:09:40.950 回答