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

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

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

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

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

  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

Откройте приложение Fixed-Point Converter

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

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

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

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

  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, чтобы перейти к Convert to Fixed Point шагу.

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

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

    На вкладке 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, чтобы перейти на страницу Finish Workflow.

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

Интеграция кода с фиксированной точкой

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

  1. Копировать ex_2ndOrder_filter_fixpt.m в локальную рабочую папку.

  2. Сгенерируйте MEX-функцию для ex_2ndOrder_filter_fixpt.m. Посмотрите на get_fimath функция в ex_2ndOrder_filter_fixpt.m файл для получения fimath, и используйте отчет о предложении типа, чтобы получить тип данных с фиксированной точкой для входа x.

    fm = fimath('RoundingMethod', 'Floor', 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision', 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision', 'MaxSumWordLength', 128);
    fiaccel ex_2ndOrder_filter_fixpt -args {fi( 0, 1, 16, 14, fm )}

    fiaccel генерирует MEX-функцию, ex_2ndOrder_filter_fixpt_mex, в текущей папке.

  3. Теперь можно вызвать эту MEX-функцию вместо исходного алгоритма MATLAB.