ルックアップ テーブル データの特性
ブレークポイント ベクトルとテーブル データのサイズ
ルックアップ テーブル ブロックに関連したブレークポイント ベクトルとテーブル データのサイズには、次の制約があります。
システムのメモリ制限により、ルックアップ テーブルの全体のサイズが制約を受けます。
ルックアップ テーブルでは一致する次元を使用して、テーブル データの全体のサイズに各ブレークポイント ベクトルのサイズを反映させなければなりません。
2 番目の制約について説明するために、プロットに関係を作成する次の入力値と出力値のベクトルを考えてみましょう。
Vector of input values: [-3 -2 -1 0 1 2 3] Vector of output values: [-3 -1 0 -1 0 1 3]
この例では、入力データと出力データのサイズは同じ (1 行 7 列) なので、データは 1 次元ルックアップ テーブルと同じ次元になります。
次の入力値および出力値は、グラフ表示されている 2 次元ルックアップ テーブルを定義します。
Row index input values: [1 2 3] Column index input values: [1 2 3 4] Table data: [11 12 13 14; 21 22 23 24; 31 32 33 34]
この例では、行インデックスと列インデックスを表すベクトルのサイズはそれぞれ 1 行 3 列、1 行 4 列です。この結果、出力テーブルの次元を一致させるには、3 行 4 列のサイズが必要になります。
ブレークポイントの単調性
テーブル ルックアップ演算の最初の段階では、入力をブレークポイントに関連付ける必要があります。検索アルゴリズムでは入力ブレークポイント セットが "厳密に単調増加" しなければなりません。つまり、後続の各要素はその前の要素より大きくなければなりません。たとえば、次のベクトルを例に説明します。
A = [0 0.5 1 1.9 2.1 3]
これは、各要素が先行する要素よりも大きくなっているため、有効なブレークポイント ベクトルです。
メモ
ブレークポイント ベクトルは double
形式で厳密に単調ですが、固定小数点データ型に変換した後は厳密に単調でなくなることもあります。
等間隔ブレークポイントの定式化
次のいずれかの方法で、等間隔のブレークポイントをデータセットに表現することができます。
定式化 | 例 | この定式を使用できる場合 |
---|---|---|
[first_value:spacing:last_value] | [10:10:200] | ルックアップ テーブルは、double または single を使用しません。 |
first_value + spacing * [0:(last_value-first_value)/spacing] | 1 + (0.02 * [0:450]) | ルックアップ テーブルは、double または single を使用します。 |
浮動小数点データ型では一部の数値を正確に表現できないため、double
および single
の場合には 2 番目の定式の方が適しています。たとえば、[1:0.02:10]
ではなく 1 + (0.02 * [0:450])
を使用してください。等間隔のブレークポイントをサポートするルックアップ テーブルのリストについては、ルックアップ テーブル ブロック機能のまとめを参照してください。
特に大きな利点として、ブレークポイントを等間隔で設定することにより、生成されたコードに除算が使用されず、メモリの使用量が削減されます。詳細については、次の参考文献を参照してください。
Simulink® ドキュメンテーションの
fixpt_evenspace_cleanup
速度、誤差、およびメモリの使用量に与える間隔の影響 (Fixed-Point Designer)
問題のある固定小数点演算を特定 (Embedded Coder)
ヒント
MATLAB® の関数 linspace
を使用して、等間隔のブレークポイントを定義しないでください。Simulink では、ブレークポイント設定が等間隔をもつかどうかを確認する際に、狭い範囲の許容誤差が使用されます。関数 linspace
を使用して、ルックアップ テーブルのブレークポイントを定義すると、Simulink はブレークポイントを非等間隔と見なします。