exponenta event banner

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

Связанные темы