exponenta event banner

Vorbis декодер

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

Основы Vorbis

Формат кодирования Vorbis [1] представляет собой алгоритм сжатия звука с потерями с открытым исходным кодом, аналогичный алгоритму MPEG-1 Audio Layer 3, более известному как MP3. Vorbis обладает многими из тех же функций, что и MP3, одновременно добавляя гибкость и функциональность. Спецификация Vorbis определяет только формат битового потока и алгоритм декодирования. Это позволяет разработчикам улучшать алгоритм кодирования с течением времени и оставаться совместимыми с существующими декодерами.

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

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

Vorbis использует кодирование Хаффмана для сжатия данных, содержащихся в частях пола и остатков. Ворбис использует динамическую вероятностную модель, а не статическую вероятностную модель MP3. В частности, Vorbis строит пользовательские кодовые книги для аудиосигналов, которые могут отличаться для «пола» и «остатка» и от кадра к кадру.

После завершения кодирования Хаффмана данные кадра упаковываются в логический пакет. В Vorbis серии таких пакетов всегда предшествует заголовок. Заголовок содержит всю информацию, необходимую для правильного декодирования. Эта информация включает полный набор кодовых книг, описания методов представления пола и остатка, а также режимы и отображения для многоканальной поддержки. Заголовок может также включать в себя общую информацию, такую как скорости передачи битов, частота дискретизации, имена песен и исполнителей и т.д.

Vorbis предоставляет собственный формат, известный как «Ogg», для инкапсуляции логических пакетов в транспортные потоки. Формат Ogg обеспечивает такие механизмы, как кадрирование, синхронизация, позиционирование и исправление ошибок, которые необходимы для передачи данных по сетям.

Обзор проблемы и сведения о конструкции

Декодер Vorbis в этом примере реализует спецификации формата Vorbis I, который является подмножеством Vorbis. Пример модели декодирует любой необработанный двоичный OGG-файл, содержащий моно- или стереофонический звуковой сигнал. Примерная модель способна декодировать и воспроизводить большое количество аудиофайлов Vorbis в реальном времени.

Вы можете протестировать этот пример с любым аудиофайлом Vorbis или с включенным handel файл. Чтобы загрузить файл в модель, замените имя файла в аннотированном коде на верхнем уровне модели на имя файла, который требуется проверить. По завершении этого шага щелкните аннотированный код для загрузки нового аудиофайла. Модель настроена на уведомление о том, что частота выборки на выходе была изменена из-за изменения входных данных. В этом случае моделирование необходимо перезапустить с новой частотой выборки.

Для реализации Vorbis-декодера в Simulink ® необходимо обратиться к пакетам данных переменного размера. В этом примере рассматриваются пакеты переменного размера путем захвата всей страницы битового потока Ogg с использованием комбинации синхронизации «OggS». В практических целях предполагается, что размер страницы не превышает 5500 байт. После получения таблицы сегментации в начале страницы модель извлекает логические пакеты из остальной части страницы. Асинхронное управление последовательностью декодирования осуществляется с использованием диаграммы Stateflow 'Декодировать все страницы данных'.

Первоначально диаграмма пытается обнаружить синхронизирующую комбинацию «OggS» и затем выполнить описанные выше шаги декодирования. Декодирование страницы выполняется с помощью функции Simulink 'decasePage', а затем модель немедленно возвращается к обнаружению следующей последовательности 'OggS'. Состояние ResetPageCounter добавляется параллельно алгоритму Stateflow, описанному выше, чтобы поддерживать закольцовывание сжатого входного файла для неограниченного числа итераций.

Страницы данных содержат различные типы информации: заголовок, кодовые книги и данные аудиосигнала. Подсистемы 'Read Setup Info', 'Read the Header' и 'Decode Audio' в функции 'decasePage' Simulink отвечают за обработку каждой из этих различных видов информации.

Процесс декодирования реализуется с использованием функциональных блоков MATLAB. Большинство процедур распаковки битов в примере реализованы с кодом MATLAB.

Рекомбинация пола и остатка и последующий обратный MDCT (IMDCT) также реализуются с помощью блока MATLAB Function, который использует быстрый imdct функция панели инструментов Audio Toolbox. Переменные длины кадров учитываются с использованием кадра максимальной длины фиксированного размера на входе и выходе функционального блока и с использованием параметра длины окна как в коде функционального блока, так и в блоке селектора, непосредственно следующем за функциональным блоком.

IMDCT преобразует кадры обратно во временную область, готовую к умножению на окно синтеза и затем объединяется с операцией наложения-сложения.

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

Ссылки

[1] Полная спецификация стандарта декодера Vorbis https://xiph.org/vorbis/doc/Vorbis_I_spec.html