В этом примере показано, как заменить exp
функция с приближением интерполяционной таблицы в сгенерированном коде с фиксированной точкой fiaccel
функция.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
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
function, используя настройки по умолчанию линейной интерполяции и 1000 точек в интерполяционной таблице.
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 с фиксированной точкой.
fiaccel -float2fixed fixptcfg my_fcn
Чтобы просмотреть сгенерированный код фиксированной точки, щелкните ссылку на my_fcn_fixpt
.
Сгенерированный код содержит приближение интерполяционной таблицы replacement_exp
, для exp
функция. Процесс преобразования с фиксированной точкой выводит области значений для функции, а затем использует интерполированную интерполированную интерполяционную таблицу, чтобы заменить функцию. По умолчанию в интерполяционной таблице используется линейная интерполяция, 1000 точек и минимальные и максимальные значения, обнаруженные при запуске тестового файла.
Сгенерированная функция с фиксированной точкой, my_fcn_fixpt
, вызывает это приближение вместо вызова exp
.
function y = my_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_exp(x), 0, 16, 1, fm); end
Теперь можно протестировать сгенерированный код с фиксированной точкой и сравнить результаты с исходной функцией MATLAB. Если поведение сгенерированного кода с фиксированной точкой недостаточно тесно совпадает с поведением оригинального кода, измените метод интерполяции или число точек, используемых в интерполяционной таблице, и затем перегенерируйте код.