ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

n-D Lookup Table

ライブラリ

Lookup Tables

説明

サポートされているブロック演算

n-D Lookup Table ブロックは、N 個の変数で関数のサンプル値表現を評価します。

関数 F は経験的なものです。このブロックは、ブロックのパラメーターで定義した値のテーブルの検索または内挿により、入力を出力値にマップします。このブロックは内挿法として、フラット (定数)、線形、3 次スプラインをサポートしています。これらの方法は、1 ~ 30 の任意の次元のテーブルに適用できます。

次のブロックでは、最初の入力は最初の次元 (行) ブレークポイントのブレークポイントを、2 番目の入力は 2 番目の次元 (列) のブレークポイントをというように、識別します。

可変のブロック方向に対する端子の順番の詳細は、Simulink® ドキュメンテーションの「ブロックの回転方法」を参照してください。

ブレークポイントとテーブル データの指定

以下のブロック パラメーターはブレークポイントとテーブル データを定義します。

ブロック パラメーター目的
テーブルの次元数ルックアップ テーブルの次元数を指定します。
ブレークポイントルックアップ テーブルの各次元に対応するブレークポイント ベクトルを指定します。
テーブル データ関連する出力値のセットを定義します。

ブロックでの出力の生成方法

n-D Lookup Table ブロックはその入力値に基づき、テーブル値をルックアップまたは推定することにより、ブロックの出力を生成します。

ブロックの入力n-D Lookup Table ブロック
ブレークポイント データセットのインデックスの値と一致する場合は行と列、および高次元のブレークポイントの交差部の表の値を出力します。
ブレークポイント データセットのインデックスの値とは一致しませんが、範囲内です選択した [内挿法] を使用して適切な表の値を内挿します。
ブレークポイント データセットのインデックスの値とは一致せず、範囲外です。選択した [外挿方法] を使用して出力値を外挿します。

同等な演算を実行する他のブロック

Interpolation Using Prelookup ブロックを Prelookup ブロックと共に使用して、1 つの n-D Lookup Table ブロックと同等の演算を実行できます。ブロックをこのように組み合わせると、フレキシビリティが大きくなるので、線形内挿のためのシミュレーションのパフォーマンスがより効果的になります。

ルックアップ演算が、内挿を必要としない配列の場合は、Direct Lookup Table (n-D) ブロックを使用します。たとえば、整数値 k があり、テーブルの k 番目の要素 y = table(k) が必要な場合は、内挿は必要ありません。

サポートするデータ型

n-D Lookup Table ブロックは、固定小数点データ型を含む Simulink がサポートするすべての数値データ型をサポートします。詳細は、Simulink ドキュメンテーションの「 Simulink でサポートされているデータ型」を参照してください。

3 次スプライン内挿モードと線形外挿モードの場合、次のパラメーターは同一の浮動小数点型を使用しなければなりません。

  • テーブル データ

  • ブレークポイント

  • ブレークポイント間の位置

  • 中間結果

  • 出力

インデックス付けのための入力は実数でなければなりませんが、テーブル データは複素数でもかまいません。

パラメーターとダイアログ ボックス

[テーブルとブレークポイント] タブ

テーブルの次元数

ルックアップ テーブルの次元数は、1 から 30 までの整数を指定することにより入力します。このパラメーターにより以下が決定されます。

  • テーブルの独立変数の数、およびブロック入力数

  • 指定するブレークポイント セット数

テーブル データ

出力値のテーブルを入力します。

シミュレーションの実行中、行列のサイズは [テーブルの次元数] パラメーターで定義されたサイズに一致していなければなりません。ただし、ブロック線図の編集時には、空行列 ([] として指定) または未定義のワークスペース変数を入力できます。この手法により、テーブル データに対する適切な次元の行列の指定は後回しにして、ブロック線図の編集を続けることができます。MATLAB® で多次元配列を作成する方法の詳細は、MATLAB オンライン ドキュメンテーションの「多次元配列」を参照してください。

ブレークポイント

[ブレークポイント] 行にテーブル データの各次元に対応するブレークポイント セットを入力します。各次元に対して、厳密に単調増加する値をもつ 1 行 n 列または n 行 1 列ベクトルとしてブレークポイントを指定します。

テーブルとブレークポイントの編集

ルックアップ テーブル エディターを開くには、このボタンをクリックします。詳細は、Simulink ドキュメンテーションの「既存のルックアップ テーブルの編集」を参照してください。

