Main Content

結果の検証

この例では、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 = 97
Final: Soft = 1.15, Hard = -Inf, Iterations = 75
Final: Soft = 1.15, Hard = -Inf, Iterations = 109

結果の解釈

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 が返されます。f1fSoft の最初のエントリと一致し、H1 のピーク ゲインと一致することを確認できます。

[f1 fSoft(1) getPeakGain(H1,1e-6)]
ans =

    1.1476    1.1476    1.1476

システム応答の解析

要件の検証に加え、getIOTransfergetLoopTransfer を使用して基本的な開ループおよび閉ループの解析を実行できます。たとえば、調整されたシステム 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.99976, Iterations = 148
fSoft
fSoft =

    1.2843    1.2844

gHard
gHard =

    0.4663    0.9998

ここでは、fSoft に最初の 2 つの要件 (柔軟な制約) の最終的な値が含まれ、gHard に最後の 2 つの要件 (厳密な制約) の最終的な値が含まれます。gHard のすべてのエントリが 1 未満であるため、厳密な制約は満たされています。予想どおり、最初の 2 つの要件の最良の値は、オプティマイザーが 4 番目の要件を厳格に適用したため、上昇しています。