Fixed-Point Designer


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

2 進小数点スケーリングの実行

この例では、FI による 2 進小数点スケーリングの実行方法を説明します。

FI 構築

a = fi(v,s,w,f) は、値 v、符号付き/なし s、語長 w、小数部の長さ ffi を返します。

s が true (符号付き) の場合、結果の fi の先行または上位ビット (MSB) は常に符号ビットです。

小数部の長さ f はスケーリング 2^(-f) です。

たとえば、値 0.5 と スケーリング 2^(-7) の符号付き 8 ビット長 fi を作成します:

a = fi(0.5,true,8,7)
a = 

    0.5000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7

2 進小数点の小数部の長さと位置

小数部の長さまたはスケーリングによって fi オブジェクト内の 2 進小数点の位置が決まります。

小数部の長さが正で語長より短い場合

小数部の長さ f が正で語長より短い場合、2 進小数点は最下位ビット (LSB) の f だけ左側かつワード内にあります。

たとえば、小数部の長さが 1 で値が -0.5 の符号付き 3 ビット fi では、2 進小数点は LSB の 1 つ左側にあります。この場合、各ビットは 1 に設定されて、2 進小数点の fi の 2 進等価は、11.1 となります。

-0.5 の実際の値は、LSB から符号付き MSB までのスケーリング ファクターで各ビットを乗算することによって得られます。

(1*2^-1) + (1*2^0) +(-1*2^1) = -0.5

storedInteger(a) は、格納された符号付きのスケールなし整数値 -1 を返します。

(1*2^0) + (1*2^1) +(-1*2^2) = -1

a = fi(-0.5,true,3,1)
bin(a)
storedInteger(a)
a = 

   -0.5000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: 1

ans =

111


ans =

   -1

小数部の長さが正で語長より長い場合

小数部の長さ f が正で語長より長い場合、2 進小数点は LSB の f だけ左側かつワードの外にあります。

たとえば、小数部の長さが 4 で値が -0.0625 の符号付き 3 ビットワードの 2 進数表現は ._111 です。ここで、._111_ は 3 ビットワードの一部ではない未使用ビットを示します。_ の直後の 1 は MSB または符号ビットです。

実際の値 -0.0625 は、以下のように計算されます (LSB ~ MSB)。

(1*2^-4) + (1*2^-3) + (-1*2^-2) = -0.0625

bin(b) は MATLAB® プロンプトで 111 を返し、storedInteger(b) = -1 となります。

b = fi(-0.0625,true,3,4)
bin(b)
storedInteger(b)
b = 

   -0.0625

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: 4

ans =

111


ans =

   -1

小数部の長さが負の整数で語長より短い場合

小数部の長さ f が負の場合、2 進小数点は LSB の f だけ右側かつ物理的ワードの外にあります。

たとえば、c = fi(-4,true,3,-2) では、2 進小数点は LSB 111__. の 2 つ右側にあります。ここでは、右端にある 2 つのスペースは、3 ビット ワードの一部ではない未使用ビットです。右端にある 1 は LSB で、先行する 1 は符号ビットです。

-4 の実際の値は、スケーリング ファクター 2^(-f) で、たとえば LSB では 2(-(-2)) = 2^(2) で各ビットを乗算して、積を加算することによって得られます。

(1*2^2) + (1*2^3) +(-1*2^4) = -4

前述の 2 つの例のように、bin(c)storedInteger(c)111-1 を出力します。

c = fi(-4,true,3,-2)
bin(c)
storedInteger(c)
c = 

    -4

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: -2

ans =

111


ans =

   -1

小数部の長さは最適な精度で自動的に設定され負である

この例では、fi が含むべき値によって小数部の長さが自動的に設定される符号付き 3 ビット fi を作成します。最終的な fi は、語長が 3 ビットで小数部の長さが -1 の値 6 をもちます。ここで、2 進小数点は、LSB の 1 つ右側で、011_. です。_ はまた未使用ビットで、_ の直前の 1 が LSB です。先行する 1 は符号ビットです。

実際の値 (6) は、以下のようにして求められます。

(1*2^1) + (1*2^2) + (-0*2^3) = 6

bin(d)011 を出力し、storedInteger(d)3 を出力します。

d = fi(5,true,3)
bin(d)
storedInteger(d)
d = 

     6

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: -1

ans =

011


ans =

    3

FI 2 進小数点スケーリングの対話型の例

これは、ユーザーがスライダーを使用して 2 進小数点を移動することによって 3 ビット固定小数点数の小数部の長さを変更できるようにする対話型の例です。小数部の長さは -3 ~ 5 で変更でき、ユーザーは、符号付き数か符号なし数のいずれかに対して 3 ビットの値を 0 または 1 に変更できます。

3 ビットの上にある「スケーリング ファクター」は、指定された符号付き/なしと小数部の長さに対して各ビットが与えられたスケーリングまたは重みを表示します。fi コード、倍精度の実際値と固定小数点の属性も表示されます。

この例を実行するには、MATLAB プロンプトで「fibinscaling」と入力してください。