Real-Time Workshop User's Guide    

ルックアップテーブルと多項式

Simulinkは、関数の近似を行うことができるブロックを提供します。これらには、直接、内挿、三次スプラインルックアップテーブル操作を行うブロックや、多項式評価ブロックが含まれます。

ルックアップテーブル操作を行うSimulinkブロックは現在6種類あります。

さらに、Repeating Sequenceブロックは、ルックアップテーブル操作を利用し、その出力は、リアルタイム(またはシミュレーション時間)クロックの関数です。

以下の説明を理解するには、Using Simulinkマニュアルに記述されているこれらのブロックの機能を習得しておく必要があります。

各タイプのlookup tableブロックは、独自のオプションと関連するトレードオフをもちます。この節の例題は、ルックアップテーブルの効率的な利用法を説明しています。ここで説明する手法は、最小のコードおよびデータサイズで最高の性能を得るのに役立ちます。

マルチチャンネル非線形信号の調整

図 8-1は、2つの8チャンネル、高速8ビットアナログ/ディジタルコンバータ(ADCs)から入力を読み込むSimulinkモデルを示します。ADCは、増幅率250のゲインサーキットによって、Type Kの熱電対に接続されます。一般のType Kの熱電対は非常に非線形なので、電圧を温度に変換する国際標準が存在します。摂氏0度から500度の範囲で、この変換は、10次の多項式です。ADCの読み込み(0-255)から温度(摂氏)への変換を行う1つの方法は、この多項式を評価することです。最適の場合には、多項式評価は、チャンネル毎に9個の乗算と10個の加算を必要とします。

多項式の評価は、これらの8ビットADCの読み込みを測定温度へ変換するための最速の方法ではありません。その代わりに、モデルは、Look-Up (n-D) Tableブロック(TypeK_TC) を使って、8ビット値を温度値に割り当てます。このブロックは、チャンネル毎に1回の配列の参照を行います。

図 8-1: Direct Look-Up Table (n-D)ブロックを調整するADC入力

ブロックのテーブルパラメータは、ADCの読み込み0, 1, 2, ... から255での温度に対応する256個の値が含まれます。MATLABで計算されるテーブルのデータは、ワークスペース変数TypeK_0_500に格納されます。ブロックのTable dataパラメータフィールドは、図 8-2のようにこの変数を参照します。

図 8-2: Direct Look-Up Table (n-D)ブロックのパラメータ

モデルは、Muxブロックを使って、すべての類似する信号(例, Type K 熱電対の読み込み)を収集し、それらを1つのDirect Look-Up Tableブロックにフィードします。これは、デバイス毎に1つのDirect Look-Up Tableブロックを使うよりも効率的です。複数のブロックが(この例題でのテーブルのような)共通のパラメータを共有する場合は、Real-Time Workshopは生成コードにそのパラメータのコピーを1つだけ作成します。

テーブルのサイズがメモリ制限内に納められるときに、これは信号の調整の方法として推奨されます。この例題では、テーブルは256個のdouble(8バイト)値を格納し、メモリを2 KB利用します。

TypeK_TCブロックは、シーケンシャルに16チャンネルのデータを処理します。

Real-Time Workshopは、図 8-1に示すTypeK_TC ブロックに対して、つぎのコードを生成します。

各ループのコアは、テーブルから1つのテーブル要素を直接取得し、それをブロックの出力変数に置く1行のコードです。シミュレートされた2つのADCはMuxブロックの連続するメモリ配列にマージされないので、生成コードには2つのループがあります。その代わりに、コピー操作を防ぐがめに、Direct Look-Up Tableブロックは単一のテーブル配列(rtP.root_TypeK_TC_table[])を使って、2つのデータセットに対して照合を行います。

アプリケーションに対する入力の精度(I/Oビットの数と混同しないでください)が24ビット以下の場合は、信号の調整において単精度テーブルを使うことができます。このとき、ブロック線図の他の部分での利用のために、ルックアップテーブルの出力を倍精度にします。この手法は、図 8-3に示すように、精度のロスを生じません。

図 8-3: 単精度のLookup Tableの出力を倍精度にキャスト

精度が24ビットであるdirect lookupテーブルは、メモリが64 MB必要であり、これは一般的に実用的ではありません。単精度テーブルを作成するには、テーブルの計算においてMATLABのsingle()キャスト関数を使います。あるいは、 図 8-4に示すように、Table dataパラメータで直接タイプキャストを行うことができます。

図 8-4: Direct Look-Upブロックでのテーブルデータのタイプキャスト

テーブルサイズが非現実的になるときは、内挿や、多項式手法のようなその他の非線形手法を利用する必要があります。Look-Up Table (n-D) ブロックは、線形内挿とキュービックスプライン内挿をサポートします。Polynomialブロックは、非複素数多項式の評価をサポートします。

Compute-Intensive方程式

この節で説明するブロックは、通常リアルタイムで計算するには時間を消費する、固定された複雑な関係を簡略化するために役立ちます。

compute-intensive関数またはリアルタイムでの任意の非線形の関係を実現する唯一の現実的な方法は、ルックアップテーブルの形式を使うことです。浮動小数点命令をもたないプロセッサ上では、sqrt()のような関数もリアルタイムで評価することはできません。

