innerprodintbits
固定小数点の内積に必要な整数ビット数
構文
innerprodintbits(a,b)
説明
innerprodintbits(a,b)
は、オーバーフローが発生しないことを保証し、最高の精度を維持するために内積 a'*b
に必要な整数ビットの最小数を計算します。
a
とb
はfi
ベクトルです。a
の値は既知です。b
の数値型のみが関連しています。b
の値は無視されます。
例
この関数の主な用途は、FIR フィルターの出力 Y
に必要な整数ビットの数を判断することです。このフィルターは定数係数行ベクトル B
と状態列ベクトル Z
の内積を計算します。以下に例を示します。
for k=1:length(X); Z = [X(k);Z(1:end-1)]; Y(k) = B * Z; end
アルゴリズム
一般に、内積は長さ n
のベクトルに対して log2(n)
ビットだけ大きくなります。しかし、この関数の場合はベクトル a
は既知であり、値は変化しません。この情報は、オーバーフローが発生しないことを保証するために出力に必要な整数ビットの最小数を計算するために使用されます。
最大のゲインが発生するのは、ベクトル b
の符号が定数ベクトル a
の符号と同じ場合です。したがって、ベクトル a
による最大ゲインは a*sign(a')
です。これは sum(abs(a))
と等価です。
内積でオーバーフローが発生しないことを保証するために必要な整数ビットの総数は、次のように計算されます。
n = ceil(log2(sum(abs(a)))) + number of integer bits in b + 1 sign bit
符号ビットが余計に追加されるのは、a
と b
がどちらも符号付きであり、かつ b
が最小値に達する場合のみです。これにより、(-1)*(-1) の場合でもオーバーフローが発生しません。