Main Content

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

この例では、関数 fiaccel を使用して生成される固定小数点コード内で、関数 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 );
    

近似の構成

関数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 関数と比較することができます。生成された固定小数点コードの動作が元のコードの動作を十分に近似していない場合は、ルックアップ テーブルで使用する内挿法または点の数を変更してから、コードを生成し直してください。

関連するトピック