Замените Функцию exp на Интерполяционную таблицу

Этот пример показывает, как заменить функцию exp на приближение интерполяционной таблицы в сгенерированной фиксированной точке с помощью функции fiaccel.

Предпосылки

Чтобы завершить этот пример, необходимо установить следующие продукты:

Создайте алгоритм и тестовые файлы

  1. Создайте функцию MATLAB, my_fcn.m, который вызывает функцию exp.

    function y = my_fcn(x)
      y = exp(x);
    end
    
  2. Создайте тестовый файл, 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.

fiaccel -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. Если поведение сгенерированной фиксированной точки не совпадает с поведением оригинального кода достаточно тесно, изменяет метод интерполяции или число точек, используемое в интерполяционной таблице, и затем регенерирует код.

Похожие темы