Декодер Vorbis

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

Основы Vorbis

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

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

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

Модифицированное дискретное косинусное преобразование (MDCT) [2] и его обратный дубликат используется в Vorbis, чтобы преобразовать сигнал в область преобразования, где энергетическая концентрация происходит. Энкодер Vorbis затем разделяет, изображение спектра системы координат в грубое приближение вызвало 'пол', и остаток вызвал 'остаток'.

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

Ворбис использует Кодирование методом Хаффмана, чтобы сжать данные, содержавшиеся во фрагментах остатка и полу. На этом шаге Ворбис позволяет более эффективное кодирование, чем MP3. Ворбис использует динамическую вероятностную модель, а не статическую вероятностную модель Слоя 3 Аудио MPEG-1. А именно, Ворбис создает пользовательские книги шифров для какого-то конкретного звукового сигнала, который может отличаться для 'пола' и 'остатка' и от системы координат до системы координат.

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

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

Проблемный обзор и детали проекта

Декодер Ворби в этом примере реализует спецификации Ворби, которые я форматирую. Это представляет подмножество "полных приводимых в действие" Ворби. Модель в качестве примера декодирует любой необработанный двоичный файл .ogg файл с инкапсулированным сжатым моно или звуковым сигналом стерео на небольшом уровне, который может варьироваться. Модель в качестве примера имеет возможность декодировать и воспроизвести большое разнообразие звуковых файлов Ворби в режиме реального времени при условии, что те файлы правильно инкапсулируются в транспортный filestream Ogg.

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

Для того, чтобы реализовать декодер Vorbis в Simulink®, некоторые технические проблемы должны быть решены. Один такой фактор является тем, что логические пакеты данных не имеют никакого заданного размера. Этот пример занимается этой переменной проблемой размера путем получения целой страницы потока битов Ogg путем обнаружения шаблона синхронизации 'OggS'. Практически страница принята, чтобы быть не больше, чем 5 500 байтов. После получения таблицы сегментации в начале страницы модель извлекает логические пакеты из остатка страницы. Асинхронное управление такой последовательностью декодирования реализовано с помощью диаграммы Stateflow, 'Декодируют Все Страницы Данных', изображенных ниже.

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

Страницы данных содержат различные типы информации: заголовок, книги шифров и данные о звуковом сигнале. 'Информация о Setup Чтения', 'Чтение, Заголовок', и 'Декодирует Аудио' подсистемы в функции 'decodePage' Simulink, ответственно за обработку каждых из этих различных видов информации.

Из-за итеративной природы процесса декодирования Хафмана, основанная на тексте реализация в коде MATLAB® обеспечивает более естественную реализацию, чем делает основанную на блок-схеме реализацию. Поэтому процесс декодирования реализован с помощью блоков MATLAB function. Все нетривиальные распаковывающие бит стандартные программы в примере реализованы с кодом MATLAB.

Системы координат в Vorbis могут иметь два различных размера в сигнале. Это означает, что IMDCT должен быть реализован, чтобы составлять точное обратное преобразование пола и фрагменты остатка сигнала. Для этой части модель использует сигналы с переменным размером, чтобы гарантировать, что только допустимая часть системы координат обрабатывается для каждого вызова IMDCT. Непостоянно размерные сигналы обозначаются в подсистеме ниже темными, пунктирными сигнальными линиями. В этом примере IMDCT вычисляется с помощью БПФ.

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

Блок Output в верхнем уровне модели питает выход блока Decode Audio к устройству воспроизведения звука в вашей системе. Мы обеспечиваем допустимый фрагмент декодируемого сигнала как переменная измеренный сигнал (Ogg Vorbis является кодеком с переменной скоростью передачи) в блок 'To Audio Device', который был обновлен, чтобы принять такие входные параметры.

Ссылки

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

[2] https://en.wikipedia.org/wiki/Modified_discrete_cosine_transform

[3] https://en.wikipedia.org/wiki/File:06_-_ Vivaldi_Summer_mvt_3_Presto_-_ John_Harrison_violin.ogg