exponenta event banner

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

В этом примере показано, как настроить fiaccel функция для использования пользовательской функции печати для сравнения поведения созданного кода с фиксированной точкой с поведением исходного кода 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 с фиксированной точкой. Нет необходимости указывать типы ввода для 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

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

Связанные темы