Main Content

浮動小数点と固定小数点の結果の差の可視化

この例を実行するには、次の製品をインストールしなければなりません。

サンプル ファイルの検査

名前説明
関数のコードmyFilter.mエントリ ポイントの MATLAB 関数
テスト ファイルmyFilterTest.mmyFilter.m をテストする MATLAB スクリプト
プロット関数plotDiff.mカスタムのプロット関数
MAT ファイルfilterData.matフィルター処理するデータ

 関数 myFilter

 myFilterTest ファイル

 関数 plotDiff

構成オブジェクトの設定

  1. coder.FixptConfig オブジェクトを作成します。

    fxptcfg = coder.config('fixpt');
  2. テスト ファイル名とカスタムのプロット関数名を指定します。ログの記録と数値テストを有効にします。

    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

語長を増加したことにより結果が改善されました。今回は、固定小数点の結果と浮動小数点の結果が一致しています。