Замените функцию 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. На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения.

Выбор исходных файлов

  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 функции в списке функций, которые будут заменены интерполяционной таблицей. По умолчанию в интерполяционной таблице используется линейная интерполяция и 1000 точек. 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. В списке Output Files выберите my_fcn_fixpt.m.

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

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

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

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

Похожие темы