Main Content

カスタム関数からルックアップ テーブルへの置き換え

この例では、関数 fiaccel を使用して、カスタム関数をルックアップ テーブルの近似関数に置き換える方法を説明します。

必要条件

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

MATLAB 関数 custom_fcn.m を作成します。これが、置き換える元の関数です。

function y = custom_fcn(x)
  y = 1./(1+exp(-x));
end

custom_fcn.m を呼び出すラッパー関数を作成します。

function y = call_custom_fcn(x)
  y = custom_fcn(x);
end

call_custom_fcn.m を使用するテスト ファイル custom_test.m を作成します。

close all

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

custom_fcn を近似する、関数置き換えの構成オブジェクトを作成します。カスタム関数の関数ハンドルを指定し、ルックアップ テーブルで使用する点の数を 50 に設定します。

q = coder.approximation('Function','custom_fcn',...
    'CandidateFunction',@custom_fcn,...
    'NumberOfPoints',50);

fixptcfg という coder.FixptConfig オブジェクト を作成します。テスト ファイル名を指定して、数値のテストを有効にします。関数置き換えの構成オブジェクトと固定小数点の構成オブジェクトを関連付けます。

fixptcfg = coder.config('fixpt');
fixptcfg.TestBenchName = 'custom_test';
fixptcfg.TestNumerics = true;
fixptcfg.addApproximation(q);

固定小数点の MATLAB コードを生成します。

fiaccel -float2fixed fixptcfg call_custom_fcn

fiaccelcall_custom_fcn_fixpt.m に固定小数点の MATLAB コードを生成します。

生成された固定小数点コードを表示するには、call_custom_fcn_fixpt のリンクをクリックします。

生成されたコードには、関数 custom_fcn の代わりに replacement_custom_fcn というルックアップ テーブルの近似が含まれています。固定小数点の変換プロセスで関数の値域が推定され、内挿されたルックアップ テーブルを使用してその関数が置き換えられます。ルックアップ テーブルの点の数は、指定したとおりの 50 です。既定では、ルックアップ テーブルは線形内挿を使用し、その最小値と最大値はテスト ファイルを実行して求められます。

生成された固定小数点の関数 call_custom_fcn_fixpt は、custom_fcn の代わりにこの近似を呼び出します。

function y = call_custom_fcn_fixpt(x)
  fm = get_fimath();

  y = fi(replacement_custom_fcn(x), 0, 14, 14, fm);
end

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

関連するトピック