Этот пример показывает, как генерировать стереосигнал из многоканального аудиосигнала с использованием матричного кодирования, и как восстанавливать исходные каналы из стереосмешения с использованием матричного декодирования. Этот пример иллюстрирует реализации MATLAB ® и Simulink ®. В этом примере также показано, как можно повысить производительность с помощью области выполнения потока данных.
Матричное декодирование представляет собой аудиотехнику, которая декодирует аудиосигнал с М каналами в аудиосигнал с N каналами (N > M) для воспроизведения в системе с N динамиками. Исходный аудиосигнал обычно генерируется с использованием матричного кодера, который преобразует N-канальные сигналы в M-канальные сигналы.
Матричное кодирование и декодирование позволяет воспроизводить одно и то же звуковое содержимое в различных системах. Например, многоканальный сигнал объемного звука может кодироваться в стереосигнал. Стереосигнал может воспроизводиться в стереосистеме для размещения настроек, когда приемник объемного звука не существует, или он может декодироваться и воспроизводиться как объемный, если присутствует оборудование объемного звука [1].
В этом примере показан матричный кодер, используемый для кодирования четырехканального сигнала (левого, правого, центрального и объемного) на стереосигнал. Четыре исходных сигнала затем регенерируются с использованием матричного декодера. Этот пример представляет собой упрощенную версию схемы кодирования и декодирования, используемой в системе Dolby Pro Logic [2].
Модель аудиоматриксдекодирования реализует пример кодирования/декодирования звуковой матрицы.

Вход матричного кодера состоит из четырех отдельных аудиоканалов (центрального, левого, правого и объемного).

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

Вы также можете переключаться между прослушиванием любого из оригинальных, закодированных или декодированных аудиоканалов, дважды щелкнув Audio Player Selector и выберите выбранный канал в раскрывающемся меню диалогового окна.
Матричный кодер кодирует четыре входных канала в стереосигнал.
Обратите внимание, что, поскольку входной левый и правый каналы вносят вклад только в выходной левый и правый каналы соответственно, выходной стереосигнал сохраняет баланс между левым и правым каналами.
Входной канал окружающего контура пропускают через преобразователь Гильберта, создавая тем самым разность фаз 180 градусов между составляющей окружающего контура, питающей левый и правый стереовыходы [2].
Вы можете прослушать закодированные левый и правый стереосигналы, дважды щелкнув подсистему выбора аудиопроигрывателя и выбрав каналы «Закодированный общий левый» или «Закодированный общий правый».

Матричный декодер извлекает четыре исходных канала из кодированного стереосигнала.
Частоты нижних частот сначала разделяют с помощью перекрестного фильтра Линквица-Райли. Дополнительные сведения о реализации фильтра Линквица-Райли см. в разделе Многополосное динамическое сжатие диапазонов.
Левый и правый стереоканалы проходят в левый и правый выходные каналы соответственно. Поэтому на выходе отсутствует потеря разделения между левым и правым каналами.
Центральный выходной канал равен сумме стерео входных сигналов, тем самым подавляя сдвинутую по фазе левую и правую составляющие окружающего контура.
Выходной канал объемного звучания получают, сначала беря разность стереосигналов. Поскольку исходный входной центральный сигнал вносит одинаковый вклад в оба стереоканала, центральный канал не просачивается в выходной объемный сигнал. Кроме того, следует отметить, что исходный левый и правый сигналы вносят вклад в выходной объемный канал. Объемный сигнал задерживается на 10 мс для достижения эффекта приоритета [3].
Вы можете прослушать декодированный объемный сигнал, дважды щелкнув подсистему выбора аудиопроигрывателя и выбрав один из декодированных сигналов.

В этом примере можно использовать домен выполнения потока данных в Simulink для использования нескольких ядер на рабочем столе для повышения производительности моделирования. Дополнительные сведения о потоке данных и о том, как запускать модели Simulink с использованием нескольких потоков, см. в разделе Многоядерное выполнение с использованием домена потока данных.
В Simulink в качестве области выполнения для подсистемы можно указать поток данных, установив для параметра Domain значение Dataflow с помощью инспектора свойств. Домены потока данных автоматически секционируют модель и моделируют систему с использованием нескольких потоков для повышения производительности моделирования. Установив для параметра Domain значение Dataflow, можно использовать Data aflow Simulation Assistant для анализа модели с целью повышения производительности. Для открытия ассистента моделирования потока данных нажмите кнопку «Ассистент потока данных» под параметром «Автоматический расчет размера кадра» в Инспекторе свойств.


