Main Content

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

次の例では、生成された固定小数点コードと元の浮動小数点の MATLAB® コードの動作を比較するために、カスタムのプロット関数を使用するように関数 codegen を構成する方法を説明します。

既定では、LogIOForComparisonPlotting オプションを有効にすると、時系列ベースのプロット関数を使用して、浮動小数点と固定小数点の結果とそれらの差が示されます。また、固定小数点に変換するときに、アプリケーションの分野に適する表示を使用して数値的な差を可視化することができます。次の例では、固定小数点への変換プロセスの数値のテスト ステップで散布図が作成されるように、プロット関数をカスタマイズする方法を説明します。

前提条件

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

新規フォルダーの作成と関連ファイルのコピー

  1. ローカルの作業フォルダー (例: c:\custom_plot) を作成します。

  2. docroot\toolbox\fixpoint\examples フォルダーに移動します。MATLAB コマンド ラインで以下のように入力します。

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. myFilter.mmyFilterTest.mplotDiff.m および filterData.mat の各ファイルを、ローカルの作業フォルダーにコピーします。

    名前説明
    関数のコード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

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