Генерация кода для параметрического аудио эквалайзера

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

Требуемые продукты MathWorks™:

  • MATLAB®

  • Signal Processing Toolbox™

  • DSP System Toolbox™

  • Simulink®

  • MATLAB® Coder™

  • Simulink® Coder™

  • Embedded Coder™

Введение

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

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

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

Задайте алгоритм

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

В данном примере образцовая спецификация является подсистемой Эквалайзера модели Simulink dspparameqcodegen. В этой подсистеме вход передается через три каскадных полосы коррекции. Содействующие изменения в каждой полосе сглаживаются через текучий интегратор прежде чем быть переданным в блок Biquad Filter. Каждый блок Biquad Filter сконфигурирован, чтобы использовать различную структуру фильтра. Различные структуры фильтра выбраны, чтобы показать различия в генерации кода позже в этом примере.

В данном примере параметризованной спецификацией данных является скрипт MATLAB dspparameq_data.m. Этот скрипт MATLAB задает начальные коэффициенты фильтра, а также атрибуты генерации кода. Когда вы открываете модель dspparameqcodegen, коллбэк PreLoadFcn модели сконфигурирован, чтобы запустить dspparameq_data.m скрипт, который создает данные о параметре в рабочем пространстве MATLAB.

Исследуйте поведение посредством симуляции

Можно использовать испытательный стенд симуляции, чтобы исследовать поведение алгоритма. В этом примере испытательный стенд состоит из имитационной модели, dspparameqcodegen, как хорошо как настроенный пользовательский интерфейс (пользовательский интерфейс), запрограммированный в MATLAB.

Этот пользовательский интерфейс может быть запущен путем щелкания по ссылке 'Launch Parameter Tuning UI'. Пользовательский интерфейс включает динамическую корректировку содействующих данных о параметре в рабочем пространстве MATLAB во время симуляции.

Сгенерируйте код С для подсистемы эквалайзера

Если вы достигаете желаемого поведения симуляции, можно сгенерировать код С для подсистемы Эквалайзера на основе спецификации алгоритма. Эта модель сконфигурирована, чтобы показать некоторые общие индивидуальные настройки генерации кода, доступные от продукта Embedded Coder. Эти индивидуальные настройки упрощают рассмотрение кода и процесс интеграции. Следующие разделы показывают некоторые индивидуальные настройки кода для этой модели и обеспечивают ссылки на документацию, которые описывают эти индивидуальные настройки более подробно.

Чтобы сгенерировать код С, щелкните правой кнопкой по подсистеме Эквалайзера, выберите Code Generation> Build Subsystem, затем нажмите кнопку Build, когда запрошено настраиваемые параметры. Можно также сгенерировать код путем нажатия на следующую гиперссылку: Сгенерируйте Код для Подсистемы Эквалайзера.

Отчет генерации кода со ссылками на и из модели

Модель сконфигурирована, чтобы сгенерировать отчет HTML, который может использоваться, чтобы переместиться по сгенерированному источнику и заголовочным файлам. Отчет также включает двунаправленное соединение между сгенерированным кодом и моделью. Например, каждый блок Biquad Filter сконфигурирован, чтобы реализовать различную структуру фильтра. Можно проследить от блока до связанного кода путем щелчка правой кнопкой по любому из блоков Фильтра Biquad и затем выбора Code Generation> Navigate к коду.

Для получения дополнительной информации о трассируемости между моделью и кодом смотрите Трассировку Элементы модели Simulink в Сгенерированном коде.

Вызов сгенерированного кода

Можно интегрировать сгенерированный код в приложение путем совершения вызовов к образцовой инициализации и образцовым ступенчатым функциям. Файл ert_main.c в качестве примера сгенерирован, который показывает, как вызвать сгенерированный код. Обратите внимание на то, что пример main() вызывает Equalizer_initialize(), чтобы инициализировать состояния. rt_OneStep() в качестве примера показывает, как периодический механизм, такой как прерывание вызвал бы Equalizer_step() из файла Equalizer.c.

