メインコンテンツ

Simulink モデルでの可変サイズ信号の検証

可変サイズの信号の生成および操作

この例のモデルは、複数の固定サイズ信号および単一データ信号から可変サイズの信号を作成する方法を示します。可変サイズの信号に適用できる、いくつかの操作も示します。

可変サイズ信号をサポートしているブロックの完全な一覧については、可変サイズ信号の Simulink ブロック サポートを参照してください。

  1. MATLAB® コマンド ウィンドウで以下のように入力します。

    openExample('sldemo_varsize_basic')
    varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')

  2. Simulink® エディターの [デバッグ] タブで、[情報のオーバーレイ][信号の次元] を選択します。シミュレーションを実行するか、Ctrl - D キーを押します。

    Simulink エディターによって、信号次元とラインのスタイルが表示されます。信号線のスタイルの説明は、信号の基礎を参照してください。

  3. モデル内でブロックの名前を表示できるように、[書式設定] タブで、[自動][自動ブロック名の非表示] をオフにします。

sldemo_varsize_basic model.

固定サイズ信号からの可変サイズ信号の作成

可変サイズの信号を作成する 1 つの方法は、Switch ブロックの使用です。Switch ブロックの入力信号の次元数およびサイズには、さまざまなものがあります。

Create bounded variable-size input signals using a Switch block for sldemo_varsize_basic model.

Switch ブロックの出力は、最大サイズが 3x2 である 2 次元の可変サイズ信号です。Switch ブロックで [異なるデータの入力サイズを許可する] パラメーターを選択すると、Simulink は、Constant1 という名前の Constant ブロックからスカラー値を拡張しません。

可変サイズ信号データの保存

Matrix Concatenate ブロックの出力に接続された To Workspace ブロックにより、simout という名前の構造体にデータが保存されます。構造体配列の values フィールドに実際の信号値が記録されます。記録された信号データが最大サイズより小さい場合、値は NaN または適切な値で桁が揃えられます。これらの信号値を取得するには、次を入力します。

out.simout.signals.values

ans(:,:,1) =

     1    -1
    -2     2
    -3     3
     2     0
    -1     3
    -2     4


ans(:,:,2) =

     1    -1
    -2     2
    -3     3
     2     0
    -1     3
    -2     4


ans(:,:,3) =

     0   NaN
     1   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN


ans(:,:,4) =

     0   NaN
     1   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN


ans(:,:,5) =

     1    -1
    -2     2
    -3     3
     2     0
    -1     3
    -2     4


ans(:,:,6) =

     1    -1
    -2     2
    -3     3
     2     0
    -1     3
    -2     4


ans(:,:,7) =

     0   NaN
     1   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN


ans(:,:,8) =

     0   NaN
     1   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN


ans(:,:,9) =

     1    -1
    -2     2
    -3     3
     2     0
    -1     3
    -2     4


ans(:,:,10) =

     1    -1
    -2     2
    -3     3
     2     0
    -1     3
    -2     4


ans(:,:,11) =

     0   NaN
     1   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN
   NaN   NaN

valueDimensions フィールドは、可変サイズ信号の次元を記録します。次元を取得するには、次を入力します。

out.simout.signals.valueDimensions

最初の 3 つのタイム ステップの信号次元が示されます。

ans =

     6     2
     6     2
     2     1
     2     1
     6     2
     6     2
     2     1
     2     1
     6     2
     6     2
     2     1

単一データ信号からの可変サイズ信号の作成

データ信号 (Constant5) は、3x4 の行列です。Pulse Generator ブロックは、開始および終了のインデックス値 ([1 2] または [1 3]) を選択する制御信号を表します。Selector ブロックはインデックス値を使用して、各タイム ステップで各部のデータ信号を選択し、可変サイズ信号を出力します。

Create bounded variable-size input signals using a Selector block for sldemo_varsize_basic model.

信号サイズの変更の表示

Selector ブロックからの出力は、2x2 または 3x3 行列です。可変サイズの信号の最大次元はデータ信号の 3x4 行列であるため、記録された出力信号は、NaN を使用して桁が揃えられます。

