Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

マルチレート モデルの線形化

Simulink® Control Design™ ソフトウェアを使用して、異なるサンプル時間をもつブロックを含む Simulink モデルを線形化することができます。既定では、線形化ツールは以下を行います。

  • ゼロ次ホールド変換メソッドを使用してサンプル時間を変換する。

  • 線形化パス上のブロックの最大サンプル時間に等しいサンプル時間をもつ、線形化モデルを作成する。

線形化のオプションを指定することで、どちらかの動作を変更することができ、これは線形化の結果に影響します。

線形モデルのサンプル時間の変更

既定では、サンプル時間はモデルの非ゼロのサンプル時間の最小公倍数に設定されます。このレートでは、モデルのすべてのレートに対してダウンサンプリングが正確になります。既定のサンプル時間がアプリケーションに適さない場合には他のサンプル時間を指定できます。

モデル線形化器で線形モデルのサンプル時間を指定するには、次を行います。

  1. [線形解析] タブで [追加オプション] をクリックします。

  2. [正確な線形化のオプション] ダイアログ ボックスの [線形化] タブで、[サンプル時間の入力 (秒)] フィールドにサンプル時間を指定します。次のいずれかの値を指定できます。

    • -1 — サンプル時間をモデルの非ゼロのサンプル時間の最小公倍数に設定します。

    • 0 — 連続時間モデルを作成します。

    • 正のスカラー — 指定された値をサンプル時間として使用します。

コマンド ラインで線形モデルのサンプル時間を指定するには、linearizeOptions オプション セットを作成し、SampleTime オプションを設定します。

opt = linearizeOptions;
opt.SampleTime = 0.01; 

その後、このオプション セットを linearize または slLinearizer で使用できます。

線形化レート変換メソッドの変更

複数のサンプル時間をもつモデル (連続プラントのある離散コントローラーなど) を線形化する場合、ソフトウェアはレート変換アルゴリズムを使ってシングルレートの線形モデルを生成します。既定のレート変換メソッドは、ゼロ次ホールドです。

モデル線形化器でレート変換メソッドを指定するには、次を行います。

  1. [線形解析] タブで [追加オプション] をクリックします。

  2. [正確な線形化のオプション] ダイアログ ボックスの [線形化] タブで、[レート変換メソッドの選択] ドロップダウン リストから次のいずれかのレート変換メソッドを選択します。

    レート変換メソッド使用時
    ゼロ次ホールド階段型入力の時間領域で連続ダイナミクスの正確な離散化が必要です。
    双一次 (Tustin) 変換連続時間システムと対応する離散化システムの間、または元のシステムとリサンプリングしたシステムの間で、周波数領域の適切な一致が必要です。
    プリワーピング付き双一次 (Tustin) 変換連続時間システムとそれに対応する離散化システムの間、または元のシステムとリサンプリングしたシステムの間で、特定周波数での周波数領域の適切な一致が必要です。
    アップサンプリング、不可の場合はゼロ次ホールド
    アップサンプリング、不可の場合は双一次 (Tustin)
    アップサンプリング、不可の場合はプリワーピング付き双一次
    可能な場合は、離散状態をアップサンプリングして、アップサンプリングされたダイナミクスのゲインと位相を確実に一致させてください。アップサンプリングを使用できるのは、新しいサンプル時間が元のシステムのサンプル時間の整倍数のときだけです。それ以外の場合、代替のレート変換メソッドが使用されます。
  3. 次のどちらかのレート変換メソッドを選択した場合:

    • プリワーピング付き双一次 (Tustin) 変換

    • アップサンプリング、不可の場合はプリワーピング付き双一次

    [プリワープ周波数の入力] フィールドにプリワープ周波数を指定します。

コマンド ラインでレート変換メソッドを指定するには、linearizeOptions オブジェクトを作成し、RateConversionMethod オプションと PreWarpFreq オプションを設定します。

opt = linearizeOptions;
opt.RateConversionMethod = 'prewarp';
opt.PreWarpFreq = 100;

その後、このオプション オブジェクトを linearize または slLinearizer で使用できます。

メモ

ゼロ次ホールド以外のレート変換メソッドを使用する場合、変換後の状態は、元の状態と異なる物理的意味をもちます。そのため、結果の LTI システムで状態名は '?' になります。

マルチレートの線形化アルゴリズム

この例では、Simulink® Control Design™ ソフトウェアでマルチレートの非線形 Simulink モデルの線形化に使用されるアルゴリズムを示します。

概念を説明するために、この例では Control System Toolbox™ の関数を使用した線形化プロセスを示します。その後、関数linearizeを使用して同じプロセスを繰り返します。

