Этот пример показывает, как сконфигурировать функцию codegen
, чтобы использовать пользовательскую функцию построения графика, чтобы сравнить поведение сгенерированной фиксированной точки против поведения исходного кода MATLAB® с плавающей точкой.
По умолчанию, когда опция LogIOForComparisonPlotting
включена, процесс преобразования использует основанную на временных рядах функцию построения графика, чтобы показать результаты и фиксированной точки с плавающей точкой и различие между ними. Однако во время преобразования фиксированной точки вы можете хотеть визуализировать числовые различия в представлении, которое более подходит для вашего домена приложения. Этот пример показывает, как настроить графический вывод и произвести графики рассеивания на тестовом шаге численных данных преобразования фиксированной точки.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB
MATLAB Coder™
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).
Создайте локальную рабочую папку, например, c:\custom_plot
.
Изменитесь на папку docroot\toolbox\fixpoint\examples
. В командной строке MATLAB, введите:
cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
Скопируйте myFilter.m
, myFilterTest.m
, plotDiff.m
и файлы filterData.mat
к вашей локальной рабочей папке.
Ввод | Имя | Описание |
---|---|---|
Функциональный код | myFilter.m | Функция MATLAB точки входа |
Тестовый файл | myFilterTest.m | Скрипт MATLAB, который тестирует myFilter.m |
Функция построения графика | plotDiff.m | Пользовательская функция построения графика |
Matfile | filterData.mat | Данные, чтобы отфильтровать. |
Создайте объект coder.FixptConfig
.
fxptcfg = coder.config('fixpt');
Задайте имя тестового файла и пользовательское имя функции построения графика. Позвольте регистрировать и тестирование численных данных.
fxptcfg.TestBenchName = 'myFilterTest'; fxptcfg.PlotFunction = 'plotDiff'; fxptcfg.TestNumerics = true; fxptcfg. LogIOForComparisonPlotting = true; fxptcfg.DefaultWordLength = 16;
Преобразуйте функцию MATLAB с плавающей точкой, myFilter
, к фиксированной точке код MATLAB. Вы не должны задавать входные типы для команды codegen
, потому что она выводит типы из тестового файла.
codegen -args {complex(0, 0)} -float2fixed fxptcfg myFilter
Процесс преобразования генерирует фиксированную точку с помощью размера слова по умолчанию 16
и затем запускает симуляцию фиксированной точки путем выполнения функции myFilterTest.m
и вызова версии фиксированной точки myFilter.m
.
Поскольку вы выбрали, чтобы регистрировать вводы и выводы для графиков сравнения и использовать пользовательскую функцию построения графика, plotDiff.m
, для этих графиков, процесс преобразования использует эту функцию, чтобы сгенерировать график сравнения.
График показывает, что результаты фиксированной точки тесно не совпадают с результатами с плавающей точкой.
Увеличьте размер слова до 24
и затем преобразуйте в фиксированную точку снова.
fxptcfg.DefaultWordLength = 24; codegen -args {complex(0, 0)} -float2fixed fxptcfg myFilter
Увеличенный размер слова улучшил результаты. На этот раз график показывает, что результаты фиксированной точки совпадают с результатами с плавающей точкой.