可変サイズ信号の現在の次元および幅を確認するには、Probe または Width ブロックを使用します。また、To Workspace ブロックを使用し、Scope ブロックの可変サイズ信号を表示したり、可変サイズ信号をワークスペースに保存したりできます。

可変サイズ信号の処理

モデルの残りの部分は、可変サイズ信号で利用できるさまざまな演算を示しています。演算には、Gain ブロック、Sum ブロック、Math Function ブロック、Matrix Concatenate ブロックの使用が含まれます。可変サイズ信号は、From ブロック、Goto ブロック、Bus Assignment ブロック、Bus Creator ブロック、Bus Selector ブロックに接続できます。

可変サイズの信号長の調整

この例のモデルは、モデルが信号の長さを時間と共に適応させる仮のシステムに対応しています。長さの適応は、制御信号の値に基づきます。3 つの事前定義範囲の 1 つに制御信号が入る場合、固定サイズの元の信号は可変サイズ データ信号に変わります。

可変サイズ信号は処理ブロックに接続され、可変サイズ信号をサポートするブロックは演算を実行します。入力信号と出力信号の両方が可変サイズの MATLAB Function ブロックは、可変サイズ信号をサポートする他のブロックよりも高い柔軟性を実現します。可変サイズ信号の Simulink ブロック サポートを参照してください。

例のモデルを開くには、MATLAB コマンド ウィンドウで以下を入力します。

openExample('sldemo_varsize_dataLengthAdapt')

sldemo_varsize_dataLengthAdapt model.

モデル内でブロックの名前を表示できるように、[書式設定] タブで、[自動][自動ブロック名の非表示] をオフにします。

データ信号の長さの適応による、可変サイズ信号の作成

このモデルはデータ信号を生成し、その信号を可変サイズ信号に変換します。信号のサイズは、制御信号の値に基づきます。元のデータ信号は、19 の値をもつ列ベクトルです。

[1:9].'

ans =
     1
     2
     3
     4
     5
     6
     7
     8
     9
Size Selection サブシステムは、データ信号の特性を判定し、特性値 (1、2、または 3) を出力します。この値は、Length Adaptation サブシステムでデータ信号の長さを選択するのに役立ちます。

Contents of Size Selection subsystem inside sldemo_varsize_dataLengthAdapt model.

Length Adaptation サブシステムでは、Size Selection サブシステムの特性値 (In2) に基づき、Signal Size サブシステムがインデックスを生成します。Data Selector ブロックは開始と終了のインデックスを使用してデータ信号 (In1) の長さを調整し、可変サイズ信号を出力します。

Contents of Length Adaption subsystem inside sldemo_varsize_dataLengthAdapt model.

可変サイズ信号の処理

モデルの中央部分は、可変サイズ信号を処理します。MATLAB Function ブロックは、信号のアップサンプリングと同様の方法で、データ値の間にゼロを追加します。信号の次元は、9 から 18 に変わります。Math Function ブロックは、可変サイズ信号で使用できるさまざまな操作を行います。

Contents of Process subsystem inside sldemo_varsize_dataLengthAdapt model. This subsystem contains blocks that perform arithmetic operations on the variable-size signals.

可変サイズ信号の可視化

モデルの右の部分は、信号の幅 (サイズ) を判定し、スコープを使用して幅および処理済みデータ信号を可視化します。

モード依存の可変サイズ信号

この例のモデルは、3 つの演算モードを備えたシステムを示します。モードによって、処理するデータ信号のサイズは異なります。

このモデルの Process サブシステムは可変サイズ信号を受け取ります。信号のサイズは、システムの演算モードによって異なります。モードが変更されるたびに、Stateflow® チャートの Mode Control Logic は、データ信号のサイズの変化を検出します。その後、Process サブシステム内のブロックをリセットするための関数呼び出しを生成します。

モデルを開くには、MATLAB コマンド ウィンドウで以下を入力します。

openExample('sldemo_varsize_multimode')

モデル内でブロックの名前を表示できるように、[書式設定] タブで、[自動][自動ブロック名の非表示] をオフにします。

モードに基づく可変サイズ信号の作成

Mode Selection サブシステムは、データ信号の処理モードを決定し、モード値 (1、2、または 3) を出力します。この値は、Size Selection サブシステムと Data サブシステムを使用してデータ信号の長さを選択するのに役立ちます。

