exp
Функция с интерполяционной таблицейВ этом примере показано, как заменить exp
функция приближением интерполяционной таблицы в сгенерированной фиксированной точке с помощью codegen
функция.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
MATLAB Coder™
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения.
Создайте функцию MATLAB, my_fcn.m
, это вызывает exp
функция.
function y = my_fcn(x) y = exp(x); end
Создайте тестовый файл, my_fcn_test.m
, это использует my_fcn.m
.
close all x = linspace(-10,10,1e3); for itr = 1e3:-1:1 y(itr) = my_fcn( x(itr) ); end plot( x, y );
Создайте функциональный заменяющий объект настройки аппроксимировать exp
функция, с помощью настроек по умолчанию линейной интерполяции и 1 000 точек в интерполяционной таблице.
q = coder.approximation('exp');
Создайте coder.FixptConfig
объект, fixptcfg
. Укажите, что тестовый файл называет и включает тестирование численных данных. Сопоставьте функциональный заменяющий объект настройки с объектом настройки фиксированной точки.
fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'my_fcn_test'; fixptcfg.TestNumerics = true; fixptcfg.DefaultWordLength = 16; fixptcfg.addApproximation(q);
Сгенерируйте фиксированную точку код MATLAB.
codegen -float2fixed fixptcfg my_fcn
Чтобы просмотреть сгенерированную фиксированную точку, щелкните по ссылке к my_fcn_fixpt
.
Сгенерированный код содержит приближение интерполяционной таблицы, replacement_exp
, для exp
функция. Процесс преобразования фиксированной точки выводит области значений для функции и затем использует интерполированную интерполяционную таблицу, чтобы заменить функцию. По умолчанию интерполяционная таблица использует линейную интерполяцию, 1 000 точек и минимальные и максимальные значения, обнаруженные путем выполнения тестового файла.
Сгенерированная функция фиксированной точки, my_fcn_fixpt
, вызовы это приближение вместо того, чтобы вызвать exp
.
function y = my_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_exp(x), 0, 16, 1, fm); end
Можно теперь протестировать сгенерированную фиксированную точку и сравнить результаты с исходной функцией MATLAB. Если поведение сгенерированной фиксированной точки не совпадает с поведением оригинального кода достаточно тесно, изменяет метод интерполяции или число точек, используемое в интерполяционной таблице, и затем регенерирует код.