このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
直接ルックアップ テーブルを使用した複雑な 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 = 1x1 FunctionApproximation.LUTSolution with properties: ID: 3 Feasible: "true"
元の関数とルックアップ テーブルの近似の出力を比較します。左側のプロットは、Problem
オブジェクトで定義された元の関数とルックアップ テーブルの近似の出力を示します。右側のプロットは、元の関数の出力と、生成されたルックアップ テーブルの近似の対応する出力間の違いを示します。2 つの出力の違いは、Options
オブジェクトで指定された許容誤差より小さくなります。
compareData = compare(solution)
compareData = 1x2 struct array with fields: Breakpoints Original Approximate
MATLAB® アプリケーションでルックアップ テーブルを使用するには solution
の TableData
プロパティにアクセスします。
tableData = solution.TableData
tableData = struct with fields: BreakpointValues: {[1x32 double] [1x32 double]} BreakpointDataTypes: [2x1 embedded.numerictype] TableValues: [32x32 double] TableDataType: [1x1 embedded.numerictype] IsEvenSpacing: [1] Interpolation: [None]
関数 approximate
を使用してルックアップ テーブルの近似を含む Simulink™ サブシステムを生成します。
approximate(solution)
HDL アプリケーションでルックアップ テーブルを含む生成したサブシステムを使用できます。HDL Coder™ を使用してルックアップ テーブルが HDL コード生成と互換するか確認するには、関数 checkhdl
を使用します。