ブロックの線形化の拡張
以下の例では、ブロックの線形化を指定する関数を使用して、追加のむだ時間ダイナミクスでブロックの線形化を拡張する方法を説明します。
Simulink モデルを開きます。
mdl = 'scdFcnCall';
open_system(mdl)
このモデルには、連続時間プラントおよび離散時間コントローラーが含まれます。D/A ブロックは、0.1 秒のサンプル時間でプラント出力を離散化します。External Scheduler ブロックは、同じ時間で実行するようにコントローラーをトリガーします。しかし、トリガーは離散化されたプラント出力に相対して、0.05 秒のオフセットをもちます。この理由により、コントローラーは変化が発生してから 0.05 秒経過するまで基準信号における変化を処理しません。このオフセットは、0.05 秒のむだ時間をモデルに導入しています。
Controller ブロックの線形化を指定せずに、モデル操作点で閉ループ モデルを線形化します。
io = getlinio(mdl); sys_nd = linearize(mdl,io);
周波数応答推定による線形化結果をチェックします。
input = frest.Sinestream(sys_nd); sysest = frestimate(mdl,io,input); bode(sys_nd,'g',sysest,'r*',{input.Frequency(1),input.Frequency(end)}) legend('Linearization without delay',... 'Frequency response estimation','Location','southwest')
正確な線形化では、コントローラー実行オフセットによって導入されたむだ時間が考慮されません。特に高周波数では、線形化されたモデルと推定されたモデルとの間に結果の相違が生じます。
むだ時間が含まれる Controller ブロックの線形化を指定する関数を作成します。この例では、scdAddDelayFcn.m
で指定されている線形化を使用します。
function sys = scdAddDelayFcn(BlockData) sys = BlockData.BlockLinearization*thiran(0.05,0.1); end
関数への入力 BlockData
は、ソフトウェアがブロックを線形化するたびに自動的に作成する構造体です。ブロックの線形化コンフィギュレーション関数を指定すると、ソフトウェアによって BlockData
が自動的に関数に渡されます。フィールド BlockLinearization
には現在のブロックの線形化が含まれています。
このコンフィギュレーション関数は、むだ時間を Thiran フィルターとして近似します。フィルターは、0.5 秒のサンプル期間の非整数むだ時間について離散時間の近似値を示します (0.05 秒の遅延は 0.1 秒のサンプル時間をもちます)。
scdAddDelayFcn
を Controller ブロックの線形化として指定します。
Controller ブロックを右クリックし、[線形解析]、[選択したブロック線形化を指定] を選択します。
[ブロックの線形化の指定] ダイアログ ボックスで、[次のいずれかを使用してブロックの線形化を指定] を選択します。
ドロップダウン リストで
[Configuration Function]
を選択します。テキスト ボックスに関数名「
scdAddDelayFcn
」を入力します。この関数は追加パラメーターをもたないため、パラメーター テーブルは空白のままにします。[OK] をクリックします。
あるいは、次のコードを使用してコンフィギュレーション関数をプログラムで指定できます。
block = 'scdFcnCall/Controller'; set_param(block,'SCDEnableBlockLinearizationSpecification','on') rep = struct('Specification','scdAddDelayFcn',... 'Type','Function',... 'ParameterNames','',... 'ParameterValues',''); set_param(block,'SCDBlockLinearizationSpecification',rep)
拡張されたブロックの線形化を使用してモデルを線形化します。
sys_d = linearize(mdl,io);
遅延が含まれる線形化と、推定された周波数応答を比較します。
bode(sys_d,'b',sys_nd,'g',sysest,'r*',... {input.Frequency(1),input.Frequency(end)}) legend('Linearization with delay','Linearization without delay',... 'Frequency response estimation','Location','southwest')
これで、拡張されたブロックの線形化を使用して取得された線形モデルはむだ時間を考慮します。この線形モデルは、モデルの実際の周波数応答により厳密に一致します。