Main Content

システムおよびサブシステム内のサンプル時間

純粋な離散システム

純粋な離散システムは、離散ブロックのみで構成されており、固定ステップ ソルバーまたは可変ステップ ソルバーを使用してモデル作成できます。離散システムのシミュレーションでは、シミュレーターがサンプル時間ヒットごとにシミュレーションのステップを取る必要があります。マルチレート離散システム、つまり Simulink® のブロックが異なるレートでサンプリングするシステムでは、ステップはシステムの各サンプル時間の整数倍で発生しなければなりません。そうでない場合、シミュレーターはシステムの状態において重要な遷移を失うことがあります。Simulink ソフトウェアが選択するステップ サイズは、マルチレート システムのシミュレーションに使用するソルバーのタイプと基本サンプル時間により異なります。

マルチレート離散システムの基本サンプル時間は最大倍精度数であり、システムの実際のサンプル時間の最大公約数です。たとえば、システムのサンプル時間が 0.25 秒と 0.50 秒であるとします。この場合の基本サンプル時間は、0.25 秒です。また、サンプル時間が 0.50 秒と 0.75 秒であるとします。この場合も基本サンプル時間は 0.25 秒です。

基本サンプル時間の重要性は、Simulink ソフトウェアが固定ステップまたは可変ステップのどちらの離散ソルバーを使用してマルチレート離散システムを解くかに直接関係します。固定ステップ ソルバーは、シミュレーションのステップ サイズを離散システムの基本サンプル時間と等しくなるように設定します。一方、可変ステップ ソルバーは、実際のサンプル時間ヒット間の距離に等しくなるようにステップ サイズを変化させます。

次の図は、固定ステップ ソルバーと可変ステップ ソルバーの違いを示しています。

図中で、矢印はシミュレーション ステップを示し、円はサンプル時間ヒットを表します。図が示すように、基本サンプル時間がシミュレーションの対象となるシステムの実際のサンプル時間よりも短い場合、可変ステップ ソルバーがシステムをシミュレートするのに必要なシミュレーション ステップは少なくなります。一方、固定ステップ ソルバーは、システムのサンプル時間が基本サンプル時間である場合、実装のために要するメモリ量が少なく、高速になります。これは、(Simulink Coder™ を使った) Simulink モデルからのコード生成を伴うアプリケーションにおいては、利点となります。どちらの場合でも、Simulink が提供する離散ソルバーは、離散システムに対して最適化されています。ただし、どのソルバーを使用しても純粋な離散システムをシミュレートし、同等の結果を得ることができます。

次の単純なマルチレート システムの例を見てください。この例で、DTF1 Discrete Transfer Fcn ブロックのサンプル時間[1 0.1] に設定され、これにより 0.1 のオフセットが与えられます。DTF2 Discrete Transfer Fcn ブロックのサンプル時間0.7 に設定され、オフセットはありません。ソルバーは可変ステップの離散ソルバーに設定されます。

シミュレーションを実行し、その出力に関数 stairs を使用して、

set_param(bdroot,'SolverType','Variable-Step','SolverName','VariableStepDiscrete','SaveFormat','Array');
simOut = sim(bdroot,'Stoptime','3');
stairs(simOut.tout,simOut.yout,'-*','LineWidth',1.2);
xlabel('Time (t)');
ylabel('Outputs (out1,out2)');
legend('t_s = [1, 0.1]','t_s = 0.7','location','best')

次のプロットを作成します。

(sim コマンドの詳細については、プログラムによるシミュレーションの実行を参照してください。)

図が示すように、DTF1 ブロックには 0.1 のオフセットがあるので、DTF1 ブロックは t = 0.1 になるまで出力を生成しません。同様に、伝達関数の初期条件はゼロなので、DTF1 の出力 y(1) はこの時間まではゼロです。

ハイブリッド システム

ハイブリッド システムは離散ブロックと連続ブロックの両方を含んでいるので、離散状態と連続状態の両方をもちます。ただし、Simulink ソルバーは連続サンプル時間と離散サンプル時間の両方をもつシステムすべてをハイブリッド システムとして取り扱います。ハイブリッド システムのモデル化の詳細については、ハイブリッド システムのモデル化を参照してください。

