浮動小数点と固定小数点の結果の差の可視化
この例を実行するには、次の製品をインストールしなければなりません。
MATLAB®
Fixed-Point Designer™
C コンパイラ
サポートされるコンパイラを参照してください。
mex -setup
を使用して、既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。
サンプル ファイルの検査
型 | 名前 | 説明 |
---|---|---|
関数のコード | myFilter.m | エントリ ポイントの MATLAB 関数 |
テスト ファイル | myFilterTest.m | myFilter.m をテストする MATLAB スクリプト |
プロット関数 | plotDiff.m | カスタムのプロット関数 |
MAT ファイル | filterData.mat | フィルター処理するデータ |
構成オブジェクトの設定
coder.FixptConfig
オブジェクトを作成します。fxptcfg = coder.config('fixpt');
テスト ファイル名とカスタムのプロット関数名を指定します。ログの記録と数値テストを有効にします。
fxptcfg.TestBenchName = 'myFilterTest'; fxptcfg.PlotFunction = 'plotDiff'; fxptcfg.TestNumerics = true; fxptcfg.LogIOForComparisonPlotting = true; fxptcfg.DefaultWordLength = 16;
固定小数点への変換
浮動小数点の MATLAB 関数 myFilter
を固定小数点の MATLAB コードに変換します。codegen
コマンドの入力の型はテスト ファイルの型から推定されるので、指定する必要はありません。
codegen -args {complex(0, 0)} -float2fixed fxptcfg myFilter
既定の語長 16
を使用して固定小数点コードが生成されます。次に、関数 myFilterTest.m
を実行して固定小数点バージョンの myFilter.m
を呼び出すことにより、固定小数点のシミュレーションが実行されます。
比較プロット用の入力と出力を記録し、カスタムのプロット関数 plotDiff.m
を使用するように指定したので、変換プロセスではこの関数を使用して比較プロットが生成されます。
プロットは、固定小数点の結果と浮動小数点の結果がかなり異なることを示します。
語長を 24
に増加してから、再び固定小数点に変換します。
fxptcfg.DefaultWordLength = 24; codegen -args {complex(0, 0)} -float2fixed fxptcfg myFilter
語長を増加したことにより結果が改善されました。今回は、固定小数点の結果と浮動小数点の結果が一致しています。