В этом примере показано, как заменить пользовательскую функцию на функцию приближения интерполяционной таблицы с помощью приложения Fixed-Point Converter.
Этот пример требует следующих продуктов:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. «Поддерживаемые компиляторы».
Можно использовать mex -setup
для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
В локальной папке с возможностью записи:
Создайте функцию 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 );
Перейдите к рабочей папке, содержащей файл для этого примера.
На вкладке Apps MATLAB Toolstrip, в разделе 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
к списку функций, которые будут заменены интерполяционной таблицей. По умолчанию в интерполяционной таблице используется линейная интерполяция и 1000 точек. Приложение устанавливает 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
.
В списке Output Files выберите 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. Если поведение сгенерированного кода с фиксированной точкой недостаточно тесно совпадает с поведением оригинального кода, измените метод интерполяции или число точек, используемых в интерполяционной таблице, и затем перегенерируйте код.