Помощник по моделированию потока данных предлагает изменить параметры модели для обеспечения оптимальной производительности моделирования. Чтобы принять предложенные параметры модели, рядом с пунктом Предлагаемые параметры модели для производительности моделирования щелкните Принять все (Accept all). Можно также развернуть раздел, чтобы изменить настройки по отдельности. В ассистенте моделирования потока данных нажмите кнопку «Анализ», чтобы начать анализ области потока данных для обеспечения производительности моделирования. По завершении анализа ассистент моделирования потока данных показывает, сколько потоков подсистема потока данных будет использовать во время моделирования.

Для этой модели помощник показывает один поток, поскольку зависимость данных между блоками не позволяет выполнять их одновременно. Конвейерная обработка зависимых от данных блоков позволяет подсистеме потока данных увеличить параллелизм для более высокой пропускной способности. Ассистент моделирования потока данных показывает рекомендуемое количество задержек конвейера как предполагаемую задержку. Для этой модели предполагаемая задержка равна двум. Нажмите кнопку «Принять» рядом с пунктом «Рекомендуемая задержка» в ассистенте моделирования потока данных, чтобы использовать рекомендуемую задержку для подсистемы потока данных. Помощник по моделированию потока данных теперь показывает количество потоков как три, что означает, что блоки внутри подсистемы потока данных моделируются параллельно с использованием трех потоков.

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

Для измерения повышения производительности с помощью потока данных сравните время выполнения модели с потоком данных и без него. Блок записи аудиоустройств работает в реальном времени и ограничивает скорость моделирования модели до реального времени. Комментируйте блок записи аудиоустройств при измерении времени выполнения. На настольном компьютере под управлением ОС Windows с процессором Intel ® Xeon ® W-2133 @ 3,6 ГГц 6 Ядра 12 Потоки процессора эта модель с доменом потока данных выполняется в 2,6 раза быстрее по сравнению с исходной моделью.
HelperAudioMatrixDecoderSim - функция MATLAB, содержащая пример реализации декодера звуковой матрицы. Он создает экземпляры, инициализирует и выполняет шаги по объектам, формирующим алгоритм.
Функция audioMatrixDecoderApp обертывает вокруг HelperAudioMatrixDecoderSim и итеративно называет его.
Выполнить audioMatrixDecoderApp для запуска моделирования. Обратите внимание, что моделирование выполняется до тех пор, пока оно не будет явно остановлено.
audioMatrixDecoderApp запускает пользовательский интерфейс, предназначенный для взаимодействия с моделированием. Аналогично Simulink-версии примера, пользовательский интерфейс позволяет настраивать относительную мощность между входами правого и левого каналов, а также уровень мощности объемного канала. Вы также можете переключаться между прослушиванием любого из исходных, закодированных или декодированных аудиоканалов, изменяя значение раскрывающегося окна «Audio Output» в интерфейсе пользователя.
На пользовательском интерфейсе также имеется три кнопки: кнопка «Reset» (сброс) приведет к сбросу внутреннего состояния моделирования в исходное состояние, а кнопка «Pause Simulation» (приостановка моделирования) удержит моделирование до тех пор, пока вы не нажмете на него снова. Моделирование может быть прекращено либо путем закрытия пользовательского интерфейса, либо нажатием кнопки «Stop simulation».
Кодер MATLAB может использоваться для генерации кода C для функции HelperAudioMatrixDecoderSim. Чтобы создать MEX-файл для вашей платформы, выполните команду HelperMatrixDecodingCodeGeneration из папки с разрешениями на запись.
Путем вызова функции оболочки audioMatrixDecoderApp с 'true' в качестве аргумента можно использовать сгенерированный MEX-файл вместо HelperAudioMatrixDecoderSim для моделирования. В этом сценарии пользовательский интерфейс все еще выполняется в среде MATLAB, но основной алгоритм обработки выполняется MEX-файлом. Производительность улучшается в этом режиме без ущерба для возможности настройки параметров.
[1] https://en.wikipedia.org/wiki/Matrix_decoder
[2] Декодер объемного окружения Dolby Pro: принципы работы, Roger Dressler, Dolby Labs