Main Content

double から固定小数点へのキャスト

この例では、一般化固定小数点データ型を使用して連続した実際の double 信号をシミュレートする方法を示します。モデル fxpdemo_dbl2fix を使用して、以下を含む Fixed-Point Designer™ ソフトウェアの多くの重要な機能を調べることができます。

  • データ型

  • スケーリング

  • 丸め

  • シミュレーションの最小値と最大値のワークスペースへの記録

  • オーバーフローの処理

モデルを開くには、MATLAB® コマンド ラインで次を入力します。

openExample('fixedpoint/DoubleToFixedPointConversionExample')

この例では、Signal Generator ブロックを [-5 5] の区間で振幅が定義された正弦波信号を出力するように設定します。Signal Generator ブロックは常に倍精度数を出力します。

Dbl-to-FixPt Data Type Conversion ブロックは、Signal Generator ブロックからの倍精度数を Fixed-Point Designer データ型の 1 つに変換します。簡単にするために、この例では出力信号のサイズは 5 ビットです。

FixPt-to-Dbl Data Type Conversion ブロックは、Fixed-Point Designer データ型の 1 つを Simulink® データ型に変換します。この例では、倍精度数が出力されます。

2 進小数点のみのスケーリングを使用したシミュレーション

2 進小数点のみのスケーリングを使用する場合、目的はスケーリングで定義された最適な 2 のべき乗の指数 E を見つけることです。このスケーリング モードでは、小数部の勾配 F は 1 で、バイアスはありません。

2 進小数点のみのスケーリングを使用するようにモデルを設定するには、以下の手順に従います。

  1. Signal Generator ブロックを [-5 5] の区間で振幅が定義された正弦波信号を出力するように設定します。

    1. Signal Generator ブロックをダブルクリックして [ブロック パラメーター] ダイアログを開きます。

    2. [波形] パラメーターを [正弦] に設定します。

    3. [振幅] パラメーターを 5 に設定します。

    4. [OK] をクリックします。

  2. Data Type Conversion (Dbl-to-FixPt) ブロックを設定します。

    1. [Dbl-to-FixPt] ブロックをダブルクリックして [ブロック パラメーター] ダイアログを開きます。

    2. [出力データ型] パラメーターが fixdt(1,5,2) であることを確認します。これにより、スケーリング 2^-2 の 5 ビットの符号付き固定小数点数が指定され、2 進小数点を右端のビットの 2 桁左側に配置します。したがって、最大値は 011.11 = 3.75、最小値は 100.00 = -4.00、精度は (1/2)2 = 0.25 になります。

    3. [整数丸めモード] パラメーターが [負方向] に設定されていることを確認します。これにより、固定小数点の結果が負の無限大方向に丸められます。

    4. [整数オーバーフローで飽和] チェック ボックスをオンにして、オーバーフローでブロックがラッピングしないようにします。

    5. [OK] をクリックします。

  3. モデルをシミュレートするには、[シミュレーション] タブで [実行] をクリックします。

Scope で理想のシミュレーション結果と固定小数点のシミュレーション結果が表示されます。

シミュレーションは、固定小数点演算の量子化の影響を示します。精度 (1/2)2 = 0.25 の 5 ビットの語長を使用すると、入力信号の全範囲を含まない離散化出力が生成されます。

2 進小数点のみのスケーリングを使用して 5 ビットの入力信号の全範囲を含めるには、出力スケーリングを 2^-1 に設定します。これにより、2 進小数点が右端のビットの 1 桁左側に配置され、最大値は 0111.1 = 7.5、最小値は 1000.0 = -8.0 になります。ただし、精度は (1/2)1 = 0.5 に低下します。2 進小数点のみのスケーリングを使用して、5 ビットの入力信号の完全範囲を含むための唯一のオプションは、精度を犠牲にすることです。したがって、出力スケーリングは 2^-1 です。このスケーリングでは 2 進小数点が右端のビットの 1 桁左側に配置されます。このスケーリングでは、最大値 0111.1 = 7.5、最小値 1000.0 = -8.0、そして精度 (1/2)1 = 0.5 が与えられます。

精度が 0.5 に低下したことによる影響を確認するには、Dbl-to-FixPt Data Type Conversion ブロックの [出力データ型] パラメーターを fixdt(1,5,1) に設定してシミュレーションを再実行します。

[勾配 バイアス] スケーリングを使用したシミュレーション

[勾配バイアス] スケーリングを使用する場合の目的は、スケーリングで定義された最適な小数部の勾配 F と固定した 2 のべき乗の指数 E を見つけることです。正弦波は [-5 5] の区間で定義されるため、この例にはバイアスはありません。

勾配を求めるには、固定した 2 のべき乗の指数 -2 を想定することから始めます。小数部の勾配を求めるには、正弦波の最大値をスケーリングされた 5 ビットの数値で割ります。結果は、5.00/3.75 = 1.3333 になります。勾配 (および精度) は 1.3333(0.25) = 0.3333 です。[出力データ型] パラメーターの値として式 fixdt(1,5,0.3333,0) を入力することで、[勾配 バイアス] を [0.3333 0] として指定します。

また、固定した 2 のべき乗の指数 -1 および対応する小数部の勾配 0.6667 を指定することもできます。E は 1 ビット減りますが、F は 1 ビット増えるため、結果の勾配は同じです。Fixed-Point Designer ソフトウェアは、正規化条件 1 ≤ F < 2 のため、F を 1.3332 とし、E を -2 として自動的に格納します。

[勾配 バイアス] スケーリングを使用するようにモデルを設定するには、以下の手順に従います。

  1. Signal Generator ブロックを [-5 5] の区間で振幅が定義された正弦波信号を出力するように設定します。

    1. Signal Generator ブロックをダブルクリックして [ブロック パラメーター] ダイアログを開きます。

    2. [波形] パラメーターを sine に設定します。

    3. [振幅] パラメーターを 5 に設定します。

    4. [OK] をクリックします。

  2. Dbl-to-FixPt Data Type Conversion ブロックを設定します。

    1. [Dbl-to-FixPt] ブロックをダブルクリックして [ブロック パラメーター] ダイアログを開きます。

    2. [0.3333 0] の [勾配 バイアス] スケーリングを指定するには、[出力データ型] パラメーターを fixdt(1,5,0.3333,0) に設定します。

    3. [整数丸めモード] パラメーターが Floor であることを確認します。これにより、固定小数点の結果が負の無限大方向に丸められます。

    4. [整数オーバーフローで飽和] チェック ボックスをオンにして、オーバーフローでブロックがラッピングしないようにします。

    5. [OK] をクリックします。

  3. モデルをシミュレートするには、[シミュレーション] タブで [実行] をクリックします。

Scope で理想のシミュレーション結果と固定小数点のシミュレーション結果が表示されます。

勾配が不明な場合は、以下の公式に基づきスケーリングを選択することで、適切なシミュレーション結果を取得できます。

(max_valuemin_value)2ws1,

ここで、

  • max_value は、シミュレートする最大値です。

  • min_value は、シミュレートする最小値です。

  • ws はビット単位のワード サイズです。

  • 2ws - 1 はワード サイズ ws のワードの最大値です。

この例では、公式により 0.32258 の勾配が生成されます。

関連するトピック