В этом примере показано, как реализовать декодер Vorbis, который является бесплатным программным обеспечением, альтернативой с открытым исходным кодом стандарту MP3. Это аудио, декодирующее формат, поддерживает сегментацию закодированных данных в маленькие пакеты для сетевой передачи.
Формат кодировки Vorbis [1] является алгоритмом сжатия звука с потерями с открытым исходным кодом, похожим на Слой 3 Аудио MPEG-1, чаще всего известный как MP3. Vorbis имеет многие из тех же функций как MP3 при добавлении гибкости и функциональности. Спецификация Vorbis только задает формат потока битов и алгоритма декодирования. Это позволяет разработчикам улучшать алгоритм кодирования в зависимости от времени и оставаться совместимыми с существующими декодерами.
Кодирование запускается путем разделения исходного сигнала в наложение систем координат. Vorbis позволяет системы координат различных длин так, чтобы он мог эффективно обработать стационарные и переходные сигналы. Каждая система координат умножается на окно и преобразовала использование модифицированного дискретного косинусного преобразования (mdct
). Системы координат затем разделены в грубое приближение, названное полом, и остаток вызвал остаток.
Гибкость формата Vorbis проиллюстрирована его использованием различных методов, чтобы представлять и закодировать пол и фрагменты остатка сигнала. Алгоритм вводит режимы как механизм, чтобы задать эти различные методы и таким образом код различные системы координат по-другому.
Ворбис использует Кодирование методом Хаффмана, чтобы сжать данные, содержавшиеся во фрагментах остатка и полу. Ворбис использует динамическую вероятностную модель, а не статическую вероятностную модель MP3. А именно, Ворбис создает пользовательские книги шифров для звуковых сигналов, которые могут отличаться для 'пола' и 'остатка' и от системы координат до системы координат.
После того, как Кодирование методом Хаффмана завершено, данные о системе координат побитно упакованы в логический пакет. В Vorbis серии таких пакетов всегда предшествует заголовок. Заголовок содержит всю информацию, необходимую для правильного декодирования. Эта информация включает полный набор книг шифров, описания методов, чтобы представлять пол и остаток, и режимы и отображения для многоканальной поддержки. Заголовок может также включать общую информацию, такую как битрейты, частота дискретизации, песня и имена художника, и т.д.
Vorbis обеспечивает свой собственный формат, известный как 'Ogg', чтобы инкапсулировать логические пакеты в транспортные потоки. Формат Ogg обеспечивает механизмы, такие как структурирование, синхронизация, расположение и исправление ошибок, которые необходимы для передачи данных по сетям.
Декодер Ворби в этом примере реализует технические требования Ворби, которые я форматирую, который является подмножеством Ворби. Модель в качестве примера декодирует любой необработанный бинарный файл OGG, содержащий моно или звуковой сигнал стерео. Модель в качестве примера имеет возможность декодировать и воспроизвести большое разнообразие звуковых файлов Ворби в режиме реального времени.
Можно протестировать этот пример с любым звуковым файлом Vorbis, или с включенным handel
файл. Чтобы загрузить файл в модель, замените имя файла в аннотируемом коде в верхнем уровне модели с именем файла, который вы хотите протестировать. Когда этот шаг будет завершен, кликните по аннотируемому коду, чтобы загрузить новый звуковой файл. Модель сконфигурирована, чтобы уведомить вас, если выходная частота дискретизации была изменена из-за изменения во входных данных. В этом случае симуляция должна быть перезапущена с новой частотой дискретизации.
Для того, чтобы реализовать декодер Vorbis в Simulink®, необходимо обратиться к пакетам данных переменного размера. Этот пример обращается к пакетам переменного размера путем получения целой страницы потока битов Ogg с помощью шаблона синхронизации 'OggS'. Практически, страница принята, чтобы быть не больше, чем 5 500 байтов. После получения таблицы сегментации в начале страницы модель извлекает логические пакеты из остатка страницы. Асинхронное управление последовательностью декодирования реализовано с помощью диаграммы Stateflow, 'Декодируют Все Страницы Данных'.
Первоначально, график пытается обнаружить шаблон синхронизации 'OggS' и затем выполнить шаги декодирования, описанные выше. Декодирование страницы сделано с функцией Simulink 'decodePage', и затем модель сразу возвращается к обнаружению следующей последовательности 'OggS'. 'ResetPageCounter' состояния добавляется параллельно с алгоритмом Stateflow, описанным выше, чтобы поддержать цикличное выполнение сжатого входного файла для неограниченного количества итераций.
Страницы данных содержат различные типы информации: заголовок, книги шифров и данные о звуковом сигнале. 'Информация о Setup Чтения', 'Чтение, Заголовок', и 'Декодирует Аудио' подсистемы в функции 'decodePage' Simulink, ответственно за обработку каждых из этих различных видов информации.
Процесс декодирования реализован с помощью блоков MATLAB function. Большинство распаковывающих бит стандартных программ в примере реализовано с кодом MATLAB.
Переобъединение пола и остатка и последующей инверсии MDCT (IMDCT) также реализовано с блоком MATLAB function, который использует быстрый imdct
функция Audio Toolbox. Переменные длины системы координат учтены с помощью системы координат максимальной длины фиксированного размера при вводе и выводе Функционального блока, и при помощи параметра длины окна и в коде Функционального блока и в Селекторном блоке сразу после Функционального блока.
IMDCT преобразовывает системы координат назад к временному интервалу, готовый быть умноженным на окно синтеза и затем объединенным с перекрытием - добавляют операцию.
Выходной блок в верхнем уровне модели питает выход блока декодирования к устройству воспроизведения звука в вашей системе. Допустимый фрагмент декодируемого сигнала вводится с блоком Audio Device Writer.
[1] Полная спецификация стандарта декодера Vorbis https://xiph.org/vorbis/doc/Vorbis_I_spec.html