Этот пример показывает, как сгенерировать код MATLAB® с одинарной точностью из кода MATLAB с двойной точностью. Этот пример показывает рабочий процесс преобразования с одинарной точностью, что вы используете когда это необходимо, чтобы видеть код MATLAB с одинарной точностью или опции верификации использования. Опционально, можно также сгенерировать код C/C++ с одинарной точностью.
Чтобы завершить этот пример, установите следующие продукты:
MATLAB
MATLAB Coder™
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).
Создайте локальную рабочую папку, например, c:\ex_2ndOrder_filter
.
Изменитесь на папку docroot\toolbox\fixpoint\examples
. В командной строке MATLAB, введите:
cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
Скопируйте ex_2ndOrder_filter.m
и файлы ex_2ndOrder_filter_test.m
к вашей локальной рабочей папке.
Ввод | Имя | Описание |
---|---|---|
Функциональный код | ex_2ndOrder_filter.m | Функция MATLAB точки входа |
Тестовый файл | ex_2ndOrder_filter_test.m | Скрипт MATLAB, который тестирует |
Создайте объект настройки с одинарной точностью. Задайте имя тестового файла. Проверьте код с одинарной точностью с помощью тестового файла. Постройте ошибку между кодом с двойной точностью и кодом с одинарной точностью. Используйте значения по умолчанию для других свойств.
scfg = coder.config('single'); scfg.TestBenchName = 'ex_2ndOrder_filter_test'; scfg.TestNumerics = true; scfg.LogIOForComparisonPlotting = true;
Чтобы преобразовать функцию MATLAB с двойной точностью, ex_2ndOrder_filter
, к коду MATLAB с одинарной точностью, использует функцию codegen
с опцией -double2single
.
codegen -double2single scfg ex_2ndOrder_filter
codegen
анализирует код с двойной точностью. Процесс преобразования выводит типы путем выполнения тестового файла, потому что вы не задавали входные типы для функции ex_2ndOrder_filter
. Процесс преобразования выбирает типы с одинарной точностью для переменных с двойной точностью. Это выбирает int32
для индексных переменных. Когда преобразование завершено, codegen
генерирует отчет предложения по типу.
Чтобы видеть типы что процесс преобразования, выбранный для переменных, откройте отчет предложения по типу для функции ex_2ndOrder_filter
. Щелкните по ссылке ex_2ndOrder_filter_report.html
.
Отчет открывается в веб-браузере. Процесс преобразования преобразовал:
Переменные с двойной точностью к single
.
Индекс i
к int32
. Процесс преобразования бросает переменные индекса и размерности к int32
.
Просматривать отчет для генерации кода MATLAB с одинарной точностью, в Командном окне:
Прокрутите к шагу Generate Single-Precision Code
. Щелкните по ссылке View report.
В панели MATLAB Source нажмите ex_2ndOrder_filter_single
.
Отчет генерации кода отображает код MATLAB с одинарной точностью для ex_2ndOrder_filter
.
Когда вы генерируете код с одинарной точностью, codegen
позволяет подсветить потенциальных проблем типа данных в отчетах генерации кода. Если codegen
не может удалить операцию с двойной точностью, отчет подсвечивает выражение MATLAB, которое приводит к операции. Кликните по вкладке Code Insights. Отсутствие потенциальных проблем типа данных указывает, что никакие операции с двойной точностью не остаются.
Вы видите графики сравнения для входа x
и вывода y
, потому что вы выбрали, чтобы регистрировать вводы и выводы для графиков сравнения.
Если вы также хотите сгенерировать код С с одинарной точностью, создайте объект настройки кода для генерации кода C. Используйте этот объект настройки с опцией -config
функции codegen
. Например:
Создайте объект настройки кода для генерации статической библиотеки C.
cfg = coder.config('lib');
Сгенерируйте код С. Включите генерацию отчета генерации кода.
codegen -double2single scfg -config cfg ex_2ndOrder_filter -report
Чтобы просмотреть отчет генерации кода для генерации кода C, щелкните по ссылке View Report.
В панели Generated Code нажмите ex_2ndOrder_filter.c
.
Переменные с двойной точностью имеют, вводят float
в коде С.
Индекс i
является целым числом.
Когда вы генерируете код с одинарной точностью, codegen
позволяет подсветить потенциальных проблем типа данных в отчете генерации кода. Если codegen
не может удалить операцию с двойной точностью, отчет подсвечивает выражение MATLAB, которое приводит к операции.
Кликните по вкладке Code Insights. Затем расширьте Potential data type issues. Отсутствие операций с двойной точностью указывает, что никакие операции с двойной точностью не остаются.
codegen
| coder.SingleConfig
| coder.config