Кодирование и декодирование матрицы объемного звука

Этот пример показывает, как сгенерировать стереосигнал из многоканального аудиосигнала с помощью матричного кодирования и как восстановить исходные каналы из стереосигнала с помощью матричного декодирования. Этот пример иллюстрирует реализации MATLAB ® и Simulink ®. Этот пример также показывает, как повысить производительность можно с помощью области выполнения dataflow.

Введение

Матричное декодирование является аудио метода, которое декодирует аудиосигнал с M каналами в аудиосигнал с N каналами (N > M) для воспроизведения в системе с N динамиками. Исходный аудиосигнал обычно генерируется с помощью матричного энкодера, который преобразует сигналы N-канала в сигналы M-канала.

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

В этом примере мы демонстрируем матричный энкодер, используемый для кодирования четырехканального сигнала (левый, правый, центральный и окружающий) к стереосигналу. Затем четыре исходных сигнала регенерируются с помощью матричного декодера. Этот пример является упрощенной версией схемы кодирования и декодирования, используемой в системе Dolby Pro Logic [2].

Версия Simulink

Модель аудиоматриксдекодирования реализует пример кодирования/декодирования аудио матрицы.

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

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

Можно также переключаться между прослушиванием любого из исходных, закодированных или декодированных аудиоканалов, дважды кликнув по Audio Player Selector и выбор выбранного канала из раскрывающегося меню диалогового окна.

Матричный энкодер

Матричный энкодер кодирует четыре входных канала в стереосигнал.

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

Окружающий входной канал проходит через трансформатор Гильберта, таким образом создавая разность фаз на 180 степени между окружающим компонентом, питающим левый и правый стерео выходы [2].

Можно прослушать закодированные стереосигналы слева и справа, дважды щелкнув подсистему Audio Player Selector и выбрав каналы 'Encoded Total Left' или 'Encoded Total Right'.

Матричный декодер

Матричный декодер извлекает четыре исходных канала из кодированного стереосигнала.

Частоты lowpass сначала разделяются с помощью поперечного фильтра Линквица-Райли. Для получения дополнительной информации о реализации фильтра Linkwitz-Riley, смотрите Multiband Dynamic Range Compression.

Левый и правый стереоканалы передаются в левый и правый выходные каналы соответственно. Поэтому нет потери разделения между левым и правым каналами на выходе.

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

Объемный выходной канал выводится путем первого взятия различия стереосигналов. Поскольку исходный входной сигнал центра вносит одинаковый вклад в оба стереофонических канала, центральный канал не течет в выходной сигнал окружения. Кроме того, обратите внимание, что исходные левый и правый сигналы вносят вклад в выходной канал окружения. Объемный сигнал задерживается на 10 мс, чтобы достичь эффекта приоритета [3].

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

Улучшите эффективность симуляции, используя область Dataflow

Этот пример может использовать область выполнения dataflow в Simulink, чтобы использовать несколько ядер на рабочем столе для улучшения эффективности симуляции. Чтобы узнать больше о dataflow и о том, как запустить модели Simulink с использованием нескольких потоков, смотрите Многоядерное Выполнение с использованием Область.

Задайте область выполнения Dataflow

В Simulink вы задаете dataflow в качестве области выполнения для подсистемы путем установки параметра Domain на Dataflow с помощью Property Inspector. Области Dataflow автоматически разделяют вашу модель и моделируют систему с помощью нескольких потоков для повышения эффективности симуляции. Если вы установите параметр Domain на Dataflow, можно использовать Dataflow Simulation Assistant, чтобы проанализировать модель, чтобы получить лучшую эффективность. Можно открыть Dataflow Simulation Assistant, нажав на кнопку Dataflow assistant под параметром Automatic формат кадра calculation в Property Inspector.

Многоядерная симуляция области Dataflow

Помощник по симуляции Dataflow предлагает изменение настроек модели для оптимальной эффективности симуляции. Чтобы принять предложенные настройки модели, рядом с параметрами Предлагаемой модели для эффективности симуляции, нажмите Принять все. Также можно развернуть раздел, чтобы изменить настройки по отдельности. В Dataflow Simulation Assistant нажмите кнопку Analyze, чтобы начать анализ области dataflow для эффективности симуляции. После завершения анализа помощник по симуляции Dataflow показывает, сколько потоков будет использовать подсистема dataflow во время симуляции.

