Этот пример показывает, как заменить пользовательскую функцию на функцию приближения интерполяционной таблицы использование функции codegen
.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
MATLAB Coder™
Фиксированная точка Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).
Создайте функцию MATLAB, custom_fcn.m
m. Это - функция, которую вы хотите заменить.
function y = custom_fcn(x) y = 1./(1+exp(-x)); end
Создайте функцию обертки, которая вызывает custom_fcn.m
m.
function y = call_custom_fcn(x) y = custom_fcn(x); end
Создайте тестовый файл, custom_test.m
, который использует call_custom_fcn.m
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);
Создайте объект coder.FixptConfig
, fixptcfg
. Укажите, что тестовый файл называет и включает тестирование численных данных. Сопоставьте функциональный заменяющий объект настройки с объектом настройки фиксированной точки.
fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'custom_test'; fixptcfg.TestNumerics = true; fixptcfg.addApproximation(q);
Сгенерируйте фиксированную точку код MATLAB.
codegen -float2fixed fixptcfg call_custom_fcn
codegen
генерирует фиксированную точку код MATLAB в call_custom_fcn_fixpt.m
m.
Чтобы просмотреть сгенерированную фиксированную точку, щелкните по ссылке к call_custom_fcn_fixpt
.
Сгенерированный код содержит приближение интерполяционной таблицы, replacement_custom_fcn
, для функции 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. Если поведение сгенерированной фиксированной точки не совпадает с поведением оригинального кода достаточно тесно, изменяет метод интерполяции или число точек, используемое в интерполяционной таблице, и затем регенерирует код.