サンプル時間 (継承は -1)

サンプルの時間間隔を指定します。サンプル時間を継承するには、このパラメーターを -1 に設定します。Simulink ドキュメンテーションの「 サンプル時間の指定」を参照してください。

[アルゴリズム] タブ

内挿法

[フラット][線形]、または [3 次スプライン] を選択します。詳細は、Simulink ドキュメンテーションの「内挿法」を参照してください。

[3 次スプライン] を選択すると、ブロックはスカラー信号のみをサポートします。他の内挿法は、非スカラー信号をサポートします。

外挿法

[クリップ][線形]、または [3 次スプライン] を選択します。詳細は、Simulink ドキュメンテーションの「外挿方法」を参照してください。

[外挿方法][3 次スプライン] を選択するには、[内挿法] にも [3 次スプライン] を選択する必要があります。

最後のブレークポイントまたはそれを超える入力に対してテーブルの最後の値を使用する

このチェック ボックスを使用してブレークポイント セットの最後の要素とその対応するテーブル値のアドレス指定のためにブロックで使用するインデックス付けのルールを指定します。このチェック ボックスはブレークポイント データの最後の要素よりも入力が大きい場合に関係します。このパラメーターは、以下の場合にのみ表示されます。

  • [内挿法][線形] の場合。

  • [外挿方法][クリップ] の場合。

チェック ボックスブロックで使用するインデックス区間分割
オン[テーブルとブレークポイント] タブのブレークポイント データの最後の要素0
オフ[テーブルとブレークポイント] タブのブレークポイント データの最後から 2 番目の要素1

ブレークポイント セット bp の範囲内の入力 u が与えられたとき、区間分割 f は 0 ≤ f ≤ 1 の範囲内で次のように計算されます。

ブレークポイント セットが [1 4 5] で入力 u が 5.5 であると仮定します。このチェック ボックスをオンにした場合、インデックスは最後の要素 (5) のインデックスになり、区間分割は 0 です。チェック ボックスをオフにした場合、インデックスは最後から 2 番目の要素 (4) のインデックスになり、区間分割は 1 です。

範囲外入力の診断

入力が範囲外の場合に警告を表示するかエラーを表示するかを指定します。オプションは次のとおりです。

  • [なし] — 警告またはエラーなし

  • [警告] - MATLAB コマンド ウィンドウに警告を表示し、シミュレーションを続けます。

  • [エラー] - シミュレーションを停止し、シミュレーション診断ビューアーにエラーを表示します。

生成コードの範囲外入力に対する保護を削除

範囲外のブレークポイント入力値をチェックするコードを含むかどうかを指定します。

チェック ボックス結果使用時

オン

生成コードには範囲外のブレークポイント入力をチェックするための条件文が含まれません。

コード効率の場合

オフ

生成コードには範囲外のブレークポイント入力をチェックするための条件文が含まれます。

セーフティ クリティカルなアプリケーションの場合

アプリケーションによって、次のモデル アドバイザー チェックを実行して、このチェック ボックスが使用されていることを確認できます。

  • [製品別][Embedded Coder][計算量が多い範囲外のチェック コードを生成する Lookup Table ブロックを識別します]

  • [製品別][Simulink Verification and Validation][モデリング標準][DO-178C/DO-331 チェック][Lookup Table ブロックの使用をチェックします]

モデル アドバイザーの詳細は、Simulink ドキュメンテーションの「モデル アドバイザーの使用」を参照してください。

インデックス検索法

Evenly spaced pointsLinear search、または Binary search を選択します。各検索法は、さまざまな環境で速度の利点をもっています。

  • ブレークポイント セットが均等の間隔に並んでいる場合 (例: 10, 20, 30, ...)、[等間隔のポイント] を選択してテーブル インデックスを計算することにより、速度を最大に上げることができます。

    このアルゴリズムは最初の 2つのブレークポイントのみを利用して残りのポイントのオフセットと間隔を求めます。

  • 不規則な間隔に並んでいるブレークポイント セットについては、以下のガイドラインに従ってください。

    • あるタイム ステップから次のタイム ステップまでに入力信号があまり変化しない場合は、[前回のインデックス結果を使ってインデックス検索を始める] と組み合わせて [線形探索] を選択すると、最高のパフォーマンスが得られます。

    • 入力信号がタイム ステップあたり 2 個以上または 3 個以上のテーブル区間をジャンプする場合は、[二分探索] を選択すると、最高のパフォーマンスが得られます。

