Сложные децибелы можно рассчитать по следующей формуле.

Однако это уравнение содержит выражения, такие как расчет журнала, которые неэффективно реализовать на аппаратном обеспечении. Используя таблицу прямого поиска, можно очень близко приблизить это выражение так, чтобы оно было эффективным на оборудовании.
Для начала определите функцию для аппроксимации с помощью таблицы подстановки.
f = @(re,im) 20*log10(sqrt(re.^2 + im.^2));
Чтобы указать допустимые допуски и нужные длины слов в таблице подстановки, используйте FunctionApproximation.Options объект. Чтобы создать таблицу прямого поиска, установите Interpolation имущества Options объект в None.
options = FunctionApproximation.Options('Interpolation', 'None', 'AbsTol', 0.25, 'RelTol', 0, 'WordLengths', 5:10); % 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)
Upper bound for input 2 has been set to the maximum representable value of the type numerictype(0,5,0) = 31.
Upper bound 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 и аппроксимация таблицы подстановки. График справа показывает разницу между выводом исходной функции и соответствующим выводом из сформированной таблицы поиска аппроксимации. Разница между двумя выходами меньше допуска, указанного в Options объект.
compareData = compare(solution)
compareData =
1x2 struct array with fields:
Breakpoints
Original
Approximate

Доступ к TableData имущества solution для использования таблицы подстановки в приложении MATLAB ®.
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 функция.