Замените пользовательскую функцию на интерполяционную таблицу

В этом примере показано, как заменить пользовательскую функцию на функцию приближения интерполяционной таблицы использование MATLAB® Приложение Coder™.

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

Этот пример требует следующих продуктов:

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

В локальной, перезаписываемой папке:

  1. Создайте функцию MATLAB, custom_fcn.m который является функцией, которую вы хотите заменить.

    function y = custom_fcn(x)
        y = 1./(1+exp(-x));
    end
  2. Создайте функцию обертки, call_custom_fcn.m, это вызывает custom_fcn.m.

    function y = call_custom_fcn(x)
        y = custom_fcn(x);
    end
  3. Создайте тестовый файл, custom_test.m, это использует call_custom_fcn.

    close all
    clear all
    
    x = linspace(-10,10,1e3);
    for itr = 1e3:-1:1
       y(itr) = call_custom_fcn( x(itr) );
    end
    plot( x, y );
    

Откройте приложение MATLAB Coder

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

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

Выберите Source Files

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

Включите преобразование фиксированной точки

  1. Установите Numeric Conversion на Convert to fixed point.

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

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

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

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

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

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

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

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

  2. Нажмите Next, чтобы перейти к шагу Check for Run-Time Issues.

Проверяйте на проблемы во время выполнения

Шаг Check for Run-Time Issues генерирует оснащенный MEX. Это запускает тестовый файл custom_test заменяя вызовы call_custom_fcn с вызовами сгенерированной MEX-функции. Если приложение находит проблемы, оно предоставляет предупреждающие сообщения и сообщения об ошибке. Можно кликнуть по сообщению, чтобы подсветить проблематичный код в панели, где можно отредактировать код.

  1. На странице Check for Run-Time Issues приложение заполняет поле тестового файла с custom_test, тестовый файл, что вы раньше задавали входные типы.

  2. Нажмите Check for Issues.

    Приложение не обнаруживает проблемы.

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

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

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

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

  2. Введите имя функции, чтобы заменить, custom_fcn, выберите Lookup Table, и затем щелкните.

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

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

  4. Нажмите Analyze.

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

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

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

  1. Нажмите Convert.

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

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

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

    Сгенерированная функция фиксированной точки, call_custom_fcn_fixpt.m, вызовы это приближение вместо того, чтобы вызвать custom_fcn.

    function y = call_custom_fcn_fixpt(x)
        fm = get_fimath();
    
        y = fi(replacement_custom_fcn(x), 0, 16, 16, fm);
    end

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