このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
遅延をもつモデルの線形化
この例では、遅延を含む Simulink® モデルを線形化する方法を示します。
遅延をもつ線形化されたモデルの操作の詳細については、むだ時間の指定および遅延をもつ制御システムの解析を参照してください。
連続遅延をもつモデルの線形化
次のいずれかのオプションを使用して、Transport Delay、Variable Transport Delay、Variable Time Delay などの連続時間遅延ブロックをもつ Simulink モデルを線形化できます。
遅延のパデ近似を使用し、線形化を介して有理線形システムを取得する。このオプションは、Simulink Control Design™ ソフトウェアで使用される既定の手法です。
遅延が正確に表現されている線形化を計算する。このオプションは、正確なシミュレーションや線形化モデルからの周波数応答が必要な場合とパデ近似の精度を評価する場合に使用します。
この例で使用するエンジン速度モデルを開きます。
model = 'scdspeed';
open_system(model)
サブシステム Induction to Power Stroke Delay に dM/dt という Variable Transport Delay ブロックが含まれています。このブロックへのパスを指定します。
DelayBlock = 'scdspeed/Induction to Power Stroke Delay/dM//dt delay';
1 次近似を使用して線形化を計算するには、パデ近似の次数を 1 に設定します。Variable Transport Delay ブロックの [パデ次数] プロパティを 1
にします。
あるいは、コマンド ラインで次のコードを入力します。
set_param(DelayBlock,'PadeOrder','1');
スロットル角を線形化の入力として指定し、エンジン速度を線形化の出力として指定します。
io(1) = linio('scdspeed/throttle (degrees)',1,'input'); io(2) = linio('scdspeed/rad//s to rpm',1,'output');
モデルを線形化します。
sysOrder1 = linearize(model,io);
2 次近似を使用してモデルを線形化するには、パデ次数を 2
に設定します。
set_param(DelayBlock,'PadeOrder','2'); sysOrder2 = linearize(model,io);
正確な遅延表現をもつ線形モデルを計算するには、線形化オプション オブジェクトを作成し、UseExactDelayModel
オプションを有効にします。
opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
指定した線形化オプションを使用してモデルを線形化します。
sysExactDiscrete = linearize(model,io,opt);
パデ近似モデルと正確な線形化モデルのボード応答を比較します。
p = bodeoptions('cstprefs'); p.Grid = 'on'; p.PhaseMatching = 'on'; p.XLimMode = {'Manual'}; p.XLim = {[0.1 1000]}; bode(sysOrder1,sysOrder2,sysExactDiscrete,p); legend('1st Order','2nd Order','Exact','Location','SouthWest')
1 次近似の場合、位相は約 50 rad/s で発散し始め、約 100 rad/s で発散します。
Simulink モデルを閉じます。
bdclose(model)
離散遅延をもつモデルの線形化
(Integer) Delay ブロックや Unit Delay ブロックなどの離散遅延ブロックをもつモデルを線形化する場合は、状態をモデルのダイナミクスに追加せずに、正確な遅延オプションを使用して遅延を考慮します。これらの遅延を明示的に考慮すると、モデル内の状態が少ないため、多数の離散遅延をもつシステムのシミュレーション性能が向上します。
20 の遅延状態をもつ Delay ブロックを含む離散システムの Simulink モデルを開きます。
model = 'scdintegerdelay';
open_system(model)
既定の設定では、線形化には、線形モデルに畳み込まれたすべての状態が含まれています。線形化の入力信号と出力信号を設定し、モデルを線形化します。
io(1) = linio('scdintegerdelay/Step',1,'input'); io(2) = linio('scdintegerdelay/Discrete Filter',1,'output'); sysDefault = linearize(model,io);
モデルのサイズを表示します。21 の状態 (1 - 離散フィルター、20 - 整数の遅延) が含まれています。
size(sysDefault)
State-space model with 1 outputs, 1 inputs, and 21 states.
正確な遅延表現を使用してモデルを線形化します。
opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
sysExactDiscrete = linearize(model,io,opt);
結果のモデルのサイズを表示します。状態は 1 つです。線形化モデルで遅延が内部的に考慮されています。
size(sysExactDiscrete)
State-space model with 1 outputs, 1 inputs, and 1 states.
ステップ応答を使用してモデルの性能を比較します。モデルの応答は同じになります。
step(sysDefault,sysExactDiscrete) legend('Default','Exact','Location','SouthEast')
Simulink モデルを閉じます。
bdclose(model)