浮動小数点と固定小数点の結果の差の可視化
次の例では、生成された固定小数点コードと元の浮動小数点の MATLAB® コードの動作を比較するために、カスタムのプロット関数を使用するように関数 codegen
を構成する方法を説明します。
既定では、LogIOForComparisonPlotting
オプションを有効にすると、時系列ベースのプロット関数を使用して、浮動小数点と固定小数点の結果とそれらの差が示されます。また、固定小数点に変換するときに、アプリケーションの分野に適する表示を使用して数値的な差を可視化することができます。次の例では、固定小数点への変換プロセスの数値のテスト ステップで散布図が作成されるように、プロット関数をカスタマイズする方法を説明します。
関連ファイルのコピー
myFilter.m
、myFilterTest.m
、plotDiff.m
、および filterData.mat
の各ファイルをローカルの作業フォルダーにコピーします。
前提条件
この例を実行するには、次の製品をインストールしなければなりません。
MATLAB
MATLAB Coder™
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
語長を増加したことにより結果が改善されました。今回は、固定小数点の結果と浮動小数点の結果が一致しています。