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 function
この問題は diag 関数には完璧に見えましたが、タイプ 'tf' には diag が定義されていないようです

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 の Direct to 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 に答える