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

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

Необходимые MathWorks™ продукты:

  • MATLAB ®

  • Signal Processing Toolbox™

  • DSP System Toolbox™

  • Simulink ®

  • MATLAB ® Coder™

  • Coder™ Simulink ®

  • Embedded Coder ®

Введение

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы сгенерировать код С, щелкните правой кнопкой мыши подсистему Equalizer, выберите C/C + + Code > Build This Subsystem, затем нажмите кнопку Build при запросе настраиваемых параметров. Можно также сгенерировать код, щелкнув следующую гиперссылку: Generate Code for the Equalizer Subsystem.

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

Модель сконфигурирована, чтобы сгенерировать HTML, который может использоваться для навигации по сгенерированным исходным и заголовочным файлам. Отчет также включает двунаправленное связывание между сгенерированным кодом и моделью. Для примера каждый блок Biquad Filter сконфигурирован для реализации другой структуры фильтра. Можно проследить от блока до связанного кода, щелкнув правой нажатие по любому из блоков Biquad Filter и выбрав C/C + + Code > Navigate To C/C + + Code.

Для получения дополнительной информации о трассируемости между моделью и кодом смотрите Trace Simulink Model Elements in Сгенерированный Код (Embedded Coder).

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

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

Дополнительные сведения о том, как интегрировать сгенерированный код в другое приложение, см. в разделе Развертывание сгенерированных автономных исполняемых программ на целевом компьютере (Embedded Coder).

Входные и выходные данные

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

Для получения дополнительной информации об объектах данных смотрите Создание объектов данных для Генерации кода с помощью Мастера объектов данных (Embedded Coder).

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

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

Для получения дополнительной информации о вставке текста аннотации в комментарии к коду смотрите Добавить глобальные комментарии в Сгенерированный код (Embedded Coder).

Разбиение функций на разделы

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

Для получения дополнительной информации о настройке именования и размещения функций смотрите О невиртуальной подсистеме Генерации кода (Embedded Coder).

Размещение файла коэффициентов

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

Для получения дополнительной информации о размещении файлов объектов данных смотрите Управление размещением определений глобальных данных и объявлений в сгенерированных файлах (Embedded Coder).

Создание фильтра в комментариях переменного коэффициента

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

Для получения дополнительной информации о настройке комментариев объектов данных в сгенерированном коде смотрите Добавить пользовательские комментарии для переменных в Сгенерированный код (Embedded Coder).

Упаковать сгенерированные файлы

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

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