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

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

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

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

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

  1. Создайте локальную рабочую папку, например c:\ex_2ndOrder_filter.

  2. Измените на docroot\toolbox\fixpoint\examples папка. В командной строке MATLAB введите:

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. Скопируйте ex_2ndOrder_filter.m и ex_2ndOrder_filter_test.m файлы в локальную рабочую папку.

    НапечататьИмяОписание
    Код функцииex_2ndOrder_filter.mФункция MATLAB точки входа
    Тестовый файлex_2ndOrder_filter_test.mСкрипт MATLAB, который тестирует ex_2ndOrder_filter.m

 Функция ex_2ndOrder_filter

 Скрипт ex_2ndOrder_filter_test

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

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

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

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

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

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

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

  2. Щелкните Next, чтобы перейти к Define Input Types шагу.

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

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

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

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

    Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов.

    Приложение определяет из тестового файла, что входной тип x является double(1x256).

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

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

На Check for Run-Time Issues шаге генерируется MEX с инструментами. Он запускает тестовый файл ex_2ndOrder_filter_test замена вызовов на ex_2ndOrder_filter с вызовами сгенерированной MEX-функции. Если приложение находит проблемы, оно выдает предупреждения и сообщения об ошибке. Можно кликнуть сообщение, чтобы выделить проблемный код в окне, где можно отредактировать код.

  1. На странице Check for Run-Time Issues приложение заполняет поле тестового файла именем ex_2ndOrder_filter_test, тестовый файл, который вы использовали для определения типов входа.

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

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

  3. Щелкните Next, чтобы перейти к Convert to Fixed Point шагу.

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

  1. Приложение отображает скомпилированную информацию - тип, размер и сложность - для переменных в вашем коде. См. «Просмотр и изменение информации о переменной».

    На вкладке Function Replacements приложение отображает функции, которые не поддерживаются для преобразования с фиксированной точкой. См. «Выполнение симуляции».

  2. Щелкните стрелку Analyze. Проверьте, что Analyze ranges using simulation выбран и что файл испытательного стенда ex_2ndOrder_filter_test. Можно добавить тестовые файлы и выбрать, чтобы запустить несколько тестовых файлов во время симуляции. Если вы запускаете несколько тестовых файлов, приложение объединяет результаты симуляции.

  3. Выберите Log data for histogram.

    По умолчанию выбрана опция Show code coverage. Эта опция предоставляет информацию о покрытии кода, которая помогает вам проверить, что ваш тестовый файл тестирует ваш алгоритм в предполагаемой рабочей области значений.

  4. Нажмите Analyze.

    Симуляция выполняется, и приложение отображает полосу покрытия кода с цветовым кодом слева от кода MATLAB. Проверьте эту информацию, чтобы убедиться, что тестовый файл надлежащим образом тестирует алгоритм. Темно-зеленая линия слева от кода указывает, что код запускается каждый раз, когда алгоритм выполняется. Оранжевая полоса указывает, что код рядом с ней выполняется только один раз. Это поведение ожидается для этого примера, потому что код инициализирует постоянную переменную. Если ваш тестовый файл не охватывает весь ваш код, обновите тест или добавьте дополнительные тестовые файлы.

    Если значение имеет ... рядом с ним значение округлится. Пауза над ... чтобы просмотреть фактическое значение.

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

    Примечание

    Можно вручную вводить статические области значений. Эти вручную введённые области значений имеют приоритет над областями значений симуляции. Приложение использует введенные вручную области значений для предложения типов данных. Можно также изменить и заблокировать предлагаемый тип.

  5. Исследуйте предлагаемые типы и проверьте, что они охватывают полную область значений симуляции. Чтобы просмотреть записанные данные гистограммы для переменной, щелкните поле Proposed Type.

    Чтобы изменить предложенные типы данных, либо введите необходимый тип в поле Proposed Type, либо используйте элементы управления гистограммы. Для получения дополнительной информации о гистограмме см. Журнал данных для гистограммы.

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

    В процессе преобразования с фиксированной точкой программное обеспечение проверяет предлагаемые типы и генерирует следующие файлы в codegen\ex_2ndOrder_filter\fixpt папка в локальной рабочей папке.

    • ex_2ndOrder_filter_fixpt.m - версия с фиксированной точкой ex_2ndOrder_filter.m.

    • ex_2ndOrder_filter_wrapper_fixpt.m - этот файл преобразует значения данных с плавающей точкой, предоставленные тестовым файлом, в фиксированные точки, определенные для входов во время преобразования. Эти значения с фиксированной точкой подаются в преобразованный проект с фиксированной точкой, ex_2ndOrder_filter_fixpt.m.

    • ex_2ndOrder_filter_fixpt_report.html - этот отчет показывает сгенерированный код фиксированной точки и результаты инструментирования с фиксированной точкой.

    • ex_2ndOrder_filter_report.html - этот отчет показывает исходный алгоритм и результаты инструментирования с фиксированной точкой.

    • ex_2ndOrder_filter_fixpt_args.mat - MAT-файл, содержащий структуру для входных параметров, структуру для выходных аргументов и имя файла с фиксированной точкой.

    Если во время валидации возникают ошибки или предупреждения, они отображаются на вкладке Output. См. «Проверка типов».

  7. В списке Output Files выберите ex_2ndOrder_filter_fixpt.m. Приложение отображает сгенерированный код с фиксированной точкой.

  8. Щелкните стрелку Test. Выберите Log inputs and outputs for comparison plots и нажмите Test.

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

    Приложение также сообщает информацию об ошибке на вкладке Verification Output. Максимальная ошибка меньше 0,03%. В данном примере этот запас ошибки является приемлемым.

    Если различие не приемлема, измените типы данных с фиксированной точкой или свой исходный алгоритм. Для получения дополнительной информации см. «Проверка».

  9. На вкладке Verification Output приложение предоставляет ссылку на отчет, который показывает сгенерированный код с фиксированной точкой и предлагаемую информацию о типе.

  10. Щелкните Next, чтобы перейти на страницу Generate Code.

Сгенерируйте код С с фиксированной точкой

  1. В диалоговом окне Generate установите Build source равным Fixed-Point и Build type к Static Library.

  2. Установите Language значение C.

  3. Щелкните Generate, чтобы сгенерировать библиотеку с помощью настроек проекта по умолчанию.

    MATLAB Coder создает проект и генерирует статическую библиотеку на C и вспомогательные файлы в подпапке по умолчанию codegen/lib/ex_2ndOrder_filter.

  4. Приложение отображает сгенерированный код для ex_2ndOrder_filter.c. В сгенерированном коде C переменным присваиваются типы данных с фиксированной точкой.

  5. Щелкните Next, чтобы перейти на страницу Finish Workflow.

    На странице Finish Workflow приложение отображает сводные данные проекта и ссылки на сгенерированные выходные файлы.