Size Selection サブシステムはモード値からインデックス値を作成します。この例では、インデックス値は、[1 3][1 2]、および [1 1] です。

Data サブシステムはデータ信号 (Constant ブロック) を受け取り、モードに基づいてデータ信号の部分を選択します。出力は、最大サイズが 3x32x2、および 1x1 である可変サイズ信号です。

元のデータ信号 (Constant ブロック) の次元は、3x3 です。To Workspace ブロックを信号線に接続した後、次のように入力すると、MATLAB コマンド ウィンドウで信号を表示できます。

simout.signals.values

ans(:,:,1) =

     1     4     7
     2     5     8
     3     6     9

Data サブシステムから生成された可変サイズ信号も、3x3 の行列です。桁が短い行は、NaN による桁揃えが行われます。

simout.signals.values

ans(:,:,1) =

     1   NaN   NaN
   NaN   NaN   NaN
   NaN   NaN   NaN


ans(:,:,2) =

     1     4   NaN
     2     5   NaN
   NaN   NaN   NaN


ans(:,:,3) =

     1     4     7
     2     5     8
     3     6     9

条件付き実行サブシステムでの可変サイズ信号の処理

Process サブシステムには Delay ブロックが含まれているため、このサブシステムはタイム ステップごとに信号をリセットして再伝播します。このモデルは、Stateflow チャートを使用して信号サイズの変化を検出し、Process サブシステムをリセットします。

Function ブロックのダイアログの [可変サイズの信号のサイズを伝播] リストから、[イネーブルのときのみ] を選択します。モデルがこのサブシステムをイネーブルにしている場合、このオプションを選択すると、Simulink は、条件付き実行サブシステム内の可変サイズ信号を伝播します。信号サイズは、ディセーブルからイネーブルに切り替わるときにのみ変化します。状態を含むブロックでの信号サイズの変化の処理方法の詳細は、可変サイズの信号の伝播方法を参照してください。

Stateflow チャートは、信号のサイズに変化があるかどうかを判断します。関数 size_detect はタイム ステップごとに可変サイズ信号の幅を計算し、現在の幅と以前の幅とを比較します。信号のサイズに変化がある場合、このチャートは関数呼び出し出力イベントを出力し、Process サブシステム内で信号サイズをリセットして再伝播します。

データの可視化

Probe ブロックを使用し、信号のサイズおよび次元を可視化します。

信号は、n x n 行列であるため、信号の次元のラインはスコープ表示でオーバーラップします。

Display ブロックと Simulink デバッガーを使用すると、タイム ステップごとに信号値を可視化できます。

可変サイズ信号を使用する S-Function

可変サイズ信号を使用する Level-2 MATLAB S-Function

出力端子の DimensionsModeVariable に設定する場合、Level-2 MATLAB S-Function と C S-Function はどちらも可変サイズ信号をサポートします。また、入力および出力の更新メソッドの入力信号および出力信号の現在の次元も考慮する必要があります。

この例のモデルを開くには、MATLAB コマンド ウィンドウで以下を入力します。

msfcndemo_varsize

Enabled Subsystem には、リセットされるまで状態を保持するブロックを実装する方法を示す、Level-2 MATLAB S-Function が含まれます。このブロックには状態が含まれていて入力信号を遅らせるため、リセット発生時に入力サイズが変化することがあります。

Expand ブロックは、スカラー入力を受け取り、入力値により示された長さのベクトルを出力する、Level-2 MATLAB S-Function です。出力は 1:n です。ここで、n は入力値です。

可変サイズ信号を使用する C S-Function

この例のモデルを開くには、MATLAB コマンド ウィンドウで以下を入力します。

sfcndemo_varsize

Enabled Subsystem には、2 つの S-Function が含まれます。

  • sfun_varsize_holdStatesUntilReset は、状態をもち、入力信号のサイズが変化するたびにその DWorks ベクトルをリセットする必要がある C S-Function です。

  • sfun_varsize_concat1D は、方向性をもたない 2 つのベクトルの連結を実装する C S-Function です。この関数は、Enabled Subsystem 内で単独で使用できます。

参考

トピック