インデックス検索法に関する準最適な選択は、ルックアップ テーブルに大きく依存しているモデル内でパフォーマンスの低下をもたらします。

    メモ:   生成コードは、以下の場合、最初のブレークポイント、間隔、およびブレークポイントの数だけを保存します。

    • ブレークポイント データが調整不可能な場合。

    • インデックス検索法が [等間隔のポイント] の場合。

前回のインデックス結果を使ってインデックス検索を始める

このチェック ボックスは、前のタイム ステップで発見されたインデックスを使ってこのブロックにそのブロックの探索を開始させたいときに選択します。区間サイズに関してゆっくりと変化する入力に対して、このオプションをオンにするとパフォーマンスを改善できます。そうでない場合、線形探索法と二分探索法は非常に長い時間を要します。特に、ブレークポイントセットが大きな場合には長い時間を要します。

すべての入力データに対して入力端子を使用

N 次元テーブルに対応した N 個の要素分の幅を有する信号を期待する入力端子を 1 つのみ使用するには、このチェック ボックスを選択します。このオプションは、多数のルックアップ テーブルを含むブロック線図上でライン クラッターを削除するときに便利です。

    メモ:   このチェック ボックスを選択すると、u ラベルが付いた 1 つの入力端子がブロックに現れます。

コード生成で調整可能なテーブル サイズをサポート

このチェック ボックスを選択して、生成コード内で調節可能なテーブル サイズを有効にします。このオプションは、コードの再生成や再コンパイルを行わずに、ルックアップ テーブルのサイズと値、およびブレークポイント データを変更できるようにします。

[内挿法][3 次スプライン] に設定した場合、このチェック ボックスは使用できません。

次元ごとの最大インデックス

ゼロベースのインデックスを使用して、テーブルの次元ごとに最大インデックス値を指定します。次のデータ型を使って、正の整数値のスカラーまたはベクトルを指定できます。

  • 組み込み浮動小数点型:double および single

  • 組み込み整数型:int8int16int32uint8uint16、およびuint32

有効な仕様の例をいくつか示します。

  • 5 行 7 列の表は [4 6]

  • 3x6x10 の表は [int8(2) int16(5) int32(9)]

このパラメーターは、[コード生成で調整可能なテーブル サイズをサポート] を選択した場合に使用できます。

[データ型] タブ

    メモ:   ダイアログ ボックスは追加のデータ型オプションを表示するために拡張できます。最大 30 個までのブレークポイント データ型仕様が表示されます。

テーブル データ > データ型

テーブル データ型を指定します。以下を指定可能です。

  • データ型継承ルール (例: [継承:出力と同じ])

  • 組み込みデータ型名 (例: single)

  • データ型オブジェクト名 (例: Simulink.NumericType オブジェクト)

  • データ型を評価する式 (例: fixdt(1,16,0))

[データ型アシスタントを表示] ボタン をクリックして、テーブル データ型に関する設定を行う [データ型アシスタント] を表示します。

    ヒント:   以下の場合には、出力データ型とは異なるテーブル データ型を指定します。

    • 出力信号よりも小さいタイプを使用するテーブル データの保存のためのメモリ必要量が少ない場合

    • 異なる出力データ型の 2 つの n-D Lookup Table ブロック間で事前スケーリングされたテーブル データを共有する場合

    • 異なる出力データ型のブロックに対して生成されたコード内のカスタム ストレージ テーブル データを共有する場合

テーブル データ > 最小値

テーブル データの最小値を指定します。既定値は [] (指定なし) です。

テーブル データ > 最大値

テーブル データの最大値を指定します。既定値は [] (指定なし) です。

ブレークポイント > データ型

ブレークポイント データのセットのデータ型を指定します。以下を指定可能です。

  • データ型継承ルール (例: [継承:対応する入力と同じ])

  • 組み込みデータ型名 (例: single)

  • データ型オブジェクト名 (例: Simulink.NumericType オブジェクト)

  • データ型を評価する式 (例: fixdt(1,16,0))

[データ型アシスタントを表示] ボタン をクリックして、ブレークポイント データ型に関する設定を行う [データ型アシスタント] を表示します。