Для этой модели помощник показывает один поток, потому что зависимость данных между блоками препятствует их выполнению одновременно. Путем конвейеризации блоков, зависящих от данных, Подсистема Dataflow может увеличить параллелизм для повышения пропускной способности данных. Помощник по симуляции Dataflow показывает рекомендуемое количество задержек трубопровода как предполагаемую задержку. Для этой модели предлагаемая задержка равна двум. Чтобы использовать рекомендуемую задержку для подсистемы Dataflow, нажмите кнопку «Принять» рядом с полем «Предлагаемая задержка» в ассистенте симуляции Dataflow. Dataflow Simulation Assistant теперь показывает количество потоков как три, что означает, что блоки внутри подсистемы dataflow моделируются параллельно с использованием трех потоков.

Компенсируйте задержки

Когда задержка увеличивается в области выполнения dataflow, чтобы разбить зависимости данных между блоками и создать параллелизм, эта задержка должна учитываться в других частях модели. Для примера сигналы, которые сравниваются или объединяются с сигналами в портах выхода Подсистемы Dataflow, должны быть задержаны, чтобы выровняться во времени с сигналами в портах выхода Подсистемы Dataflow. В этом примере аудиосигнал от блока Audio Channels, который поступает на селектор Audio Player, должен быть отложен, чтобы соответствовать другим сигналам, поступающим в блок Audio Player Selector. Чтобы компенсировать задержку, заданную в подсистеме dataflow, используйте блок задержки, чтобы задержать этот сигнал на две системы координат. Для этого сигнала длина системы координат составляет 1024. Значение задержки 2048 устанавливается в блоке задержки для выравнивания сигнала от блока Аудиоканалов и сигнала, обрабатываемого через Подсистему Dataflow.

Эффективность симуляции Dataflow

Чтобы измерить улучшение эффективности, полученное при помощи dataflow, сравните время выполнения модели с и без dataflow. Блок Аудио Устройство Writer запускается в реальном времени и ограничивает скорость симуляции модели реальным временем. Закомментируйте блок Аудио Устройство Writer при измерении времени выполнения. На рабочем компьютере Windows с процессором Intel ® Xeon ® CPU W-2133 @ 3,6 ГГц 6 ядер 12 Threads эта модель с использованием области dataflow выполняется в 2,6 раза быстрее по сравнению с исходной моделью.

MATLAB Version

HelperAudioMatrixDecoderSim - функция MATLAB, содержащая реализацию примера аудиоматричного декодера. Он создает экземпляры, инициализирует и проходит через объекты, образующие алгоритм.

Функция audioMatrixDecoderApp оборачивается вокруг HelperAudioMatrixDecoderSim и итеративно вызывает его.

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

audioMatrixDecoderApp запускает пользовательский интерфейс, предназначенный для взаимодействия с симуляцией. Подобно версии примера Simulink, UI позволяет настраивать относительную степень между входами правого и левого каналов, а также уровень степени канала окружения. Можно также переключаться между прослушиванием любого из исходных, закодированных или декодированных аудиоканалов путем изменения значения выпадающего списка 'Audio Output' в пользовательском интерфейсе.

На пользовательском интерфейсе также есть три кнопки - кнопка 'Reset' сбрасывает внутреннее состояние симуляции до ее начального условия, и кнопка 'Pause Simulation' удерживает симуляцию, пока вы не нажмете на нее снова. Симуляция может быть завершено либо закрытием пользовательского интерфейса, либо нажатием на кнопку 'Stop simulation'.

MATLAB Coder может использоваться, чтобы сгенерировать код С для функции HelperAudioMatrixDecoderSim. В порядок, чтобы сгенерировать Файл MEX для вашей платформы, выполните команду HelperMatrixDecodingCodeGeneration из папки с разрешениями на запись.

Вызовом функции обертки audioMatrixDecoderApp с 'true' в качестве аргумента можно использовать сгенерированный файл MEX вместо HelperAudioMatrixDecoderSim для симуляции. В этом сценарии UI все еще работает в среде MATLAB, но основной алгоритм обработки выполняется файлом MEX. Эффективность повышается в этом режиме без ущерба для возможности настройки параметров.

Ссылки

[1] https://en.wikipedia.org/wiki/Matrix_decoder

[2] Dolby Pro Logic Surround Decoder: Принципы операции, Роджер Дресслер, Dolby Labs

[3] https://en.wikipedia.org/wiki/Precedence_effect