В этом примере показано, как сконфигурировать codegen
функция для использования пользовательской функции построения графика для сравнения поведения сгенерированного кода с фиксированной точкой с поведением исходного MATLAB с плавающей точкой® код.
По умолчанию, когда LogIOForComparisonPlotting
опция включена, процесс преобразования использует основанный на временных рядах функцию построения графика, чтобы показать результаты с плавающей и фиксированной точками и различием между ними. Однако во время преобразования с фиксированной точкой может потребоваться визуализировать числовые различия в представлении, которое более подходит для области приложения. В этом примере показано, как настроить графическое изображение и создать графики поля точек на шаге тестовых чисел преобразования с фиксированной точкой.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB
MATLAB Coder™
Fixed-Point Designer™
Компилятор C
См. «Поддерживаемые компиляторы».
Можно использовать mex -setup
для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
Создайте локальную рабочую папку, например 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 | Пользовательская функция построения графика |
MAT-файл | 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
Увеличенный размер слова улучшил результаты. На этот раз график показывает, что результаты с фиксированной точкой совпадают с результатами с плавающей точкой.