В этом примере показано, как заменить пользовательскую функцию функцией аппроксимации таблицы подстановки с помощью приложения Fixed-Point Converter.
В этом примере требуются следующие продукты:
MATLAB ®
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 );
Перейдите к рабочей папке, содержащей файл для этого примера.
На вкладке Приложения MATLAB Toolstrip в разделе Создание кода щелкните значок приложения.

Добавление функции точки входа call_custom_fcn в проект, перейдите к файлу call_custom_fcn.mи нажмите кнопку Открыть. По умолчанию приложение сохраняет информацию и параметры этого проекта в текущей папке в файле с именем call_custom_fcn.prj.
Нажмите кнопку Далее (Next), чтобы перейти к шагу Определить типы ввода (Define Input Types).
Экраны приложений call_custom_fcn.m для нарушений кода и проблем преобразования с фиксированной точкой. Приложение открывает страницу «Проверка готовности к созданию кода».
Щелкните Просмотреть проблемы. Приложение указывает, что exp функция не поддерживается для преобразования с фиксированной точкой. Это предупреждение можно проигнорировать, так как вы собираетесь заменить custom_fcn, которая является функцией, вызывающей exp.

Нажмите кнопку Далее (Next), чтобы перейти к шагу Определить типы ввода (Define Input Types).
Добавить custom_test в качестве тестового файла, а затем щелкните Автоопределить типы ввода.
Тестовый файл запускается. Приложение определяет из тестового файла, что x является скалярным двойником.
Нажмите кнопку Далее (Next), чтобы перейти к шагу Преобразовать в фиксированную точку (Convert to Fixed Point).
Выберите вкладку Замены функций.
Приложение указывает, что необходимо заменить exp функция.

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

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

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

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

Щелкните Преобразовать (Convert).
Приложение проверяет предложенные типы и генерирует версию функции начального уровня с фиксированной точкой. call_custom_fcn_fixpt.m.
В списке «Выходные файлы» выберите 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. Если поведение сгенерированного кода с фиксированной точкой недостаточно близко соответствует поведению исходного кода, измените метод интерполяции или количество точек, используемых в таблице поиска, а затем восстановите код.