ブロック線図でのハイブリッドという用語は、ハイブリッド システム (連続および離散混在システム) と、複数のサンプル時間をもつシステム (マルチレート システム) の両方に適用されます。[サンプル時間の表示] の [色] を [on] にして [ブロック線図の更新] を実行すると、このようなシステムは黄色で表示されます。例として、Atomic サブシステム "discrete cruise controller" とバーチャル サブシステム "car dynamics" をもつ次のモデルを考えてみましょう。

自動車モデル

[サンプル時間] オプションを [すべて] に設定して [ブロック線図の更新] を実行すると、バーチャル サブシステムはハイブリッド サブシステムであることを示す黄色で表示されます。この場合、サブシステムには連続と離散の両方のサンプル時間が含まれているので、これは真のハイブリッド システムです。以下に示すように、離散入力信号 D1 は、連続速度信号 v と組み合わされて Integrator への連続入力を生成します。

モデルの更新後の自動車モデル

モデルの更新後の Car Dynamics サブシステム

次に、3 つの Sine Wave ソース ブロックをもつマルチレート サブシステムを考えてみましょう。これらのブロックは、それぞれ 0.2、0.3、および 0.4 の固有のサンプル時間をもっています。

モデルの更新後のマルチレート サブシステム

このサブシステムには 1 つを超えるサンプル時間が含まれているので、[ブロック線図の更新] を実行すると、黄色で表示されます。ブロック線図に示されているように、Sine Wave ブロックには離散サンプル時間の D1、D2、および D3 が存在し、出力信号はマイナー ステップで固定されています。

複数のサンプル時間に関してシステムを評価する際、Simulink では定数 [inf, 0] または非同期 [–1, –n] サンプル時間を考慮に入れません。したがって、定数値を出力する 1 つのブロックと離散サンプル時間をもつ 1 つのブロックで構成されるサブシステムは、ハイブリッドとして指定されません。

ハイブリッドの注釈と色付けは、モデル内のサブシステムが正しいサンプル時間または予期されるサンプル時間を継承しているかどうかを評価する上で非常に役立ちます。

サブシステム内のサンプル時間

サブシステムには、以下の 2 つのカテゴリがあります。Triggered と Non-Triggered です。Triggered Subsystem では、一般的にサブシステムのサンプル時間はトリガー信号から取得されます。1 つの例外は、Trigger ブロックを使用して、Triggered Subsystem を作成する場合です。ブロックの [トリガー タイプ][関数呼び出し] に設定し、[サンプル時間タイプ][周期的] に設定すると、SampleTime パラメーターがアクティブになります。この場合は、"ユーザー" が Trigger ブロックのサンプル時間を指定します。それによって、サブシステムのサンプル時間が確立されます。

Non-Triggered Subsystem には次の 4 つの種類があります。

  • バーチャル

  • Enabled

  • Atomic

  • アクション

Simulink は、バーチャル サブシステムおよび Enabled Subsystem のサンプル時間を、それらの内容のそれぞれのサンプル時間を基準として計算します。

Atomic Subsystem は、サブシステムのブロックに SystemSampleTime パラメーターが含まれている特殊なケースです。さらに、–1 の既定値以外のサンプル時間に対し、Atomic Subsystem 内のブロックは、Inf の値、–1、またはサブシステムの SampleTime パラメーターの同一 (離散) 値のみをもつことができます。Atomic Subsystem が継承のまま残されている場合、Simulink ではバーチャル サブシステムや Enabled Subsystem と同じようにブロックのサンプル時間を計算します。ただし、サブシステムの SampleTime パラメーターの主な目的は、Atomic Subsystem 内で、すべて継承に設定されている多数のブロックを同時に指定できるようにすることです。Atomic Subsystem で設定されたサンプル時間を取得するには、コマンド プロンプトで次のコマンドを使用します。

get_param(AtomicSubsystemBlock,‘SystemSampleTime’);

最後に、Action Subsystem のサンプル時間は If ブロックまたは Switch Case ブロックによって設定されます。

異なるサンプル レートが指定されたブロックを含む Non-Triggered Subsystem の場合、Simulink は、サブシステムのコンパイルされたサンプル時間を、サブシステムに存在するすべてのサンプル レートの cell 配列として返します。これを確認するには、MATLAB プロンプトで get_param コマンドを使用します。

get_param(subsystemBlock,'CompiledSampleTime')

関連するトピック