Для получения дополнительной информации о том, как интегрировать сгенерированный код в другое приложение, смотрите Автономное Выполнение программы.

Интерфейс входных и выходных данных

Параметризованный файл спецификации данных, dspparameq_data.m, создает in и объекты данных сигнала out в рабочем пространстве MATLAB. Эти объекты данных сопоставлены с сигнальными линиями в модели и используются, чтобы задать описания и классы памяти соответствующих переменных в сгенерированном коде. Например, сигналы in и out объявляются как глобальная переменная в Equalizer.c. Чтобы запустить образцовую ступенчатую функцию, приложение записывает данные к in, вызывает функцию Equalizer_step(), и затем читает результаты out.

Для получения дополнительной информации об Объектах данных смотрите Создание Simulink и mpt Объекты данных.

Текстовые аннотации в комментариях к коду

Можно вставить проектную документацию, вводимую как текст в модель в комментарии сгенерированного кода. Подсистема Equalizer содержит текст аннотации с ключевым словом S:Description. Генератор кода идентифицирует, что текст запускается с этого ключевого слова и вставляет текст после ключевого слова как комментарии в сгенерированный код.

Для получения дополнительной информации о вставке текста аннотации в комментарии к коду см. Добавляющие Глобальные Комментарии.

Функциональное разделение

Чтобы упростить навигацию сгенерированного кода, каждая подсистема для полос эквалайзера сконфигурирована, чтобы быть атомарной и создать его собственную функцию. Вы видите порядок вызова в функции Equalizer_step().

Для получения дополнительной информации о настройке функционального именования и размещения смотрите Невиртуальную Подсистему Модульная Функциональная Генерация кода.

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

Параметризованный файл спецификации данных, dspparameq_data.m создает объекты данных параметра для коэффициентов в рабочем пространстве MATLAB. Эти объекты данных сконфигурированы, чтобы задать и объявить содействующие переменные в отдельных файлах biquad_coeffs.c и biquad_coeffs.h соответственно. Разделение коэффициентов в отдельные файлы позволяет другим компонентам программного обеспечения получить доступ к этим данным. Например, в развертываемом приложении, вы могли запланировать другой компонент программного обеспечения, чтобы изменить эти переменные во времени выполнения, прежде чем они будут использоваться Equalizer_step().

Для получения дополнительной информации о размещении файла Объектов данных смотрите Размещение Файла Управления Определений данных и Объявлений.

Отфильтруйте параметры проекта в содействующих комментариях переменной

Когда коэффициенты вычисляются (в параметризованном файле данных или графическим интерфейсом пользователя), параметры проекта фильтра хранятся в поле Description содействующих объектов данных параметра. Модель сконфигурирована, чтобы вставить параметры проекта как комментарии в сгенерированном коде. Это позволяет рецензентам кода легко идентифицировать, какие параметры проекта использовались, чтобы разработать фильтры.

Для получения дополнительной информации о настройке комментариев Объектов данных в сгенерированном коде см. Добавляющие Пользовательские Комментарии.

Пакет сгенерированные файлы

Сгенерированные файлы, на которые ссылается отчет HTML, существуют в директории Equalizer_ert_rtw. В дополнение к файлам в этой директории другие файлы в директории установки приложения MATLAB могут требоваться для интегрирования в проект. Чтобы упростить портирование сгенерированного кода к другим средам, эта модель сконфигурирована, чтобы использовать функцию PackNGo, который пакеты все необходимые файлы в zip-файл Equalizer.zip. Обратите внимание на то, что zip-файл содержит все необходимые файлы, но может также содержать дополнительные файлы, которые не могут требоваться.

Для получения дополнительной информации об упаковочных файлах для интегрирования в другие среды см. Код Перемещения к Другой Среде разработки.

Преобразование подсистемы эквалайзера к фиксированной точке Используя Fixed-Point Tool

Чтобы изучить, как преобразовать подсистему Эквалайзера в фиксированную точку с помощью Fixed-Point Tool, смотрите dspparameqflt2fix пример.