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

В этом примере показано, как заменить exp функция приближением интерполяционной таблицы в фиксированной точке, сгенерированной с помощью приложения Fixed-Point Converter.

Необходимые условия

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

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

  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 );

Откройте приложение Fixed-Point Converter

  1. Перейдите к папке работы, которая содержит файл для этого примера.

  2. На вкладке MATLAB Toolstrip Apps, под Code Generation, кликают по значку приложения.

Выберите Source Files

  1. Чтобы добавить точку входа функционируют my_fcn к проекту просмотрите к файлу my_fcn.m, и затем нажмите Open. По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем my_fcn.prj.

  2. Нажмите Next, чтобы перейти к шагу Define Input Types.

    Экраны приложения my_fcn.m для нарушений регулярной кодовой последовательности и проблем готовности преобразования фиксированной точки. Приложение открывает страницу Review Code Generation Readiness.

Рассмотрите готовность генерации кода

  1. Нажмите Review Issues. Приложение указывает что exp функция не поддерживается для преобразования фиксированной точки. На более позднем шаге вы задаете замену интерполяционной таблицы для этой функции.

  2. Нажмите Next, чтобы перейти к шагу Define Input Types.

Определите входные типы

  1. Добавьте my_fcn_test как тестовый файл и затем нажимают Autodefine Input Types.

    Запуски тестового файла. Приложение определяет из тестового файла что x скаляр дважды.

  2. Нажмите Next, чтобы перейти к шагу Convert to Fixed Point.

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

  1. Выберите вкладку Function Replacements.

    Приложение указывает, что необходимо заменить exp функция.

  2. На вкладке Function Replacements щелкните правой кнопкой по exp функционируйте и выберите Lookup Table.

    Приложение перемещает exp функционируйте к списку функций, которые он заменит на Интерполяционную таблицу. По умолчанию интерполяционная таблица использует линейную интерполяцию и 1 000 точек. Design Min и Design Max установлены в Auto что означает, что приложение использует проект минимальные и максимальные значения, которые это обнаруживает или выполнением симуляции или вычислением выведенных областей значений.

  3. Кликните по стреле Analyze, выберите Log data for histogram и проверьте, что тестовым файлом является my_fcn_test.

  4. Нажмите Analyze.

    Запуски симуляции. На вкладке Variables, минимуме симуляции отображений приложения и максимальных областях значений. Используя данные об области значений симуляции, программное обеспечение предлагает фиксированные точки для каждой переменной на основе настроек предложения по типу по умолчанию и отображает их в столбце Proposed Type. Приложение включает опцию Convert.

  5. Исследуйте предложенные типы и проверьте, что они покрывают полную область значений симуляции. Чтобы просмотреть регистрируемые данные о гистограмме для переменной, кликните по ее полю Proposed Type. Гистограмма предоставляет информацию об области значений и процент области значений симуляции, покрытой предложенным типом данных.

Преобразуйте в фиксированную точку

  1. Нажмите Convert.

    Приложение подтверждает предложенные типы и генерирует версию фиксированной точки функции точки входа, my_fcn_fixpt.m.

  2. В списке Выходных файлов выберите my_fcn_fixpt.m.

    Процесс преобразования генерирует приближение интерполяционной таблицы, replacement_exp, для exp функция.

    Сгенерированная функция фиксированной точки, my_fcn_fixpt.m, вызовы это приближение вместо того, чтобы вызвать exp. Процесс преобразования фиксированной точки выводит области значений для функции и затем использует интерполированную интерполяционную таблицу, чтобы заменить функцию. По умолчанию интерполяционная таблица использует линейную интерполяцию, 1 000 точек и минимальные и максимальные значения, обнаруженные путем выполнения тестового файла.

    function y = my_fcn_fixpt(x)
        fm = get_fimath();
    
        y = fi(replacement_exp(x), 0, 16, 1, fm);
    end

    Можно теперь протестировать сгенерированную фиксированную точку и сравнить результаты с исходной функцией MATLAB. Если поведение сгенерированной фиксированной точки не совпадает с поведением оригинального кода достаточно тесно, измените метод интерполяции или число точек, используемое в интерполяционной таблице. Затем регенерируйте код.

Похожие темы