【问题标题】:Creating a MIMO (multiple input multiple output) transfer function system without hardcoding the number of inputs and outputs创建 MIMO(多输入多输出)传递函数系统,无需硬编码输入和输出的数量
【发布时间】:2013-07-30 14:20:56
【问题描述】:

简介
作为更大系统的一部分,我正在尝试创建一个多输入多输出传递函数,该函数仅将输入链接到前导对角线上的输出*。 IE。它在输入 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 似乎没有为类型 '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 系统

【问题讨论】:

    标签: matlab control-theory transfer-function


    【解决方案1】:

    我建议你尝试将realizing 每个 SISO 作为一个状态空间系统,比如(Ak, Bk, Ck, Dk),组装一个像这样的大型对角线系统

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

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

    【讨论】:

    • 谢谢!这正是我想要的
    【解决方案2】:

    matlab 中的diagblkdiag 不一样。重载的 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)
    

    您基本上可以使用任何有效的非零条目来代替它们。

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多