直接ルックアップ テーブルを使用した複雑な dB の計算
以下の式を使用して複雑なデシベル レベルを計算できます。

ただし、この方程式には、ハードウェアに効率良く実装されない対数計算などの式が含まれています。直接ルックアップ テーブルを使用すると、ハードウェア上で効率良くこの式を非常に厳密に近似できます。
最初に、ルックアップ テーブルで近似する関数を定義します。
f = @(re,im) 20*log10(sqrt(re.^2 + im.^2));
受け入れ可能な許容誤差、およびルックアップ テーブルで使用する目的の語長を指定するには、FunctionApproximation.Options オブジェクトを使用します。直接ルックアップ テーブルを生成するには、Options オブジェクトの Interpolation プロパティを None に設定します。ApproximateSolutionType プロパティを使用して、ルックアップ テーブルを Simulink® サブシステムとして返すか MATLAB® 関数として返すかを指定します。
options = FunctionApproximation.Options('Interpolation', 'None', 'AbsTol', 0.25, 'RelTol', 0, 'WordLengths', 5:10, 'ApproximateSolutionType', 'Simulink'); % Problem setup problem = FunctionApproximation.Problem(f, 'Options', options); problem.InputTypes = [numerictype(0,5,0) numerictype(0,5,0)]; problem.InputLowerBounds = [1 1]; problem.InputUpperBounds = [Inf Inf]; % upper bound will clip to input types range problem.OutputType = numerictype(0,10,4);
関数 solve は最適なルックアップ テーブルを FunctionApproximation.LUTSolution オブジェクトとして返します。ソフトウェアでルックアップ テーブルのパラメーターが最適化されると、MATLAB にはルックアップ テーブルで使用される合計メモリ、ルックアップ テーブルのデータに使用される語長、および元の関数とルックアップ テーブルによる近似間の出力における最大差など、最適化の各反復に関する情報が表示されます。最適なソリューションは、許容誤差および Options オブジェクトで定義された他の制約を満たす最小メモリを使用してルックアップ テーブルとして定義されます。
solution = solve(problem)
Maximum for input 2 has been set to the maximum representable value of the type numerictype(0,5,0) = 31.
Maximum for input 1 has been set to the maximum representable value of the type numerictype(0,5,0) = 31.
| ID | Memory (bits) | Feasible | Table Size | Intermediate WLs | TableData WL | Error(Max,Current) |
| 0 | 10240 | 1 | [32 32] | [5 5] | 10 | 2.500000e-01, 3.119254e-02 |
| 1 | 9216 | 1 | [32 32] | [5 5] | 9 | 2.500000e-01, 6.228219e-02 |
| 2 | 8192 | 1 | [32 32] | [5 5] | 8 | 2.500000e-01, 1.248211e-01 |
| 3 | 7168 | 1 | [32 32] | [5 5] | 7 | 2.500000e-01, 2.481815e-01 |
Best Solution
| ID | Memory (bits) | Feasible | Table Size | Intermediate WLs | TableData WL | Error(Max,Current) |
| 3 | 7168 | 1 | [32 32] | [5 5] | 7 | 2.500000e-01, 2.481815e-01 |
solution =
1×1 FunctionApproximation.LUTSolution with properties:
ID: 3
Feasible: "true"
元の関数とルックアップ テーブルによる近似の出力を比較します。左側のプロットは、Problem オブジェクトで定義された元の関数とルックアップ テーブルによる近似の出力を示します。右側のプロットは、元の関数の出力と、生成されたルックアップ テーブルによる近似の対応する出力間の違いを示します。2 つの出力の違いは、Options オブジェクトで指定された許容誤差より小さくなります。
compareData = compare(solution)
compareData =
1×2 struct array with fields:
Breakpoints
Original
Approximate

MATLAB アプリケーションでルックアップ テーブルを使用するには solution の TableData プロパティにアクセスします。
tableData = solution.TableData
tableData =
struct with fields:
BreakpointValues: {[1×32 double] [1×32 double]}
BreakpointDataTypes: [2×1 embedded.numerictype]
TableValues: [32×32 double]
TableDataType: [1×1 embedded.numerictype]
IsEvenSpacing: 1
Interpolation: None
関数 approximate を使用してルックアップ テーブルによる近似を含む Simulink サブシステムを生成します。
approximate(solution)

HDL アプリケーションでルックアップ テーブルを含む生成したサブシステムを使用できます。HDL Coder™ を使用してルックアップ テーブルが HDL コード生成と互換するか確認するには、関数 checkhdl を使用します。