Main Content

feedback

複数のモデルのフィードバック接続

説明

sys = feedback(sys1,sys2) は、モデル オブジェクト sys1,sys2 の負のフィードバック相互接続のためのモデル オブジェクト sys を返します。

図を見ると、閉ループ モデル sys には入力ベクトルの u と出力ベクトルの y があります。sys1sys2 の両方のモデルは、同じサンプル時間をもつ連続モデルまたは離散モデルでなければなりません。

sys = feedback(sys1,sys2,feedin,feedout) は、feedinfeedout を使用して指定された入力接続と出力接続を使用して、閉ループ モデル sys を計算します。この構文は、MIMO システムの使用可能な I/O のサブセットにのみ接続する場合に使用します。

sys = feedback(sys1,sys2,'name') は、MIMO モデル sys1sys2 のそれぞれの I/O 名で指定されたフィードバック接続を使用して、閉ループ モデル sys を計算します。'name' フラグは、MIMO システムのセットにある必要なすべての I/O に正しい名前が付いている場合にのみ使用します。

sys = feedback(___,sign) は、sign で指定されたフィードバックのタイプをもつフィードバック ループのモデル オブジェクト sys を返します。既定では、feedback は負のフィードバックを想定し、feedback(sys1,sys2,-1) と等価になります。正のフィードバックを使用して閉ループ システムを計算するには、sign = +1 を使用します。

すべて折りたたむ

pendulumModelAndController.mat には、SISO 倒立振子伝達関数モデル G とその関連の PID コントローラー C が含まれています。

倒立振子とコントローラー モデルをワークスペースに読み込みます。

load('pendulumModelAndController','G','C');
size(G)
Transfer function with 1 outputs and 1 inputs.
size(C)
PID controller with 1 output and 1 input.

feedback を使用して GC で負のフィードバック ループを作成します。

sys = feedback(G*C,1)
sys =
 
         1.307e-06 s^3 + 3.136e-05 s^2 + 5.227e-06 s
  ---------------------------------------------------------
  2.3e-06 s^4 + 1.725e-06 s^3 - 4.035e-05 s^2 - 5.018e-06 s
 
Continuous-time transfer function.

sys は、負のフィードバックを使用して取得される結果の閉ループ連続時間伝達関数です。feedback は、PID コントローラー モデル C を伝達関数に変換してから、それを連続時間伝達関数モデル G に接続します。詳細については、モデル タイプを決定するルールを参照してください。

この例では、プラント G とコントローラー C をそれぞれ表す 2 つの伝達関数について考えます。

G(s)=2s2+5s+1s2+2s+3C(s)=5(s+2)s+10

プラントとコントローラーの伝達関数を作成します。

G = tf([2 5 1],[1 2 3],'inputname',"torque",'outputname',"velocity");
C = tf([5,10],[1,10]); 

feedback を使用して、GC を使用する負のフィードバック ループを作成します。

sys = feedback(G,C,-1)
sys =
 
  From input "torque" to output "velocity":
  2 s^3 + 25 s^2 + 51 s + 10
  ---------------------------
  11 s^3 + 57 s^2 + 78 s + 40
 
Continuous-time transfer function.

sys は、入力として torque および出力として velocity をもつ負のフィードバックを使用して取得された結果の閉ループ伝達関数です。

この例では、プラント G とコントローラー C をそれぞれ表す 2 つの伝達関数について考えます。

G(s)=2s2+5s+1s2+2s+3C(s)=5(s+2)s+10

プラントとコントローラーの伝達関数を作成します。

G = tf([2 5 1],[1 2 3],'inputname',"torque",'outputname',"velocity");
C = tf([5,10],[1,10]); 

feedback を使って、GC を使用する正のフィードバック ループを作成します。

sys = feedback(G,C,+1)
sys =
 
  From input "torque" to output "velocity":
  -2 s^3 - 25 s^2 - 51 s - 10
  ---------------------------
  9 s^3 + 33 s^2 + 32 s - 20
 
Continuous-time transfer function.

sys は、入力として torque および出力として velocity をもつ正のフィードバックを使用して取得された結果の閉ループ伝達関数です。

以下の図に基づいて、負のフィードバック ループで 2 つの入力と 2 つの出力を使用した 2 つの MIMO 伝達関数の接続について考えてみます。

この例では、rss を使用して 2 つのランダムな連続状態空間モデルを作成します。

G = rss(4,2,2);
C = rss(2,2,2);
size(G)
State-space model with 2 outputs, 2 inputs, and 4 states.
size(C)
State-space model with 2 outputs, 2 inputs, and 2 states.

feedback を使用して、上の図に従って負のフィードバック ループで 2 つの状態空間モデルを接続します。

sys = feedback(G,C,-1);
size(sys)
State-space model with 2 outputs, 2 inputs, and 6 states.

結果の状態空間モデル sys は、6 つの状態をもつ 2 つの入力、2 つの出力のモデルになります。負のフィードバック ループは次の状態で完成します。

  • G の 1 番目の出力が C の 1 番目の入力に接続される

  • G の 2 番目の出力が C の 2 番目の入力に接続される

