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

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

 Функция myFilter

 Файл myFilterTest

 Функция plotDiff

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

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

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

Выбор исходных файлов

Чтобы добавить функцию точки входа 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.

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

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

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

  3. Еще раз запустите шаг тестовых цифр.

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