ルックアップ テーブルでの関数 exp の置き換え
この例では、関数 fiaccel
を使用して生成される固定小数点コード内で、関数 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 );
近似の構成
関数exp
を近似する、関数置き換えの構成オブジェクトを作成します。このとき、ルックアップ テーブルの設定には、既定の 1000 点の線形内挿を使用します。
q = coder.approximation('exp');
構成オブジェクトの設定
fixptcfg
という coder.FixptConfig
オブジェクト を作成します。テスト ファイル名を指定して、数値のテストを有効にします。関数置き換えの構成オブジェクトと固定小数点の構成オブジェクトを関連付けます。
fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'my_fcn_test'; fixptcfg.TestNumerics = true; fixptcfg.DefaultWordLength = 16; fixptcfg.addApproximation(q);
固定小数点への変換
固定小数点の MATLAB コードを生成します。
fiaccel -float2fixed fixptcfg my_fcn
生成された固定小数点コードの表示
生成された固定小数点コードを表示するには、my_fcn_fixpt
リンクをクリックします。
生成されたコードには、関数 exp
の代わりに replacement_exp
というルックアップ テーブルの近似が含まれています。固定小数点の変換プロセスで関数の値域が推定され、内挿されたルックアップ テーブルを使用してその関数が置き換えられます。既定では、ルックアップ テーブルは線形内挿と、1000 個の点、テスト ファイルの実行によって求めた最小値と最大値を使用します。
生成された固定小数点の関数 my_fcn_fixpt
は、exp
の代わりにこの近似を呼び出します。
function y = my_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_exp(x), 0, 16, 1, fm); end
これで、生成された固定小数点コードをテストして、結果を元の MATLAB 関数と比較することができます。生成された固定小数点コードの動作が元のコードの動作を十分に近似していない場合は、ルックアップ テーブルで使用する内挿法または点の数を変更してから、コードを生成し直してください。