MIMO フィードバック ループ
この例では、MIMO フィードバック ループの閉ループ応答を 3 つの異なったやり方で取得する方法を示します。
この例では、次のブロック線図の MIMO フィードバック ループにおける Azref
から Az
への応答を取得します。
以下の 3 つの方法のいずれかを使用して、閉ループ応答を計算できます。
connect
を使用した名前ベースの相互接続feedback
を使用した名前ベースの相互接続feedback
を使用したインデックス ベースの相互接続
これらの方法のうちアプリケーションに最適なものを使用できます。
プラント Aerodyn
とコントローラー Autopilot
を MATLAB® ワークスペースに読み込みます。これらのモデルは、データファイル MIMOfeedback.mat
に保存されています。
load('MIMOfeedback.mat')
Aerodyn
は 4 入力 7 出力の状態空間 (ss
) モデルです。Autopilot
は 5 入力 1 出力の ss
モデルです。両方のモデルの入力名と出力名はブロック線図で示すように表示されます。
connect
を使用して、Azref
から Az
への閉ループ応答を計算します。
T1 = connect(Autopilot,Aerodyn,'Azref','Az');
Warning: The following block inputs are not used: Rho,a,Thrust.
Warning: The following block outputs are not used: Xe,Ze,Altitude.
関数 connect
は、名前の一致する入力と出力を連結することによりモデルを結合します。connect
の最後の 2 つの引数は結果のモデルの入力信号と出力信号を指定します。したがって、T1
は入力 Azref
と出力 Az
をもつ状態空間モデルです。関数 connect
は、Autopilot
および Aerodyn
の他の入出力を無視します。
feedback
コマンドで名前ベースの相互接続を使用して、Azref
から Az
への閉ループ応答を計算します。モデルの入出力名を使用して、Aerodyn
と Autopilot
間の相互接続を指定します。
関数 feedback
を使用する際には、閉ループ システムを、開ループのプラントとコントローラーの組み合わせ L
と、対角のユニティゲイン フィードバック要素 K
間のフィードバック相互接続とみなします。以下のブロック線図はこの相互接続を示します。
L = series(Autopilot,Aerodyn,'Fin'); FeedbackChannels = {'Alpha','Mach','Az','q'}; K = ss(eye(4),'InputName',FeedbackChannels,... 'OutputName',FeedbackChannels); T2 = feedback(L,K,'name',+1);
閉ループ モデル T2
は L
と K
の正のフィードバック相互接続を表します。'name'
オプションを指定すると、feedback
は入力と出力の名前を一致させることにより、L
と K
を接続します。
T2
は 5 入力 7 出力の状態空間モデルです。Azref
から Az
への閉ループ応答は T2('Az','Azref')
です。
インデックスを使用して Aerodyn
と Autopilot
間の相互接続を指定し、feedback
を使用して、Azref
から Az
への閉ループ応答を計算します。
L = series(Autopilot,Aerodyn,1,4); K = ss(eye(4)); T3 = feedback(L,K,[1 2 3 4],[4 3 6 5],+1);
ベクトル [1 2 3 4]
および [4 3 6 5]
は、それぞれどの入力と出力がフィードバック相互接続を完結させるかを指定します。たとえば、feedback
は L
の出力 4 と入力 1 を使用して、最初のフィードバック相互接続を作成します。関数は出力 3 と入力 2 を使用して第 2 の相互接続を作成し、さらに同じ作業を進めます。
T3
は 5 入力 7 出力の状態空間モデルです。Azref
から Az
への閉ループ応答は T3(6,5)
です。
Azref
から Az
へのステップ応答を比較して、3 つの方法が同じ結果を出すことを確認します。
step(T1,T2('Az','Azref'),T3(6,5),2)