ルックアップ テーブルでの関数 exp の置き換え
この例では、固定小数点コンバーター アプリを使用して生成される固定小数点コード内で、関数 exp
をルックアップ テーブルの近似に置き換える方法について説明します。
必要条件
この例を実行するには、次の製品をインストールしなければなりません。
MATLAB®
Fixed-Point Designer™
C コンパイラ
サポートされるコンパイラ を参照してください。
mex -setup
を使用して既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。
アルゴリズムとテスト ファイルの作成
exp
を呼び出す MATLAB 関数my_fcn.m
を作成します。function y = my_fcn(x) y = exp(x); end
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 );
固定小数点コンバーター アプリを開く
この例で使用するファイルを含む作業フォルダーに移動します。
MATLAB ツールストリップの [アプリ] タブの [コード生成] の下で、アプリ アイコンをクリックします。
ソース ファイルの選択
プロジェクトにエントリポイント関数
my_fcn
を追加するために、ファイルmy_fcn.m
を探して [開く] をクリックします。既定では、アプリはこのプロジェクトの情報および設定を現在のフォルダーのmy_fcn.prj
というファイルに保存します。[次へ] をクリックして [入力の型を定義] ステップに進みます。
my_fcn.m
のコード違反および固定小数点変換の準備状態の問題が検査されます。[コード生成の準備状態の確認] ページが開きます。
コード生成の準備状態の確認
[問題の確認] をクリックします。関数
exp
が固定小数点の変換に対応していないことがアプリによって示されます。後の手順で、この関数のルックアップ テーブルの置換を指定します。[次へ] をクリックして [入力の型を定義] ステップに進みます。
入力の型の定義
テスト ファイルとして
my_fcn_test
を追加し、[入力の型の自動定義] をクリックします。テスト ファイルが実行されます。アプリはこのテスト ファイルから
x
を double のスカラーに決定します。[次へ] をクリックして [固定小数点に変換] ステップに進みます。
関数 exp からルックアップ テーブルへの置き換え
[関数の置き換え] タブを選択します。
関数
exp
を置き換えなければならないことがアプリによって示されます。[関数の置き換え] タブで関数
exp
を右クリックし、[ルックアップ テーブル]
を選択します。関数
exp
が、ルックアップ テーブルに置き換えられる関数のリストに移動します。既定では、ルックアップ テーブルは線形内挿と 1000 個の点を使用します。[設計の最小値] と [設計の最大値] はAuto
に設定されます。これは、アプリがシミュレーションの実行か派生範囲の計算のいずれかによって検出する設計の最小値と最大値を使用することを意味します。[解析] 矢印 をクリックし、[ヒストグラム データを記録] を選択し、テスト ファイルが
my_fcn_test
であることを確認します。[解析] をクリックします。
シミュレーションが実行されます。[変数] タブにシミュレーションの最小範囲と最大範囲が表示されます。ソフトウェアは、シミュレーション範囲のデータを使用し、既定の型推奨の設定に基づき固定小数点の型を変数ごとに推奨し、[推奨された型] 列に表示します。[変換] オプションが有効になります。
推奨された型を検証して、これらの型がシミュレーション範囲全体をカバーしていることを確認します。ある変数の記録済みのヒストグラム データを表示するには、変数の [推奨された型] フィールドをクリックします。ヒストグラムに、範囲の情報と、シミュレーションの範囲のうち推奨されたデータ型がカバーする割合 (%) が示されます。
固定小数点への変換
[変換] をクリックします。
推奨された型がアプリによって検証され、エントリポイント関数の固定小数点バージョン
my_fcn_fixpt.m
が生成されます。[出力ファイル] リストで、
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 関数と比較することができます。生成された固定小数点コードの動作が元のコードの動作を十分に近似していない場合は、ルックアップ テーブルで使用する内挿法または点の数を変更します。その後コードを再度生成します。