詳細は、Simulink ドキュメンテーションの「データ型アシスタントを利用したデータ型の指定」を参照してください。

    ヒント:   以下の場合には、対応する入力データ型とは異なるブレークポイント データ型を指定します。

    • 入力信号よりも小さいタイプを使用するブレークポイント データの保存のためのメモリ必要量が少ない場合

    • 異なる入力データ型をもつ 2 つの n-D Lookup Table ブロック間で事前スケーリングされたブレークポイント データを共有する場合

    • 異なる入力データ型のブロックに対して生成されたコード内のカスタム ストレージ ブレークポイント データを共有する場合

ブレークポイント > 最小値

ブレークポイント データのセットの最小値を指定します。既定値は [] (指定なし) です。

ブレークポイント > 最大値

ブレークポイント データのセットの最大値を指定します。既定値は [] (指定なし) です。

ブレークポイント間の位置 > データ型

ブレークポイント間の位置のデータ型を指定します。以下を指定可能です。

  • データ型継承ルール (例: 継承:内部ルールによる継承

  • 組み込みデータ型名 (例: single)

  • データ型オブジェクト名 (例: Simulink.NumericType オブジェクト)

  • データ型を評価する式 (例: fixdt(1,16,0))

[データ型アシスタントを表示] ボタン をクリックして、[データ型アシスタント] を表示し、ブレークポイント間の位置のデータ型を設定します。

詳細は、Simulink ドキュメンテーションの「データ型アシスタントを利用したデータ型の指定」を参照してください。

中間結果 > データ型

中間結果のデータ型を指定します。以下を指定可能です。

  • データ型継承ルール (例: [継承:出力と同じ])

  • 組み込みデータ型名 (例: single)

  • データ型オブジェクト名 (例: Simulink.NumericType オブジェクト)

  • データ型を評価する式 (例: fixdt(1,16,0))

[データ型アシスタントを表示] ボタン をクリックして、中間結果データ型に関する設定を行う [データ型アシスタント] を表示します。

    ヒント:   このパラメーターを使用して、内部計算に対してテーブル データや出力データよりも高い (または低い) 精度を指定します。

出力 > データ型

出力データ型を指定します。以下を指定可能です。

  • データ型継承ルール (例: 継承:逆伝播による継承)

  • 組み込みデータ型名 (例: single)

  • データ型オブジェクト名 (例: Simulink.NumericType オブジェクト)

  • データ型を評価する式 (例: fixdt(1,16,0))

[データ型アシスタントを表示] ボタン をクリックして、出力データ型に関する設定を行う [データ型アシスタント] を表示します。

詳細は、「ブロックの出力データ型の指定」を参照してください。

出力 > 最小値

ブロックが出力する最小値を指定します。既定値は [] (指定なし) です。Simulink ソフトウェアは、以下を行う際にこの値を使用します。

出力 > 最大値

ブロックが出力する最大値を指定します。既定値は [] (指定なし) です。Simulink ソフトウェアは、以下を行う際にこの値を使用します。

内部ルール優先順位

中間計算の内部ルールを指定します。より速く計算するには [速度] を選択します。この場合、通常で最大 2 ビットの精度が失われる場合があります。

すべての入力が同じデータ型をもつ

これを選択した場合、すべての入力が同じデータ型でなければなりません。

固定小数点ツールによる変更に対してデータ型の設定をロックする

固定小数点ツールや固定小数点アドバイザーによる変更を避けるために、このブロックのすべてのデータ型の設定をロックします。詳細は、Fixed-Point Designer™ ドキュメンテーションの「固定小数点ツール」および「固定小数点の変換の準備」を参照してください。

整数丸めモード

シミュレーションまたはモデルから生成されたコードの実行中に起こる固定小数点ルックアップ テーブルの計算に対する丸めのモードを選択します。詳細は、Fixed-Point Designer ドキュメンテーションの「丸め」を参照してください。

このオプションは、ブロック パラメーターの値の丸めには影響しません。Simulink は、そのような値を最近傍の表現可能な整数値に丸めます。ブロックパラメーターの丸めを制御するためには、MATLAB 丸め関数を使用する式を、ブロックのダイアログ ボックスの編集フィールドに入力します。

整数オーバーフローで飽和
アクションこのアクションを行う理由オーバーフロー発生時に起きること

このチェック ボックスをオンにする。

モデルでオーバーフローが発生する可能性があるので、生成コードに飽和保護を明示的に組み込むことをお勧めします。

オーバーフローは、データ型が表現できる最小値または最大値のいずれかに飽和します。

符号付き 8 ビット整数に関連付けられたオーバーフローは、-128 または 127 に飽和します。

このチェック ボックスをオンにしない。

生成コードの効率を最適化することをお勧めします。

ブロックが範囲外の信号を処理する方法を指定しすぎないようにすることをお勧めします。詳細は、「信号範囲のエラーのチェック」を参照してください。

オーバーフローは、データ型によって表現される適切な値にラップされます。

数値 130 は符号付き 8 ビット整数 1 つに収まりきらないので、-126 にラップされます。

    ヒント:   モデルを R2009a 以前のバージョンとして保存する場合、このチェック ボックスの設定による影響はなく、飽和コードも表示されません。これにより下位互換性が維持されます。

このチェック ボックスをオンにすると、飽和は出力や結果だけでなく、このブロックの内部演算すべてに適用されます。通常、オーバーフローが可能ではない場合は、コード生成プロセスで検出されます。この場合、コード ジェネレーターでは飽和コードは生成されません。

内挿と外挿の動作

このブロックの線形内挿および外挿の方法を説明する例は、Simulink ドキュメンテーションの「対数ルックアップ テーブルの作成」を参照してください。

ブレークポイントとテーブル データの入力例は、Simulink ドキュメンテーションの「[ブロック パラメーター] ダイアログ ボックスへのデータの入力」を参照してください。

生成コード内で調節可能なテーブル サイズ

ルックアップ テーブルがあり、そのサイズを生成コード内で調節可能にするとします。次のように仮定します。

  • モデルのプリロード関数に Simulink.Parameter 構造体を定義します。

    p = Simulink.Parameter;
    p.Value.MaxIdx = [2 2];
    p.Value.BP1 = [1 2 3];
    p.Value.BP2 = [1 4 16];
    p.Value.Table = [4 5 6; 16 19 20; 10 18 23];
    p.DataType = 'Bus: slLookupTable';
    p.CoderInfo.StorageClass = 'ExportedGlobal';
    
    % Create bus object slBus1 from MATLAB structure
    Simulink.Bus.createObject(p.Value);
    slLookupTable = slBus1;
    slLookupTable.Elements(1).DataType = 'uint32';
  • 次のブロック パラメーターは、n-D Lookup Table ブロックのダイアログ ボックスに適用されます。

    パラメーター
    テーブルの次元数2
    テーブル データp.Table
    ブレークポイント 1p.BP1
    ブレークポイント 2p.BP2
    コード生成で調整可能なテーブル サイズをサポートon
    次元ごとの最大インデックスp.MaxIdx

生成された model_types.h ヘッダー ファイルには、次のような型定義が含まれます。

typedef struct {
  uint32_T MaxIdx[2];
  real_T BP1[3];
  real_T BP2[3];
  real_T Table[9];
} slLookupTable;

生成された model.c ファイルには、次のようなコードが含まれます。

/* Exported block parameters */
slLookupTable p = {
  { 2U, 2U },
 
  { 1.0, 2.0, 3.0 },
 
  { 1.0, 4.0, 16.0 },
 
  { 4.0, 16.0, 10.0, 5.0, 19.0, 18.0, 6.0, 20.0, 23.0 }
} ; 

/* More code */

/* Model output function */
static void ex_lut_nd_tunable_table_output(int_T tid)
{
  /* Lookup_n-D: '<Root>/n-D Lookup Table' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   */
  Y = look2_binlcpw(U1, U2, p.BP1, p.BP2, p.Table, ...
p.MaxIdx, p.MaxIdx[0] + 1U);
 
  /* Outport: '<Root>/Out1' */
  ex_lut_nd_tunable_table_Y.Out1 = Y;

  /* tid is required for a uniform function interface.
   * Argument tid is not used in the function. */
  UNUSED_PARAMETER(tid);
}

強調表示されているコード行は、ルックアップ テーブルの調節可能なテーブル サイズを指定します。コードの再生成や再コンパイルを行わずに、ルックアップ テーブルのサイズと値、およびブレークポイント データが変更できるようになります。

特性

直接フィードスルー

あり

サンプル時間

[サンプル時間] パラメーターで指定

スカラー拡張

あり

離散化

[内挿法][3 次スプライン] を選択しない場合は、あり

ゼロクロッシング検出

なし

この情報は役に立ちましたか?