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

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

Введение

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

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

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

Версия Simulink

audiomatrixdecoding модель реализует аудио матричный пример кодирования/декодирования.

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

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

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

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

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

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

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

Можно слушать кодируемые левые и правые сообщения стерео путем двойного клика по подсистеме Селектора Аудиоплеера и выбора каналов 'Encoded Total Right' или 'Encoded Total Left'.

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

Матричный Декодер извлекает четыре исходных канала от кодируемого сообщения стерео.

lowpass частоты сначала разделяются с помощью Linkwitz-раздраженного перекрестного фильтра. Для получения дополнительной информации о реализации Linkwitz-раздраженного фильтра, обратитесь к Многополосному Сжатию Динамического диапазона.

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

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

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

Можно слушать декодируемый, окружают сигнал путем двойного клика по подсистеме Селектора Аудиоплеера и выбора одного из декодируемых сигналов.

Улучшайте производительность симуляции Используя область потока данных

Этот пример может использовать область выполнения потока данных в Simulink, чтобы использовать несколько ядер на вашем рабочем столе, чтобы улучшать производительность симуляции. Чтобы узнать больше о потоке данных и как запустить модели Simulink с помощью нескольких потоков, смотрите, что Многожильное Выполнение использует Область Потока данных (DSP System Toolbox).

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

В Simulink вы задаете поток данных как область выполнения для подсистемы путем установки Доменного параметра на Поток данных с помощью Property Inspector. Области потока данных автоматически делят вашу модель и моделируют систему с помощью нескольких потоков для лучшей производительности симуляции. Если вы устанавливаете Доменный параметр на Поток данных, можно использовать Ассистент Симуляции Потока данных, чтобы анализировать модель, чтобы получить лучшую производительность. Можно открыть Ассистент Симуляции Потока данных путем нажатия на ассистент Потока данных кнопка ниже Автоматического параметра вычисления формата кадра в Property Inspector.

Многожильная симуляция области потока данных

В Ассистенте Симуляции Потока данных нажмите кнопку Analyze, чтобы запустить анализ области потока данных для производительности симуляции. Если анализ закончен, Ассистент Симуляции Потока данных показывает, сколько потоков подсистема потока данных будет использовать во время симуляции.

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

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

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

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

Чтобы измерить повышение производительности, полученное при помощи потока данных, сравните время выполнения модели с и без потока данных. Блок Audio Device Writer запускается в режиме реального времени и ограничивает скорость симуляции модели к реальному времени. Прокомментируйте блок Audio Device Writer при измерении времени выполнения. На рабочем компьютере Windows с Intel® Xeon® CPU E5-1650 v3 3.5 процессора GHz 6 Cores 12 Threads эта модель с помощью области потока данных выполняется 1.3x времена быстрее по сравнению с исходной моделью.

MATLABVersion

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

Функциональный audioMatrixDecoderApp переносит HelperAudioMatrixDecoderSim и итеративно вызывает его.

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

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

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

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

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

Ссылки

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

[2] Dolby Pro Logic окружает декодер: принципы операции, Роджера Дресслера, Labs системы Долби

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