exponenta event banner

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

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

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

  • MATLAB ®

  • Toolbox™ обработки сигналов

  • Toolbox™ системы DSP

  • Симулинк ®

  • MATLAB ® Coder™

  • Simulink ® Coder™

  • Встроенный кодер ®

Введение

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

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

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

Задать алгоритм

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

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

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

Изучение поведения с помощью моделирования

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

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

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

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

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

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

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

Дополнительные сведения об отслеживании между моделью и кодом см. в разделе Элементы модели Trace Simulink в сгенерированном коде (Embedded Coder).

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

Созданный код можно интегрировать в приложение путем вызова функций инициализации модели и шага модели. Пример 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.

Дополнительные сведения об объектах данных см. в разделе Создание объектов данных для создания кода с помощью мастера объектов данных (встроенный кодер).

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

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

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

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

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

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

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

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

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

Параметры конструкции фильтра в комментариях переменных коэффициентов

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

Дополнительные сведения о настройке комментариев объектов данных в сгенерированном коде см. в разделе Добавление пользовательских комментариев для переменных в сгенерированный код (встроенный кодер).

Файлы, созданные пакетами

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

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