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

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

По умолчанию, когда опция Log inputs and outputs for comparison plots включена, процесс преобразования использует основанную на временных рядах функцию построения графика, чтобы показать результаты и фиксированной точки с плавающей точкой и различие между ними. Однако во время преобразования фиксированной точки вы можете хотеть визуализировать числовые различия в представлении, которое более подходит для вашего домена приложения. В этом примере показано, как настроить графический вывод и произвести графики рассеивания на тестовом шаге численных данных преобразования фиксированной точки.

Необходимые условия

Этот пример требует следующих продуктов:

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

  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

Откройте приложение MATLAB Coder

  1. Перейдите к папке, которая содержит файлы для этого примера.

  2. На вкладке MATLAB Toolstrip Apps, под Code Generation, кликают по значку приложения.

Выберите Source Files

Добавить функцию точки входа myFilter к проекту просмотрите к файлу myFilter.m, и затем нажмите Open.

По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем myFilter.prj.

Включите преобразование фиксированной точки

  1. Установите Numeric Conversion на Convert to fixed point.

  2. Нажмите Next, чтобы перейти к шагу Define Input Types.

    Экраны приложения myFilter.m для нарушений регулярной кодовой последовательности и проблем готовности генерации кода. Приложение не находит проблемы в myFilter.m.

Определите входные типы

  1. На странице Define Input Types, чтобы добавить myFilterTest как тестовый файл, просмотрите к myFilterTest.m, и затем нажмите Open.

  2. Нажмите Autodefine Input Types.

    Приложение решает из тестового файла что входной тип in complex(double(1x1)).

  3. Нажмите Next, чтобы перейти к шагу Check for Run-Time Issues.

Проверяйте на проблемы во время выполнения

Шаг Check for Run-Time Issues генерирует оснащенный MEX. myFilter. Это запускает тестовый файл myFilterTest заменяя вызовы myFilter с вызовами сгенерированного MEX. Если приложение находит проблемы, оно предоставляет предупреждающие сообщения и сообщения об ошибке. Можно кликнуть по сообщению, чтобы подсветить проблематичный код в окне, где можно отредактировать код.

  1. Просмотрите к тестовому файлу myFiltertest.m.

  2. Нажмите Check for Issues.

    Приложение не обнаруживает проблемы.

  3. Нажмите Next, чтобы перейти к шагу Convert to Fixed Point.

Преобразуйте в фиксированную точку

  1. Отображения приложения скомпилировали информацию для переменных в вашем коде. Для получения дополнительной информации см. Просмотрите и измените переменную информациюПросмотрите и измените переменную информацию (Fixed-Point Designer).

  2. Чтобы открыть диалоговое окно настроек, кликните по стреле Settings.

    1. Проверьте, что Default word length установлен в 16.

    2. Под Advanced, набор Signedness к Signed

    3. Под Plotting and Reporting, набор Custom plot function к plotDiff.

  3. Кликните по стреле Analyze. Проверьте, что тестовым файлом является myFilterTest.

  4. Нажмите Analyze.

    Тестовый файл, myFilterTest, запуски и минимум симуляции отображений приложения и максимум располагаются на вкладке Variables. Используя данные об области значений симуляции, программное обеспечение предлагает фиксированные точки для каждой переменной на основе настроек предложения по типу по умолчанию и отображает их в столбце Proposed Type.

  5. Чтобы преобразовать алгоритм с плавающей точкой в фиксированную точку, нажмите Convert.

    Программное обеспечение подтверждает предложенные типы и генерирует версию фиксированной точки функции точки входа.

Протестируйте численные данные и просмотрите графики сравнения

  1. Нажмите стрелу Test, выберите Log inputs and outputs for comparison plots, и затем нажмите Test.

    Выполнение приложения тестовый файл, что вы раньше для входных define типов тестировали фиксированную точку код MATLAB. Поскольку вы выбрали, чтобы регистрировать вводы и выводы для графиков сравнения и использовать пользовательскую функцию построения графика, plotDiff.m, для этих графиков приложение использует эту функцию, чтобы сгенерировать график сравнения. График показывает, что результаты фиксированной точки тесно не совпадают с результатами с плавающей точкой.

  2. В настройках увеличьте DefaultWordLength до 24 и затем преобразуйте в фиксированную точку снова.

    Приложение преобразует myFilter.m к фиксированной точке и предлагает типы данных с фиксированной точкой с помощью нового размера слова по умолчанию.

  3. Запуститесь тестовые численные данные продвигаются снова.

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