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