Визуализируйте различия между результатами и фиксированной точки с плавающей точкой

Этот пример показывает, как сконфигурировать функцию codegen, чтобы использовать пользовательскую функцию построения графика, чтобы сравнить поведение сгенерированной фиксированной точки против поведения исходного кода MATLAB® с плавающей точкой.

По умолчанию, когда опция LogIOForComparisonPlotting включена, процесс преобразования использует основанную на временных рядах функцию построения графика, чтобы показать результаты и фиксированной точки с плавающей точкой и различие между ними. Однако во время преобразования фиксированной точки вы можете хотеть визуализировать числовые различия в представлении, которое более подходит для вашего домена приложения. Этот пример показывает, как настроить графический вывод и произвести графики рассеивания на тестовом шаге численных данных преобразования фиксированной точки.

Предпосылки

Чтобы завершить этот пример, необходимо установить следующие продукты:

Создайте новую папку и скопируйте соответствующие файлы

  1. Создайте локальную рабочую папку, например, c:\custom_plot.

  2. Изменитесь на папку docroot\toolbox\fixpoint\examples. В командной строке MATLAB, введите:

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. Скопируйте myFilter.m, myFilterTest.m, plotDiff.m и файлы filterData.mat к вашей локальной рабочей папке.

    ВводИмяОписание
    Функциональный кодmyFilter.mФункция MATLAB точки входа
    Тестовый файлmyFilterTest.mСкрипт MATLAB, который тестирует myFilter.m
    Функция построения графикаplotDiff.mПользовательская функция построения графика
    MatfilefilterData.matДанные, чтобы отфильтровать.

 Функция myFilter

 myFilterTest Файл

 Функция plotDiff

Настройте объект настройки

  1. Создайте объект coder.FixptConfig.

    fxptcfg = coder.config('fixpt');
  2. Задайте имя тестового файла и пользовательское имя функции построения графика. Позвольте регистрировать и тестирование численных данных.

    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

Увеличенный размер слова улучшил результаты. На этот раз график показывает, что результаты фиксированной точки совпадают с результатами с плавающей точкой.