モデルの結合
この例では、単純な直列接続や並列接続から複雑なブロック線図に至るまで、LTI システムの相互接続をモデル化する方法を示します。
概要
Control System Toolbox™ には、LTI モデルのネットワーク構築を支援するためのさまざまな関数が用意されています。これらの関数には、以下のような関数が含まれます。
直列接続と並列接続 (
series
およびparallel
)フィードバック接続 (
feedback
およびlft
)入出力連結 (
[ , ]
、[ ; ]
、およびappend
)一般的なブロック線図作成 (
connect
)
上記の関数は、モデル表現のあらゆる組み合わせを処理できます。例示のために、以下の 2 つの SISO 伝達関数モデルを作成します。
H1 = tf(2,[1 3 0])
H1 = 2 --------- s^2 + 3 s Continuous-time transfer function.
H2 = zpk([],-5,5)
H2 = 5 ----- (s+5) Continuous-time zero/pole/gain model.
直列接続
演算子 *
または関数 series
を使用して、たとえば次のように LTI モデルを直列に接続します。
H = H2 * H1
H = 10 ------------- s (s+5) (s+3) Continuous-time zero/pole/gain model.
これは、次の関数と等価です。
H = series(H1,H2);
並列接続
演算子 +
または関数 parallel
を使用して、たとえば次のように LTI モデルを並列に接続します。
H = H1 + H2
H = 5 (s+2.643) (s+0.7566) ---------------------- s (s+3) (s+5) Continuous-time zero/pole/gain model.
これは、次の関数と等価です。
H = parallel(H1,H2);
フィードバック接続
標準のフィードバック構成は、以下のとおりです。
u
から y
への閉ループ伝達のモデルを作成するには、以下のように入力します。
H = feedback(H1,H2)
H = 2 (s+5) -------------------------------- (s+5.663) (s^2 + 2.337s + 1.766) Continuous-time zero/pole/gain model.
feedback
は、既定では負のフィードバックを前提としています。正のフィードバックを適用するには、以下の構文を使用します。
H = feedback(H1,H2,+1);
また、関数 lft
を使用して、下図に示すようなより一般的なフィードバック相互接続を作成することもできます。
入出力の連結
H1
と H2
という 2 つのモデルの入力を連結するには、以下のように入力します。
H = [ H1 , H2 ]
H = From input 1 to output: 2 ------- s (s+3) From input 2 to output: 5 ----- (s+5) Continuous-time zero/pole/gain model.
結果として得られるモデルには、2 つの入力があり、以下の相互接続に対応しています。
同様に、以下のように入力すると H1
と H2
の出力を連結できます。
H = [ H1 ; H2 ]
H = From input to output... 2 1: ------- s (s+3) 5 2: ----- (s+5) Continuous-time zero/pole/gain model.
結果として得られるモデル H
には、2 つの出力と 1 つの入力があり、以下のブロック線図に相当します。
最後に、以下を使用して 2 つのモデルの入出力を追加します。
H = append(H1,H2)
H = From input 1 to output... 2 1: ------- s (s+3) 2: 0 From input 2 to output... 1: 0 5 2: ----- (s+5) Continuous-time zero/pole/gain model.
結果として得られるモデル H
には、2 つの出力と 2 つの入力があり、以下のブロック線図に相当します。
基本的名 SISO モデルから、結合を使用して MIMO モデルを以下のように構築できます。
H = [H1 , -tf(10,[1 10]) ; 0 , H2 ]
H = From input 1 to output... 2 1: ------- s (s+3) 2: 0 From input 2 to output... -10 1: ------ (s+10) 5 2: ----- (s+5) Continuous-time zero/pole/gain model.
sigma(H), grid
ブロック線図からのモデル構築
ここまでに紹介した関数と演算を組み合わせると、簡単なブロック線図のモデルを構築できます。たとえば、以下のブロック線図に
ブロック F
、C
、G
、S
の次のデータがあるとします。
s = tf('s');
F = 1/(s+1);
G = 100/(s^2+5*s+100);
C = 20*(s^2+s+60)/s/(s^2+40*s+400);
S = 10/(s+10);
r
から y
への閉ループ伝達関数 T
を、次のように計算できます。
T = F * feedback(G*C,S); step(T), grid
さらに複雑なブロック線図では、関数 connect
を使うと、系統的かつ簡単にブロック同士を配線で結合できます。関数 connect
を使用するには、以下の手順に従います。
加算ブロックも含め、ブロック線図内のすべてのブロックを定義する
すべてのブロックの入力チャネルと出力チャネルの名前付け
ブロック I/O のリストからブロック線図 I/O を選択します。
上記のブロック線図では、これらの手順は以下のようになります。
Sum1 = sumblk('e = r - y'); Sum2 = sumblk('u = uC + uF'); % Define block I/Os ("u" and "y" are shorthand for "InputName" and "OutputName") F.u = 'r'; F.y = 'uF'; C.u = 'e'; C.y = 'uC'; G.u = 'u'; G.y = 'ym'; S.u = 'ym'; S.y = 'y'; % Compute transfer r -> ym T = connect(F,C,G,S,Sum1,Sum2,'r','ym'); step(T), grid
実行の優先順位
異なるタイプのモデルを接続する場合、結果として得られるモデル タイプは、実行の優先順位によって決まります。
FRD > SS > ZPK > TF > PID
この規則では、優先順位は、FRD が最も高く、続いて SS、ZPK、TF、そして PID は最も低くなります。たとえば、以下の直列接続では、
H1 = ss(-1,2,3,0); H2 = tf(1,[1 0]); H = H2 * H1;
H2
が自動的に状態空間表現に変換され、結果 H
は状態空間モデルとなります。
class(H)
ans = 'ss'
SS および FRD 表現がシステムの相互接続に最も適しているため、すべての計算がこれら 2 つの表現のいずれかを使用して実行されるよう、少なくとも 1 つのモデルを SS または FRD に変換することをお勧めします。connect
を使用する場合は例外であり、こうした変換が自動的に実行され、常にブロック線図の状態空間モデルまたは FRD モデルが返されます。