Main Content

ルックアップ テーブルでの関数 exp の置き換え

この例では、固定小数点コンバーター アプリを使用して生成される固定小数点コード内で、関数 exp をルックアップ テーブルの近似に置き換える方法について説明します。

必要条件

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

アルゴリズムとテスト ファイルの作成

  1. exp を呼び出す MATLAB 関数 my_fcn.m を作成します。

    function y = my_fcn(x)
        y = exp(x);
    end
  2. my_fcn.m を使用するテスト ファイル my_fcn_test.m を作成します。

    close all
    
    x = linspace(-10,10,1e3);
    for itr = 1e3:-1:1
        y(itr) = my_fcn( x(itr) );
    end
    plot( x, y );

固定小数点コンバーター アプリを開く

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

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

ソース ファイルの選択

  1. プロジェクトにエントリポイント関数 my_fcn を追加するために、ファイル my_fcn.m を探して [開く] をクリックします。既定では、アプリはこのプロジェクトの情報および設定を現在のフォルダーの my_fcn.prj というファイルに保存します。

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

    my_fcn.m のコード違反および固定小数点変換の準備状態の問題が検査されます。[コード生成の準備状態の確認] ページが開きます。

コード生成の準備状態の確認

  1. [問題の確認] をクリックします。関数 exp が固定小数点の変換に対応していないことがアプリによって示されます。後の手順で、この関数のルックアップ テーブルの置換を指定します。

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

入力の型の定義

  1. テスト ファイルとして my_fcn_test を追加し、[入力の型の自動定義] をクリックします。

    テスト ファイルが実行されます。アプリはこのテスト ファイルから x を double のスカラーに決定します。

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

関数 exp からルックアップ テーブルへの置き換え

  1. [関数の置き換え] タブを選択します。

    関数 exp を置き換えなければならないことがアプリによって示されます。

  2. [関数の置き換え] タブで関数 exp を右クリックし、[ルックアップ テーブル] を選択します。

    関数 exp が、ルックアップ テーブルに置き換えられる関数のリストに移動します。既定では、ルックアップ テーブルは線形内挿と 1000 個の点を使用します。[設計の最小値][設計の最大値]Auto に設定されます。これは、アプリがシミュレーションの実行か派生範囲の計算のいずれかによって検出する設計の最小値と最大値を使用することを意味します。

  3. [解析] 矢印 をクリックし、[ヒストグラム データを記録] を選択し、テスト ファイルが my_fcn_test であることを確認します。

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

    シミュレーションが実行されます。[変数] タブにシミュレーションの最小範囲と最大範囲が表示されます。ソフトウェアは、シミュレーション範囲のデータを使用し、既定の型推奨の設定に基づき固定小数点の型を変数ごとに推奨し、[推奨された型] 列に表示します。[変換] オプションが有効になります。

  5. 推奨された型を検証して、これらの型がシミュレーション範囲全体をカバーしていることを確認します。ある変数の記録済みのヒストグラム データを表示するには、変数の [推奨された型] フィールドをクリックします。ヒストグラムに、範囲の情報と、シミュレーションの範囲のうち推奨されたデータ型がカバーする割合 (%) が示されます。

固定小数点への変換

  1. [変換] をクリックします。

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

  2. [出力ファイル] リストで、my_fcn_fixpt.m を選択します。

    変換プロセスによって、関数 exp に対応する replacement_exp というルックアップ テーブルの近似が生成されています。

    生成された固定小数点の関数 my_fcn_fixpt.m は、exp の代わりにこの近似を呼び出します。固定小数点の変換プロセスで関数の値域が推定され、内挿されたルックアップ テーブルを使用してその関数が置き換えられます。既定では、ルックアップ テーブルは線形内挿と、1000 個の点、テスト ファイルの実行によって求めた最小値と最大値を使用します。

    function y = my_fcn_fixpt(x)
        fm = get_fimath();
    
        y = fi(replacement_exp(x), 0, 16, 1, fm);
    end

    これで、生成された固定小数点コードをテストして、結果を元の MATLAB 関数と比較することができます。生成された固定小数点コードの動作が元のコードの動作を十分に近似していない場合は、ルックアップ テーブルで使用する内挿法または点の数を変更します。その後コードを再度生成します。

関連するトピック