Introduction
作为更大系统的一部分,我试图创建一个多输入、多输出传递函数,它只将输入链接到主导对角线上的输出。即在输入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系统?
发布于 2013-07-30 15:55:48
我建议您尝试使用实现每个单SISO作为状态空间系统,例如(Ak, Bk, Ck, Dk),组装一个大型对角线系统,如
A = blkdiag(A1,....)
B = blkdiag(B1,...)
C = blkdiag(C1,...)
D = diag([D1, ....])然后利用ss2tf计算增广系统的传递函数。
发布于 2015-07-25 14:09:40
matlab中的diag与blkdiag不一样。重载的LTI运算符是将事物放在矩阵结构的对角线上的blkdiag。
在您的例子中,这只是通过以下方式完成的
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)MIMO语法要求单元将多项式项与MIMO结构区分开来。此外,它不喜欢相同的零分母条目(这是可以理解的),因此,如果您希望进入mimo上下文,则需要使用
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]})或者用你的语法
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)您基本上可以使用任何有效的非零项来代替那些项。
https://stackoverflow.com/questions/17949664
复制相似问题