Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

勾配設定を補正する浮動小数点の乗算

この例では、浮動小数点の乗算を使用して勾配設定を補正する方法を示します。生成されたコードで浮動小数点データ型を固定小数点データ型に変換する場合、固定小数点データ型をスケーリングする 1 つの方法として勾配設定の補正があります。固定小数点データ型のスケーリングにより、オーバーフロー状態を回避し、量子化誤差を最小に抑えます。

効率的な乗算をサポートするプロセッサの場合、勾配設定を補正する浮動小数点の乗算を使用して、コードの効率を向上します。勾配設定の補正に 2 のべき乗以外の値がある場合、除算を使用して精度を向上します。

メモ: この例には Fixed-Point Designer™ のライセンスが必要です。

モデル FloatMultiplicationNetSlope の Convert ブロックは、入力信号を浮動小数点データ型から固定小数点データ型に変換します。勾配設定の補正には 3 の値があります。

model = 'FloatMultiplicationNetSlope';
open_system(model);

コードの生成

モデルを作成します。

slbuild(model)
### Starting build procedure for: FloatMultiplicationNetSlope
### Successful completion of build procedure for: FloatMultiplicationNetSlope

Build Summary

Top model targets built:

Model                        Action                        Rebuild Reason                                    
=============================================================================================================
FloatMultiplicationNetSlope  Code generated and compiled.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 40.392s

FloatMultiplicationNetSlope.c コードの以下の行で、コード ジェネレーターは入力信号を 3.0F で除算します。

cfile = fullfile('FloatMultiplicationNetSlope_grt_rtw',...
    'FloatMultiplicationNetSlope.c');
coder.example.extractLines(cfile,'/* Model step', '/* Model initialize function */', 1, 0);
/* Model step function */
void FloatMultiplicationNetSlope_step(void)
{
  /* Outport: '<Root>/Output' incorporates:
   *  DataTypeConversion: '<Root>/Data Type Conversion'
   *  Inport: '<Root>/Input'
   */
  FloatMultiplicationNetSlope_Y.Output = (int16_T)(real32_T)floor
    (FloatMultiplicationNetSlope_U.Input / 3.0F);
}

最適化の有効化

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [数学とデータ型] ペインで、[浮動小数点の乗算を使用して勾配設定を補正] を選択します。既定の設定では、最適化はオンです。

代わりに、コマンド ライン API を使用して最適化を有効にできます。

set_param(model, 'UseFloatMulNetSlope', 'on');

最適化を使用したコードの生成

slbuild(model)
### Starting build procedure for: FloatMultiplicationNetSlope
### Successful completion of build procedure for: FloatMultiplicationNetSlope

Build Summary

Top model targets built:

Model                        Action                        Rebuild Reason                   
============================================================================================
FloatMultiplicationNetSlope  Code generated and compiled.  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 14.209s

最適化されたコードで、コード ジェネレーターは 3.0F の逆数、つまり 0.333333343F で入力信号を乗算します。

coder.example.extractLines(cfile,'/* Model step', '/* Model initialize function */', 1, 0);
/* Model step function */
void FloatMultiplicationNetSlope_step(void)
{
  /* Outport: '<Root>/Output' incorporates:
   *  DataTypeConversion: '<Root>/Data Type Conversion'
   *  Inport: '<Root>/Input'
   */
  FloatMultiplicationNetSlope_Y.Output = (int16_T)(real32_T)floor
    (FloatMultiplicationNetSlope_U.Input * 0.333333343F);
}

モデルおよびコード生成レポートを閉じます。

bdclose(model)

参考

関連するトピック