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

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

Требуемые продукты 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 пример.