exponenta event banner

Замена пользовательской функции таблицей подстановки

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

Предпосылки

В этом примере требуются следующие продукты:

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

В локальной папке с возможностью записи:

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

Откройте приложение конвертера с фиксированной точкой

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

  2. На вкладке Приложения MATLAB Toolstrip в разделе Создание кода щелкните значок приложения.

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

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

  2. Нажмите кнопку Далее (Next), чтобы перейти к шагу Определить типы ввода (Define Input Types).

    Экраны приложений call_custom_fcn.m для нарушений кода и проблем преобразования с фиксированной точкой. Приложение открывает страницу «Проверка готовности к созданию кода».

Проверка готовности к созданию кода

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

  2. Нажмите кнопку Далее (Next), чтобы перейти к шагу Определить типы ввода (Define Input Types).

Определение типов ввода

  1. Добавить custom_test в качестве тестового файла, а затем щелкните Автоопределить типы ввода.

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

  2. Нажмите кнопку Далее (Next), чтобы перейти к шагу Преобразовать в фиксированную точку (Convert to Fixed Point).

Заменить custom_fcn на таблицу подстановки

  1. Выберите вкладку Замены функций.

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

  2. Введите имя заменяемой функции, custom_fcn, выберите Lookup Tableи нажмите кнопку.

    Приложение добавляет custom_fcn в список функций, которые будут заменены таблицей подстановки. По умолчанию в таблице подстановки используется линейная интерполяция и 1000 точек. Приложение устанавливает для параметра «Минимум проектирования» и «Максимум проектирования» значение Auto это означает, что приложение использует минимальные и максимальные значения дизайна, которые оно обнаруживает, выполняя моделирование или вычисляя производные диапазоны.

  3. Щелкните стрелку Analyze, выберите Log data for histogram и убедитесь, что тестовый файл call_custom_test.

  4. Щелкните Анализ (Analyze).

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

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

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

  1. Щелкните Преобразовать (Convert).

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

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

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

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

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