Main Content

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

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

既定では、[比較プロット用の入力と出力を記録] オプションを有効にすると、時系列ベースのプロット関数を使用して、浮動小数点と固定小数点の結果とそれらの差が示されます。しかし、固定小数点に変換するときに、適用分野に合った表示方法で数値の差を可視化することが望ましい場合があります。次の例では、固定小数点への変換プロセスの数値のテスト ステップで散布図が作成されるように、プロット関数をカスタマイズする方法を説明します。

関連ファイルのコピー

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

前提条件

この例には次の製品が必要です。

例のファイルの検査

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

 関数 myFilter

 myFilterTest ファイル

 関数 plotDiff

MATLAB Coder アプリを開く

  1. この例で使用するファイルを含むフォルダーに移動します。

  2. MATLAB ツールストリップの [アプリ] タブの [コード生成] の下で、アプリ アイコンをクリックします。

ソース ファイルの選択

プロジェクトにエントリポイント関数 myFilter を追加するために、ファイル myFilter.m を探して [開く] をクリックします。

既定では、アプリはこのプロジェクトの情報および設定を現在のフォルダーの myFilter.prj というファイルに保存します。

固定小数点変換の有効化

  1. [数値変換][固定小数点に変換] に設定します。

  2. [次へ] をクリックして [入力の型を定義] ステップに進みます。

    myFilter.m のコード違反およびコード生成の準備状態の問題が検査されます。myFilter.m には問題は検出されません。

入力の型の定義

  1. [入力の型を定義] ページで、myFilterTest をテスト ファイルとして追加するために myFilterTest.m を参照して [開く] をクリックします。

  2. [入力の型の自動定義] をクリックします。

    アプリはテスト ファイルから、in の入力型を complex(double(1x1)) とすることを決定します。

  3. [次へ] をクリックして [実行時の問題の確認] ステップに進みます。

実行時の問題の確認

[実行時の問題の確認] ステップでインストルメント化された MEX 関数 myFilter が生成されます。myFilter の呼び出しを生成された MEX の呼び出しで置き換えたうえで、テスト ファイル myFilterTest が実行されます。アプリが問題を検出した場合には警告およびエラー メッセージが出力されます。メッセージをクリックするとウィンドウ内の問題のあるコードが強調表示され、ここでコードを編集できます。

  1. テスト ファイル myFiltertest.m を選択します。

  2. [問題の確認] をクリックします。

    アプリは問題を検出しません。

  3. [次へ] をクリックして [固定小数点に変換] ステップに進みます。

固定小数点への変換

  1. コードに含まれる変数についてコンパイルされた情報が表示されます。詳細は、変数情報の表示と変更および変数情報の表示と変更 (Fixed-Point Designer)を参照してください。

  2. [設定] ダイアログ ボックスを開くために、[設定] 矢印 をクリックします。

    1. [既定の語長]16 に設定されていることを確認します。

    2. [詳細設定] で、[符号属性]Signed に設定します。

    3. [プロットとレポート] の下で [カスタムのプロット関数]plotDiff に設定します。

  3. [解析] 矢印 をクリックします。テスト ファイルが myFilterTest であることを確認します。

  4. [解析] をクリックします。

    テスト ファイル myFilterTest が実行され、[変数] タブにシミュレーションの最小および最大範囲がアプリによって表示されます。ソフトウェアは、シミュレーション範囲のデータを使用し、既定の型推奨の設定に基づき固定小数点の型を変数ごとに推奨し、[推奨された型] 列に表示します。

  5. 浮動小数点アルゴリズムを固定小数点に変換するには、[変換] をクリックします。

    推奨された型がソフトウェアによって検証され、エントリポイント関数の固定小数点バージョンが生成されます。

数値のテストと比較プロットの表示

  1. [テスト] 矢印 をクリックして [比較プロット用の入力と出力を記録] を選択し、[テスト] をクリックします。

    入力型を定義するために使用したテスト ファイルが実行され、固定小数点 MATLAB コードがテストされます。比較プロット用の入力と出力を記録し、カスタムのプロット関数 plotDiff.m を使用するように指定したので、アプリではこの関数を使用して比較プロットが生成されます。プロットは、固定小数点の結果と浮動小数点の結果があまり一致していないことを示しています。

  2. [設定] で、[DefaultWordLength]24 に増やして再度固定小数点に変換します。

    アプリは myFilter.m を固定小数点に変換し、新しい既定の語長を使用して固定小数点データ型を推奨します。

  3. 数値のテストのステップを再度実行します。

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