首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建MIMO ()传输函数系统,而不对输入和输出数进行硬编码

创建MIMO ()传输函数系统,而不对输入和输出数进行硬编码
EN

Stack Overflow用户
提问于 2013-07-30 14:20:56
回答 2查看 3.9K关注 0票数 5

Introduction

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

*不管你是否真的认为MIMO系统是一个公平的评论,我希望它是这样的格式,因为它链接到一个更大的系统,实际上是MIMO。

硬编码

我可以通过连接传输函数来实现这一点。

代码语言:javascript
复制
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类型。

代码语言:javascript
复制
G=diag([tf1, tf2, tf3])
??? Undefined function or method 'diag' for input arguments of type 'tf'.

手工矩阵操作

我也尝试过手动操作一个矩阵(并不是说我真的期望它能工作)。

代码语言:javascript
复制
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系统。我尝试使用非硬编码格式。

代码语言:javascript
复制
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系统?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-30 15:55:48

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

代码语言:javascript
复制
A = blkdiag(A1,....)
B = blkdiag(B1,...)
C = blkdiag(C1,...)
D = diag([D1, ....])

然后利用ss2tf计算增广系统的传递函数。

票数 2
EN

Stack Overflow用户

发布于 2015-07-25 14:09:40

matlab中的diagblkdiag不一样。重载的LTI运算符是将事物放在矩阵结构的对角线上的blkdiag

在您的例子中,这只是通过以下方式完成的

代码语言:javascript
复制
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上下文,则需要使用

代码语言:javascript
复制
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]})

或者用你的语法

代码语言:javascript
复制
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)

您基本上可以使用任何有效的非零项来代替那些项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17949664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档