В этом примере показано, как настроить fiaccel функция для использования пользовательской функции печати для сравнения поведения созданного кода с фиксированной точкой с поведением исходного кода MATLAB ® с плавающей точкой.
По умолчанию, когда LogIOForComparisonPlotting опция включена, процесс преобразования использует функцию печати на основе временных рядов для отображения результатов с плавающей и фиксированной точками и разницы между ними. Однако при преобразовании с фиксированной точкой может потребоваться визуализация числовых различий в представлении, которое более подходит для области приложения. В этом примере показано, как настроить печать и создать графики рассеяния на этапе проверки числовых значений преобразования с фиксированной точкой.
Для завершения этого примера необходимо установить следующие продукты:
MATLAB
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 с фиксированной точкой. Нет необходимости указывать типы ввода для fiaccel потому что она выводит типы из тестового файла.
fiaccel -args {complex(0, 0)} -float2fixed fxptcfg myFilter
Процесс преобразования генерирует код с фиксированной точкой, используя длину слова по умолчанию, равную 16 а затем запускает моделирование с фиксированной точкой, запустив myFilterTest.m и вызов версии с фиксированной точкой myFilter.m.
Поскольку было выбрано регистрировать входные и выходные данные для сравнительных графиков и использовать пользовательскую функцию печати, plotDiff.mдля этих графиков процесс преобразования использует эту функцию для генерации графика сравнения.

График показывает, что результаты с фиксированной точкой не совпадают с результатами с плавающей точкой.
Увеличить длину слова до 24 а затем снова преобразовать в фиксированную точку.
fxptcfg.DefaultWordLength = 24; fiaccel -args {complex(0, 0)} -float2fixed fxptcfg myFilter
Увеличенная длина слова улучшила результаты. На этот раз график показывает, что результаты с фиксированной точкой соответствуют результатам с плавающей точкой.
