結果の検証
この例では、systune
からの調整結果を解釈して検証する方法を説明します。
背景
systune
または looptune
を使って、制御システムのパラメーターを調整することができます。設計仕様は TuningGoal
要件オブジェクトを使って取得されます。この例では、systune
からの結果を解釈し、設計要件をグラフで確認して、開ループおよび閉ループの追加の解析を実行する方法を説明します。
systune によるコントローラーの調整
例として自動操縦調整の適用例を使用します。詳細については、「2 ループ自動操縦の調整」の例を参照してください。調整された補償器は、次のモデルの中でオレンジ色で強調表示されている "MIMO Controller" ブロックです。
open_system('rct_airframe2')
完全性のために次の設定と調整手順が繰り返されます。
ST0 = slTuner('rct_airframe2','MIMO Controller'); % Compensator parameterization C0 = tunableSS('C',2,1,2); C0.D.Value(1) = 0; C0.D.Free(1) = false; setBlockParam(ST0,'MIMO Controller',C0) % Requirements Req1 = TuningGoal.Tracking('az ref','az',1); % tracking Req2 = TuningGoal.Gain('delta fin','delta fin',tf(25,[1 0])); % roll-off Req3 = TuningGoal.Margins('delta fin',7,45); % margins MaxGain = frd([2 200 200],[0.02 2 200]); Req4 = TuningGoal.Gain('delta fin','az',MaxGain); % disturbance rejection % Tuning Opt = systuneOptions('RandomStart',3); rng('default') [ST1,fSoft] = systune(ST0,[Req1,Req2,Req3,Req4],Opt);
Final: Soft = 1.51, Hard = -Inf, Iterations = 52 Final: Soft = 1.15, Hard = -Inf, Iterations = 125 Final: Soft = 1.15, Hard = -Inf, Iterations = 76 Final: Soft = 1.15, Hard = -Inf, Iterations = 120
結果の解釈
systune
は 3 つの異なる開始点から 3 つの最適化を実行して、全体的に最良な結果を返しました。最初の出力 ST
は、調整された制御システムを表す slTuner
インターフェイスです。2 番目の出力 fSoft
には、最良の設計に対する 4 つの要件の最終的な値が含まれます。
fSoft
fSoft = 1.1476 1.1476 0.5461 1.1476
要件は、その値が 1 未満である場合にのみ満たされるように正規化されます。fSoft
の検査によって、要件 1、2、4 はアクティブで若干違反していますが、要件 3 (安定余裕) は満たされていることがわかります。
要件の検証
各要件をグラフで検査するには viewGoal
を使用します。これは、小さい違反が受け入れられるかどうかまたは大きな違反の原因を理解するのに役立ちます。最初に、追従要件を確認します。
viewGoal(Req1,ST1)
周波数にわずかな違反があり、設定点の追従が予測に近づいて実行されることを示唆しています。同様に、外乱の抑制要件を確認します。
viewGoal(Req4,ST1) legend('location','NorthWest')
違反の多くは 35 rad/s 近くの小さなバンプを含む低周波数で生じ、この周波数で減衰振動が見られる可能性を示唆しています。最後に、安定余裕要件を確認します。
viewGoal(Req3,ST1)
この要件はすべての周波数で満たされ、最小の余裕は予想どおり交差周波数の近くで実現されています。
要件の評価
evalGoal
を使用して各要件を評価する、つまり柔軟な制約と厳密な制約へのその寄与を計算することもできます。以下に例を示します。
[H1,f1] = evalGoal(Req1,ST1);
この場合は、要件の値 f1
と、その計算に使用される基となる周波数重み付け伝達関数 H1
が返されます。f1
が fSoft
の最初のエントリと一致し、H1
のピーク ゲインと一致することを確認できます。
[f1 fSoft(1) getPeakGain(H1,1e-6)]
ans = 1.1476 1.1476 1.1476
システム応答の解析
要件の検証に加え、getIOTransfer
と getLoopTransfer
を使用して基本的な開ループおよび閉ループの解析を実行できます。たとえば、調整されたシステム ST1
のステップ コマンド azref
への応答 az
をプロットして、時間領域での追従性能を確認します。
T = ST1.getIOTransfer('az ref','az'); step(T)
また、プラント入力 delta fin
で測定された開ループ応答もプロットします。このプロットを使用して、プラント入力における標準型のゲイン余裕と位相余裕を評価できます。
L = ST1.getLoopTransfer('delta fin',-1); % negative-feedback loop transfer margin(L) grid
柔軟な要件と厳密な要件
ここまでは、目的関数の 4 つのすべての要件を同等に扱ってきました。他にも、柔軟な制約と厳密な制約を組み合わせて使用して、必須要件とあるとよい要件を区別できます。たとえば、要件 3、4 を厳密な制約として扱い、これらの制約に従って最初の 2 つの要件を最適化します。最良の結果を得るには、すべての要件が同等に扱われる妥当な設計を取得した後にのみこの処理を行います。
[ST2,fSoft,gHard] = systune(ST1,[Req1 Req2],[Req3 Req4]);
Final: Soft = 1.28, Hard = 0.99979, Iterations = 158
fSoft
fSoft = 1.2598 1.2837
gHard
gHard = 0.4669 0.9998
ここでは、fSoft
に最初の 2 つの要件 (柔軟な制約) の最終的な値が含まれ、gHard
に最後の 2 つの要件 (厳密な制約) の最終的な値が含まれます。gHard
のすべてのエントリが 1 未満であるため、厳密な制約は満たされています。予想どおり、最初の 2 つの要件の最良の値は、オプティマイザーが 4 番目の要件を厳格に適用したため、上昇しています。