Этот пример показов, как смоделировать спецификацию алгоритма для трехпараметрического эквалайзера полосы который будет использоваться для генерации кода.
Необходимые 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).