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

В этом примере показано, как сконфигурировать 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Пользовательская функция построения графика
    MAT-файлfilterData.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

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