パラメーターと信号の変換
はじめに
固定小数点 Simulink® ブロックによって生成される結果を完全に理解するには、以下の問題点を認識していなければなりません。
数値ブロック パラメーターが double から固定小数点データ型に変換される場合
入力信号が固定小数点のデータ型間で変換される場合
入力信号とパラメーターに算術演算が実行される場合
たとえば、固定小数点 Simulink ブロックがその入力信号とパラメーターに演算を実行してから、ブロックで指定されている特性を備えた出力を生成するとします。次の図は、これらの問題点の関連性を示しています。
以下の節ではパラメーターと信号の変換について説明し、算術演算の規則では算術演算について説明します。
パラメーターの変換
数値を受け入れる固定小数点ブロックのパラメーターは、常に double
から固定小数点データ型に変換されます。パラメーターは入力データ型、出力データ型、またはブロックで明示的に指定されたデータ型に変換できます。たとえば、Discrete FIR Filter ブロックはその [初期状態] パラメーターを入力データ型に変換し、[分子係数] パラメーターを、ブロックのダイアログ ボックスで明示的に指定したデータ型に変換します。
パラメーターは常に、算術演算が実行される前に変換されます。また、パラメーターは最も近い整数への丸めと飽和を使用して、常に "オフライン" で変換されます。オフライン変換については、以下で説明します。
メモ
固定小数点ブロックのパラメーターは double
として開始するため、精度が 53 ビットを超えることはありません。したがって、固定小数点ブロックの出力が 53 ビットより長い場合は、結果が予測以下の精度になる可能性があります。
オフライン変換
オフライン変換は、開発プラットフォーム (たとえば PC のプロセッサ) が実行する変換で、ターゲットの固定小数点プロセッサが実行する変換ではありません。たとえば、固定小数点プロセッサ上で実行するプログラムを PC で開発しているとき、固定小数点プロセッサで
を何度も計算する必要があるとします。a、b、および c が定数パラメーターの場合、固定小数点プロセッサが毎回 ab/c を計算するのは非効率的です。それよりも、PC のプロセッサが ab/c をオフラインで 1 回計算し、固定小数点プロセッサは C·u だけを計算するのが効率的です。これにより、コスト高となる 2 回の固定小数点算術演算がなくなります。
信号の変換
実際値の固定小数点データ型間の変換を考えてみましょう。変換前後の値が等しいのが理想的です。
ここで、Vb が入力値で、Va が出力値です。変換がどのように実装されるかを見るため、スケーリングの説明に従って 2 つの理想値を一般的な [勾配 バイアス] エンコード スキームに置き換えます。
出力データ型の整数格納値、Qa が得られます。
ここで、Fs が調整後の小数部の勾配で、Bnet が正味バイアスです。以下に、オフライン変換とオンライン変換、および演算について説明します。
オフライン変換
Fs も Bnet も最も近い整数への丸めと飽和を使用してオフラインで計算されます。次に、Bnet は出力データ型を使用して格納され、Fs は自動選択されたデータ型を使用して格納されます。
オンライン変換と演算
残りの変換と演算は、固定小数点プロセッサによって "オンライン" で実行され、入力データ型と出力データ型の勾配とバイアスに依存します。変換と演算は以下の手順で行われます。
Qa の初期値は正味バイアス、Bnet によって提供されます。
入力整数値、Qb が調整後の勾配、Fs で乗算されます。
手順 2 の結果は、勾配が 1 でバイアスがゼロの調整後のデータ型に変換されます。
この変換には、必要なビット シフト、丸め、オーバーフロー処理などが含まれます。
総和演算は次のように実行されます。
この総和演算には必要なオーバーフロー処理が含まれます。
シミュレーションの効率化と生成コード
入力信号と出力信号の勾配とバイアスが異なる (不一致の) 場合は、最大回数の変換と演算が実行されます。これらの信号のスケーリングが同じ (一致する) 場合は、演算回数が最悪の (最も非効率な) 場合から減少します。たとえば、入力の小数部の勾配とバイアスが出力と同じ場合は、手順 3 だけで済みます。
勾配とバイアスの不一致をなくす一般的な方法は、入力信号と出力信号の両方に対する 2 進小数点のみのスケーリングの排他的な使用で、最も効率的なシミュレーションと生成コードになります。