Этот пример показывает, как заменить пользовательскую функцию на функцию приближения интерполяционной таблицы использование приложения Fixed-Point Converter.
Этот пример требует следующих продуктов:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).
В локальной, перезаписываемой папке:
Создайте функцию MATLAB, custom_fcn.m
, который является функцией, которую вы хотите заменить.
function y = custom_fcn(x) y = 1./(1+exp(-x)); end
Создайте функцию обертки, call_custom_fcn.m
, который вызывает custom_fcn.m
.
function y = call_custom_fcn(x) y = custom_fcn(x); end
Создайте тестовый файл, 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 Toolstrip Apps, под Code Generation, кликают по значку приложения.
Чтобы добавить точку входа функционируют call_custom_fcn
к проекту, обзор к файлу call_custom_fcn.m
, и затем нажать Open. По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем call_custom_fcn.prj
.
Нажмите Next, чтобы перейти к шагу Define Input Types.
Экраны приложения call_custom_fcn.m
для нарушений регулярной кодовой последовательности и проблем преобразования фиксированной точки. Приложение открывает страницу Review Code Generation Readiness.
Нажмите Review Issues. Приложение указывает, что функция exp
не поддерживается для преобразования фиксированной точки. Можно проигнорировать это предупреждение, потому что вы собираетесь заменить custom_fcn
, который является функцией, которая вызывает exp
.
Нажмите Next, чтобы перейти к шагу Define Input Types.
Добавьте custom_test
как тестовый файл и затем нажмите Autodefine Input Types.
Выполнения тестового файла. Приложение решает от тестового файла, что x
является скаляром дважды.
Нажмите Next, чтобы перейти к шагу Convert to Fixed Point.
Выберите вкладку Function Replacements.
Приложение указывает, что необходимо заменить функцию exp
.
Введите имя функции, чтобы заменить, custom_fcn
, выбрать Lookup Table
, и затем щелкнуть.
Приложение добавляет custom_fcn
в список функций, которые это заменит на Интерполяционную таблицу. По умолчанию интерполяционная таблица использует линейную интерполяцию и 1 000 точек. Приложение устанавливает Design Min и Design Max к Auto
, что означает, что приложение использует проект минимальные и максимальные значения, которые это обнаруживает или выполнением симуляции или вычислением выведенных областей значений.
Кликните по стрелке Analyze, выберите Log data for histogram и проверьте, что тестовым файлом является call_custom_test
.
Нажмите Analyze.
Выполнения симуляции. Минимум симуляции отображений приложения и максимум располагаются на вкладке Variables. Используя данные об области значений симуляции, программное обеспечение предлагает фиксированные точки для каждой переменной на основе настроек предложения по типу по умолчанию и отображает их в столбце Proposed Type. Опция Convert теперь включена.
Исследуйте предложенные типы и проверьте, что они покрывают полную область значений симуляции. Чтобы просмотреть регистрируемые данные о гистограмме для переменной, кликните по ее полю Proposed Type. Гистограмма предоставляет информацию об области значений и процент области значений симуляции, покрытой предложенным типом данных.
Нажмите Convert.
Приложение подтверждает предложенные типы и генерирует версию фиксированной точки функции точки входа, call_custom_fcn_fixpt.m
.
В списке Выходных файлов выберите 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. Если поведение сгенерированной фиксированной точки не совпадает с поведением оригинального кода достаточно тесно, изменяет метод интерполяции или число точек, используемое в интерполяционной таблице, и затем регенерирует код.