В этом примере показано, как создать код C с одинарной точностью из кода MATLAB ® с двойной точностью в командной строке.
Чтобы завершить этот пример, установите следующие продукты:
MATLAB
MATLAB Coder™
Designer™ с фиксированной точкой
Компилятор C
См. раздел Поддерживаемые компиляторы.
Вы можете использовать mex -setup для изменения компилятора по умолчанию. См. раздел Изменение компилятора по умолчанию.
Создайте локальную рабочую папку, например: 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');
Для создания кода C с одинарной точностью вызовите codegen с -singleC вариант. Разрешить создание отчета о создании кода.
codegen -config cfg -singleC ex_2ndOrder_filter -args {types{1}} -report
Чтобы просмотреть отчет о создании кода для создания кода C, щелкните ссылку Просмотр отчета.
На панели «Созданный код» щелкните ex_2ndOrder_filter.c.
Переменные двойной точности имеют тип float в коде C.
Индекс i - целое число.
При создании кода с одинарной точностью codegen позволяет выделить потенциальные проблемы типа данных в отчете о создании кода. Если codegen невозможно удалить операцию двойной точности, отчет выделяет выражение MATLAB, которое приводит к операции.
Перейдите на вкладку Анализ кода. Разверните Возможные проблемы с типами данных. Отсутствие операций двойной точности указывает на то, что операции двойной точности не остаются.
codegen | coder.config | coder.getArgTypes | coder.runTest