scdmrate Simulink モデルには、さまざまなサンプル時間をもつ 5 つのブロックが含まれています。このモデルの線形システムの形式は、いずれも零点-極-ゲインです。

  • sysC - 連続時間線形時不変 (LTI) システム

  • Integrator - 連続時間積分器

  • sysTs1 - サンプル時間 0.01 秒の離散時間 LTI システム

  • sysTs2 - サンプル時間 0.025 秒の離散時間 LTI システム

  • Zero-Order Hold - 入力信号を 0.01 秒でサンプリングするブロック

sysC = zpk(-2,-10,0.1);
Integrator = zpk([],0,1);
sysTs1 = zpk(-0.7463,[0.4251 0.9735],0.2212,0.01);
sysTs2 = zpk([],0.7788,0.2212,0.025);

scdmrate モデルを表示します。

open_system('scdmrate')

この例では、Constant ブロックの出力と sysTs2 ブロックの出力の間のモデルを線形化します。

個々のブロックの線形化

線形化プロセスの最初の手順として、モデル内の各ブロックを線形化します。Saturation ブロックと Zero-Order Hold ブロックの線形化のゲインは 1 です。LTI ブロックは既に線形であるため、これらは変更されません。

線形化されたブロックをもつ更新されたモデルを表示します。

open_system('scdmratestep1')

レート変換の実行

モデル内のブロックで異なるサンプル時間が使用されているため、システムのシングルレート線形化モデルを作成するには、最初にさまざまなサンプル レートを代表的な単一のレートに変換する必要があります。

関数 linearize は、反復レート変換メソッドを使用します。反復は、モデル内のサンプル時間の最小公倍数で開始されます。この例では、サンプル時間は、0 秒、0.01 秒、および 0.025 秒で、最小公倍数は 0.05 です。

レート変換の最初の反復で、最速のサンプル レートをもつブロックの組み合わせが 2 番目に速いサンプル レートでリサンプリングされます。この例では、最初の反復で、ゼロ次ホールドの連続から離散への変換を使用して、線形化された連続時間ブロック sysCIntegrator の組み合わせが 0.01 のサンプル時間に変換されます。

sysC_Ts1 = c2d(sysC*Integrator,0.01);

sysC ブロックと Integrator ブロックが sysC_Ts1 に置き換えられました。

open_system('scdmratestep2')

次の反復で、0.01 のサンプル時間をもつすべてのブロックを 0.025 のサンプル時間に変換します。この例では、サンプル レートが 0.01 のすべてのブロックで閉ループ システムが形成されます。そのため、それらのサンプル レートを変換する前に、線形化アルゴリズムで閉ループ システムの応答が計算されます。

sysCL = feedback(sysTs1*sysC_Ts1,1);

次に、ゼロ次ホールド メソッドで、閉ループ システムのサンプル時間が 0.01 秒から 0.025 に変換されます。

sysCL_Ts2 = d2d(sysCL,0.025);

システム sysCL_Ts2 によってモデル内のフィードバック ループが置き換えられます。

open_system('scdmratestep3')

最後の反復で、閉ループ システムと sysTs2 ブロックの組み合わせのサンプル時間が 0.025 秒から 0.05 秒にリサンプリングされます。

sys1 = d2d(sysCL_Ts2*sysTs2,0.05)
sys1 =
 
   0.0001057 (z+22.76) (z+0.912) (z-0.9048) (z+0.06495)
  -------------------------------------------------------
  (z-0.01373) (z-0.6065) (z-0.6386) (z-0.8588) (z-0.9754)
 
Sample time: 0.05 seconds
Discrete-time zero/pole/gain model.

Simulink Control Design の関数を使用したモデルの線形化

マルチレート モデルを線形化するためのこの反復処理は、関数 linearize で実装されます。

モデルを線形化するには、最初に線形化の入力ポイントと出力ポイントを指定します。

io(1) = linio('scdmrate/Constant',1,'input');
io(2) = linio('scdmrate/sysTs2',1,'openoutput');

モデルを線形化し、結果の状態空間モデルを零点-極-ゲイン形式に変換します。

sys2 = zpk(linearize('scdmrate',io))
sys2 =
 
  From input "Constant" to output "sysTs2":
   0.0001057 (z+22.76) (z+0.912) (z-0.9048) (z+0.06495)
  -------------------------------------------------------
  (z-0.6065) (z-0.6386) (z-0.8588) (z-0.9754) (z-0.01373)
 
Sample time: 0.05 seconds
Discrete-time zero/pole/gain model.

このモデルは手動で計算されたモデルと一致します。

bode(sys1,sys2)

参考

アプリ

関数

関連するトピック