既知の範囲での非線形の関係への近似は、ほとんどの場合で機能します。たとえば、アプリケーションがターゲットプロセッサの命令がサポートしない平方根の計算を必要とする場合があります。下記の図は、Look-Up Tableブロックを使って、与えられた関数の範囲でどのように平方根関数の近似を計算するかを示します。

内挿された値は、ブロックアイコンにプロットされます。

広い間隔の点においてより高い精度を得るには、下記のようにLook-Up Table (n-D)ブロックのキュービックスプライン内挿を利用します。

Simulinkで利用可能な手法には、直接ルックアップに対するn次元サポート、テーブルの線形内挿、テーブルのキュービックスプライン内挿、1次元実数多項式の評価が含まれます。

Look-Up Table (n-D)ブロックは、フラットインターバルルックアップ、線形内挿およびキュービックスプライン内挿をサポートします。Look-Up Table (n-D)ブロックに対する外挿は、線形またはスプライン外挿に対して、利用不可能(クリッピング) または利用可能です。

Direct Look-Up Table (n-D)およびLook-Up Table (n-D)ブロックのアイコンは、下記のように、選択された内挿のタイプおよびテーブルの次元数に応じて変化します。

重複する点をもつテーブル

下記のLook-Up TableおよびLook-Up Table (2-D)ブロックは、線形外挿とともに線形内挿をサポートします。これらのブロックでは、行と列のパラメータは、重複する点をもつことができるので、純粋なステップの挙動を線形内挿と混合させることができます。この機能は、Look-Up Table (n-D)ブロックによってサポートされていません。

Look-Up Tableブロック入力の遅い変化と速い変化

入力信号の変化の標準の変化率がわかっている場合は、Look-Up Table (n-D)ブロックを使って、ルックアップテーブル操作の効率を最適化することができます。図 8-5は、Look-Up Table (n-D)ブロックのパラメータを示しています。

図 8-5: Look-Up Table (n-D)ブロックのパラメータダイアログ

入力信号の変化の標準の変化率が前もってわからない場合は、Look-Up Table (n-D)ブロックおよびPreLook-Up Index Searchブロックでのインデックスサーチ用にBinary Searchオプションを選択する方が望ましいです。

信号の挙動にかかわらず、テーブルのブレークポイントが等間隔である場合は、Look-Up Table (n-D)ブロックのパラメータダイアログからEvenly Spaced Pointsオプションを選択するのが最適です。

ブレークポイントが等間隔でない場合は、まず以下のうちのどちらが入力信号の挙動の記述に適しているかを決定します。

挙動1の場合、ルックアップテーブルに対する最良の最適化は、以下のように、Linear search option およびBegin index searches using previous index results オプションを使うことです。

挙動2の場合、Begin index searches using previous index resultsオプションは、必ずしも性能を改良しません。以下のようにBinary Search オプションを選択してください。

インデックスサーチ法の選択は、線形内挿を使った2次元以上のルックアップテーブル操作に対してより複雑な場合があります。この場合、複数の信号がテーブルに対する入力です。入力の中には、等間隔の点をもつものもあれば、挙動1または挙動2を示すものもあります。

ここでは、入力信号の特性に従って選択された異なるサーチ法(等間隔の線形サーチまたはバイナリサーチ)を使って、PreLook-Up Index Searchブロックを使うことが最適です。これらのサーチブロックの出力は、下記のブロック線図のようにInterpolation (n-D) Using PreLook-Up Index Searchブロックに接続されます。

ブレークポイントおよび入力時間が変動する場合に対して、最適のサーチアルゴリズムを使うために、各PreLook-Up Index Searchブロックを独立して設定することができます。

共通の入力を持つ複数のテーブル

インデックスサーチは、フラットまたは線形内挿の計算で最も時間を消費する部分です。大規模なブロック線図では、lookup tableブロックは、他のlookup tableブロックと同じ入力値をもつことがあります。この場合、すべてのテーブルに対してブレークポイントを共通にすることによって、計算時間を大きく節約することができます。この時間の節約は、PreLook-Up Index Searchブロックを使ってすべてのテーブルに対してサーチを1回行うため、内挿のみが未計算になることによって得られます。図 8-6は、この手法によって最適化されるブロック線図の例です。

図 8-6: 最適化前

テーブルAのブレークポイントがテーブルBの最初の入力のブレークポイントと同じで、テーブルCのブレークポイントがテーブルBの2番目の入力のブレークポイントと同じであると仮定します。

PreLook-Up Index Searchブロックの組にこれらの共通のブレークポイントを導入し、Interpolation (n-D) Using PreLook-Up Index Searchブロックを使って内挿を行うことにより、インデックスサーチの時間は50%削減されます。図 8-7は、最適化されたブロック線図を示します。

図 8-7: 最適化後

図 8-7は、Look-Up Table (n-D)ブロックは、Interpolation (n-D) Using PreLook-Upブロックで置き換えられています。PreLook-Up Index Searchブロックは、計算時間の節約を実現するため、インデックスサーチを内挿と独立に行うために追加されています。

大規模なコントローラやシミュレーションでは、多くの多次元テーブルが多くのブレークポイントに依存することは珍しいことではありません。この例で説明した最適化法を使って、アプリケーションの効率を大きく増加させることができます。


 ブロック線図の性能のチューニング アキュムレータ