カスタム関数からルックアップ テーブルへの置き換え
この例では、関数 fiaccel
を使用して、カスタム関数をルックアップ テーブルの近似関数に置き換える方法を説明します。
必要条件
この例を実行するには、次の製品をインストールしなければなりません。
MATLAB®
Fixed-Point Designer™
C コンパイラ
サポートされるコンパイラ を参照してください。
mex -setup
を使用して既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。
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
fiaccel
が call_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 関数と比較することができます。生成された固定小数点コードの動作が元のコードの動作を十分に近似していない場合は、ルックアップ テーブルで使用する内挿法または点の数を変更してから、コードを生成し直してください。