В этом примере показано, как сгенерировать код С с одинарной точностью из кода MATLAB® с двойной точностью в командной строке.
Чтобы завершить этот пример, установите следующие продукты:
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, который тестирует |
Определить тип входного параметра x
, используйте coder.getArgTypes
запускать тестовый файл ex_2ndOrder_filter_test.m
types = coder.getArgTypes('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter');
Тестовый файл запускает и отображает выводы фильтра для каждого из входных сигналов. coder.getArgTypes
решает что входной тип x
1x256 дважды.
Прежде чем вы сгенерируете код С с одинарной точностью, сгенерируете MEX-функцию с одинарной точностью, которую можно использовать, чтобы проверить поведение сгенерированного кода с одинарной точностью. Чтобы указать, что вы хотите код MEX с одинарной точностью, используйте -singleC
опция.
codegen -singleC ex_2ndOrder_filter -args types -report
Во время генерации MEX генератор кода обнаруживает проблемы преобразования с одинарной точностью. Прежде чем вы сгенерируете код C/C++, устраните эти проблемы. Этот пример не имеет проблем преобразования с одинарной точностью.
Сгенерированный MEX принимает вход с двойной точностью и с одинарной точностью. Можно использовать тот же тестовый файл, чтобы запустить функцию MATLAB с двойной точностью и MEX-функцию с одинарной точностью. Вы не должны изменять тестовый файл, чтобы вызвать MEX-функцию с одинарной точностью.
Запустите тестовый файл ex_2ndOrder_filter_test.m
. Этот файл вызывает функцию MATLAB с двойной точностью ex_2ndOrder_filter.m
.
ex_2ndOrder_filter_test
Тестовый файл запускает и отображает выводы фильтра для каждого из входных сигналов.
Запустите тестовый файл ex_2ndOrder_filter_test
, заменяя вызовы ex_2ndOrder_filter
с двойной точностью функция с вызовами
ex_2ndOrder_filter_mex
с одинарной точностью функция.
coder.runTest('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter')
Тестовый файл запускает и отображает выводы фильтра для каждого из входных сигналов. MEX-функция с одинарной точностью приводит к тем же результатам как функция MATLAB с двойной точностью.
Создайте объект настройки кода для генерации статической библиотеки C, динамической библиотеки или исполняемого файла.
cfg = coder.config('lib');
Чтобы сгенерировать код С с одинарной точностью, вызовите codegen
с -singleC
опция. Включите генерацию отчета генерации кода.
codegen -config cfg -singleC ex_2ndOrder_filter -args {types{1}} -report
Чтобы просмотреть отчет генерации кода для генерации кода C, щелкните по ссылке View Report.
В панели Generated Code нажмите ex_2ndOrder_filter.c
.
Переменные с двойной точностью имеют, вводят float
в коде С.
Индекс i
целое число.
Когда вы генерируете код с одинарной точностью, codegen
позволяет подсветить потенциальных проблем типа данных в отчете генерации кода. Если codegen
не может удалить операцию с двойной точностью, отчет подсвечивает выражение MATLAB, которое приводит к операции.
Кликните по вкладке Code Insights. Расширьте Potential data type issues. Отсутствие операций с двойной точностью указывает, что никакие операции с двойной точностью не остаются.
codegen
| coder.config
| coder.getArgTypes
| coder.runTest