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

В этом примере показано, как сконфигурировать 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

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