mimoPlantAndController.mat では、2 つの入力、2 つの出力の伝達関数プラント モデル G および 2 つの入力、2 つの出力の伝達関数コントローラー モデル C が次のように接続されています。

最初に、プラント モデルとコントローラー モデルをワークスペースに読み込みます。

load('mimoPlantAndController.mat','G','C');
size(G)
Transfer function with 2 outputs and 2 inputs.
size(C)
Transfer function with 2 outputs and 2 inputs.

既定では、feedbackG の 1 番目の出力を C の 1 番目の入力に接続し、G の 2 番目の出力を C の 2 番目の入力に接続します。図に従ってプラントとコントローラーを接続するには、2 つのシステムの各 I/O に名前を付けて、正しく接続されるようにします。

G.InputName 
ans = 2x1 cell
    {'torque'}
    {'angle' }

G.OutputName
ans = 2x1 cell
    {'velocity'}
    {'force'   }

C.InputName
ans = 2x1 cell
    {'force'   }
    {'velocity'}

C.OutputName
ans = 2x1 cell
    {'angle' }
    {'torque'}

次に、feedback コマンドで 'name' フラグを使用して、I/O 名に従って接続を確立します。

sys = feedback(G,C,'name');

結果の閉ループ負のフィードバック伝達関数 sys には、フィードバック接続が必要な順序で作成されます。

5 つの入力と 4 つの出力をもつ状態空間プラント G、および 3 つの入力と 2 つの出力をもつ状態空間フィードバック コントローラー K を考えてみましょう。プラント G の出力 1、3、4 をコントローラー K の入力に接続し、コントローラー出力をプラントの入力 2 と 4 に接続しなければなりません。

feedback6-01.png

この例では、GK の両方に rss を使用して、ランダム化された連続時間状態空間モデルを生成します。

G = rss(3,4,5);
K = rss(3,2,3);

フィードバック ループで接続される入力と出力に基づいて feedout および feedin ベクトルを定義します。

feedin = [2 4];
feedout = [1 3 4];
sys = feedback(G,K,feedin,feedout,-1);
size(sys)
State-space model with 4 outputs, 5 inputs, and 6 states.

sys は、GK の指定された入力と出力を接続して取得される結果の閉ループ状態空間モデルです。

入力引数

すべて折りたたむ

フィードバック ループで接続されるシステム。動的システム モデルとして指定します。使用できる動的システムには次のようなものがあります。

  • tfzpkpidpidstdss モデルなどの連続時間または離散時間の数値 LTI モデル。

  • frd または genfrd などの周波数応答モデル。

  • genssuss (Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ ソフトウェアが必要です。)

    結果のフィードバック ループでは、次を仮定します。

    • 調整可能な制御設計ブロックについては調整可能なコンポーネントの現在値。

    • 不確かさをもつ制御設計ブロックについてはモデルのノミナル値。

詳細については、動的システム モデルを参照してください。

sys1sys2 が 2 つの異なるモデル タイプである場合、feedback は優先順位ルールを使用して、結果のモデル sys を決定します。たとえば、状態空間モデルと伝達関数がフィードバック ループで接続されている場合、結果のシステムは、優先順位ルールに基づく状態空間モデルになります。詳細については、モデル タイプを決定するルールを参照してください。

使用する入力のサブセット。ベクトルとして指定します。

図を見ると、feedin は MIMO プラント P の入力ベクトルのインデックスを含み、フィードバック ループに関連する入力 u のサブセットを指定しています。結果のモデル sysG と同じ入力をもち、その順序は保持されます。

例については、フィードバック ループでの入力および出力接続の指定を参照してください。

使用する出力のサブセット。ベクトルとして指定します。

feedout は、フィードバックで使われる MIMO プラント G の出力を指定します。結果のモデル sysG と同じ出力をもつことになり、その順番は保持されます。

例については、フィードバック ループでの入力および出力接続の指定を参照してください。

フィードバックのタイプ。負のフィードバックの場合は -1、正のフィードバックの場合は +1 を指定します。feedback は、既定では負のフィードバックを仮定します。

出力引数

すべて折りたたむ

閉ループ システム。SISO、または MIMO 動的システム モデルとして返されます。sys は、優先順位ルールに応じて次のいずれかになります。

  • tfzpksspidpidstd モデルなどの連続時間または離散時間の数値 LTI モデル。

  • genssuss (Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox ソフトウェアが必要です。)

sys1sys2 が 2 つの異なるモデル タイプである場合、feedback は優先順位ルールを使用して、結果のモデル sys を決定します。たとえば、フィードバック ループで状態空間モデルと伝達関数が接続されている場合、結果のシステムは、モデル タイプを決定するルールで説明する優先順位ルールに基づく状態空間モデルになります。

制限

  • フィードバック接続には、代数ループが存在していてはなりません。たとえば、D1 と D2sys1sys2 の直達行列である場合、この条件は以下と等価です。

    • 負のフィードバックを使用した場合、I + D1D2 は正則

    • 正のフィードバックの場合、I − D1D2 は正則

ヒント

  • 複雑なフィードバック構造には、appendconnect を使用します。

バージョン履歴

R2006a より前に導入