Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

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

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

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

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

model = 'rtwdemo_float_mul_for_net_slope_correction';
open_system(model);

コードの生成

ビルドと検査プロセス用に一時フォルダーを作成します。

currentDir = pwd;
[~,cgDir] = rtwdemodir();

モデルを作成します。

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

Build Summary

Top model targets built:

Model                                       Action                       Rebuild Reason                                    
===========================================================================================================================
rtwdemo_float_mul_for_net_slope_correction  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 17.399s

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

cfile = fullfile(cgDir,'rtwdemo_float_mul_for_net_slope_correction_ert_rtw',...
    'rtwdemo_float_mul_for_net_slope_correction.c');
rtwdemodbtype(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void rtwdemo_float_mul_for_net_slope_correction_step(void)
{
  /* Outport: '<Root>/Output' incorporates:
   *  DataTypeConversion: '<Root>/Data Type Conversion'
   *  Inport: '<Root>/Input'
   */
  rtY.Output = (int16_T)(real32_T)floor((real_T)(rtU.Input / 3.0F));
}

最適化の有効化

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

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

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

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

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

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

Build Summary

Top model targets built:

Model                                       Action                       Rebuild Reason                   
==========================================================================================================
rtwdemo_float_mul_for_net_slope_correction  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.074s

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

rtwdemodbtype(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void rtwdemo_float_mul_for_net_slope_correction_step(void)
{
  /* Outport: '<Root>/Output' incorporates:
   *  DataTypeConversion: '<Root>/Data Type Conversion'
   *  Inport: '<Root>/Input'
   */
  rtY.Output = (int16_T)(real32_T)floor((real_T)(rtU.Input * 0.333333343F));
}

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

bdclose(model)
rtwdemoclean;
cd(currentDir)

参考

関連するトピック