В этом примере показано, как заменить exp
функция с приближением интерполяционной таблицы в коде с фиксированной точкой, сгенерированная с помощью приложения Fixed-Point Converter.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. «Поддерживаемые компиляторы».
Можно использовать mex -setup
для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
Создайте функцию MATLAB, my_fcn.m
, который вызывает exp
функция.
function y = my_fcn(x) y = exp(x); end
Создайте тестовый файл, my_fcn_test.m
, который использует my_fcn.m
.
close all x = linspace(-10,10,1e3); for itr = 1e3:-1:1 y(itr) = my_fcn( x(itr) ); end plot( x, y );
Перейдите к рабочей папке, содержащей файл для этого примера.
На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения.
Чтобы добавить функцию точки входа my_fcn
в проект перейдите к файлу my_fcn.m
, а затем нажмите Open. По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем my_fcn.prj
.
Щелкните Next, чтобы перейти к Define Input Types шагу.
Окно приложения my_fcn.m
для нарушений кода и проблем готовности преобразования с фиксированной точкой. Приложение открывает страницу Review Code Generation Readiness.
Нажмите Review Issues. Приложение указывает, что exp
функция не поддерживается для преобразования с фиксированной точкой. На более позднем этапе вы задаете замену интерполяционной таблицы для этой функции.
Щелкните Next, чтобы перейти к Define Input Types шагу.
Добавить my_fcn_test
в качестве тестового файла и затем нажмите Autodefine Input Types.
Тестовый файл запускается. Приложение определяет из тестового файла, что x является скалярным двойником.
Щелкните Next, чтобы перейти к Convert to Fixed Point шагу.
Выберите вкладку Function Replacements.
Приложение указывает, что вы должны заменить exp
функция.
На вкладке Function Replacements щелкните правой кнопкой мыши по exp
и выберите Lookup Table
.
Приложение перемещает exp
функции в списке функций, которые будут заменены интерполяционной таблицей. По умолчанию в интерполяционной таблице используется линейная интерполяция и 1000 точек. Design Min и Design Max установлены в Auto
что означает, что приложение использует минимальное и максимальное значения проекта, которые оно обнаруживает путем выполнения симуляции или вычисления производных областей значений.
Щелкните стрелку Analyze, выберите Log data for histogram и проверьте, что тестовый файл my_fcn_test
.
Нажмите Analyze.
Симуляция выполняется. На вкладке Variables приложение отображает минимальные и максимальные области значений симуляции. Используя данные области значений симуляции, программное обеспечение предлагает фиксированные точки для каждой переменной на основе настроек предложения по типу по умолчанию и отображает их в столбце Proposed Type. Приложение включает опцию Convert.
Исследуйте предлагаемые типы и проверьте, что они охватывают полную область значений симуляции. Чтобы просмотреть записанные данные гистограммы для переменной, щелкните поле Proposed Type. Гистограмма предоставляет информацию о области значений и процентном отношении области симуляций, охватываемой предложенным типом данных.
Нажмите Convert.
Приложение проверяет предлагаемые типы и генерирует версию функции точки входа с фиксированной точкой my_fcn_fixpt.m
.
В списке Output Files выберите my_fcn_fixpt.m
.
Процесс преобразования генерирует приближение интерполяционной таблицы, replacement_exp
, для exp
функция.
Сгенерированная функция с фиксированной точкой, my_fcn_fixpt.m
, вызывает это приближение вместо вызова exp
. Процесс преобразования с фиксированной точкой выводит области значений для функции, а затем использует интерполированную интерполированную интерполяционную таблицу, чтобы заменить функцию. По умолчанию в интерполяционной таблице используется линейная интерполяция, 1000 точек и минимальные и максимальные значения, обнаруженные при запуске тестового файла.
function y = my_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_exp(x), 0, 16, 1, fm); end
Теперь можно протестировать сгенерированный код с фиксированной точкой и сравнить результаты с исходной функцией MATLAB. Если поведение сгенерированного кода с фиксированной точкой недостаточно тесно совпадает с поведением оригинального кода, измените метод интерполяции или число точек, используемых в интерполяционной таблице. Затем перегенерируйте код.