Skip to content
AgushaOSPublic

About

Репозиторий проекта WHA

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

Wavelet Hierarchical Audio (Outdated, will be updated soon enough)

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

Характеристики кодека

  • Алгоритмическая задержка: ~22-44 мс на блок
  • Скорость кодирования превышает MP3 LIB3LAME в ~5.3 раза, AAC-LC в ~5.3 раз, Opus в ~4 раза
  • Скорость декодирования сравнима с MP3 на 128 кбит/с, сравнима с Opus на <128 кбит/с
  • Прозрачное качество достигается на битрейтах 160 - 192 кбит/с для большинства треков по PEAQ.
  • Полупрозрачное/почтипрозрачное качество достигается на битрейтах 96-128 кбит/с
  • Слушабельное/нормальное качество достигается на 64 кбит/с
  • Перекрытие между блоками: ~4.56-9.12%
  • Поддержка: 44.1 кГц и 22.05 кГц
  • Плавное затухание частот выше 16 кГц с сохранением формы спектра на низких битрейтах, вместо стандартного lowpass
  • Стерео, моно
  • Работает в режиме ABR
  • Сравним с Vorbis по gstPEAQ и ViSQOL на 128 кбит/с
  • Превышает Vorbis по gstPEAQ и ViSQOL на <128 кбит/с

Описание алгоритма

В аудиокодеке используется вейвлет-пакетное разложение (WPT), вместо модифицированного косинусного преобразования (MDCT).

Также вместо фильтр-банки используется лифтинг схема с длиной предсказания и обновления 16 и 6 точки соответственно, что позволяет достичь быстрого разложения сигнала на субполосы с достаточно хорошими частотными характеристиками.

После упорядочивания по Грэй-коду (Gray-code), происходит кодирование совместного стерео (Joint Stereo), где для каждой пары субполос из разных каналов выбирается LR/MS/IS.

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

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

На уже квантованные значения применяется декорреляционная и энтропийная системы.

В качестве энтропийного кодировщика используются райс-коды (Rice code) с адаптивным k на субполосу.

Система бит-резервуара между блоками устроена по принципу "выигрыш с предыдущего переместить на нынешний" с ограничителем в не более 20% от заданного бит-бюджета.

Активно используется адаптивная система Intensity Stereo на битрейтах 64-192 кбит/с

Активно используется система WSC (Wavelet Subband Completion) для всех битрейтов для заполнения пропущенных полос.

В качестве пост-обработки используется дизеринг на битрейты <=192 кбит/с и гармоническое шумоподавление на битрейты <=96 кбит/с через FFT.

Сохранение ВЧ (частот > 16 кГц)

Благодаря неидеальной частотной локализации фильтров и перекрытию субполос, что в АЧХ вейвлета направлены с ВЧ->НЧ/СЧ, высокочастотная энергия частично распределяется в соседние низшие диапазоны.

Это позволяет сохранять форму спектра и временную структуру сигнала в высокочастотной области, обеспечивая более плавное затухание высоких частот вместо жёсткого обрезания (brick-wall), характерного для традиционных кодеков, даже при частичном подавлении или низком битрейте.

Диапазон сохранения энергии ВЧ (вплоть до 22.05 кГц):

  • на 192 кбит/с: 25% - 97%
  • на 160 кбит/с: 23% - 94%
  • на 128 кбит/с: 20% - 80%

Перцептивная модель

Кодек оптимизирован на сохранение:

  • спектральной огибающей сигнала
  • транзиентной структуры
  • высокочастотной текстуры без резких cutoff-артефактов
  • быстрое сжатие с хорошим качеством

Обработка транзиентов и артефакты пост/пре эха

Благодаря вейвлет-пакетному разложению (WPT), транзиенты локализируются естественным образом внутри временно-частотных субполос, без необходимости отдельных детекций.

Артефакты пост-эха и пре-эха не были зафиксированы на тестовых сигналах с резкими атаками (включая стерео хлопки).

Межблочная устойчивость

Для декодирования текущего блока требуется только небольшая часть данных предыдущего блока (~4.56-9.12%), используемая для коррекции граничных эффектов при восстановлении сигнала.

Основная часть блока декодируется независимо, что позволяет выполнять потоковое воспроизведение с низкой алгоритмической задержкой (~44 мс) и минимальным буфером (не более одного блока).

Имеется состояние для предсказания шага квантования, но оно опционально и его можно выключить.

Устойчивость к потере данных

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

Масштабируемость

Кодек поддерживает работу с произвольным целевым битрейтом, задаваемым при инициализации, начиная от 48 кбит/с.

Поддерживаемые частоты дискретизации: 44.1 кГц, 22.05 кГц

Поведение при снижении битрейта

При снижении битрейта качество деградирует постепенно без резких пороговых артефактов.

Основной характер искажений:

  • ослабление высокочастотной энергии
  • упрощение шумовой составляющей
  • сохранение временной структуры сигнала
  • сохранение транзиентной структуры сигнала
  • возможное искажение чистых синусоидальных сигналов

Известные артефакты

При экстремально низких битрейтах (ниже 128 кбит/с) могут наблюдаться:

  • упрощение шумовой текстуры
  • частичная потеря высокочастотной детализации
  • смазывание инструментов

Ограничения

Кодек плохо справляется с битрейтами ниже 128 кбит/с для стерео аудио файла, а также наблюдается снижение эффективности при работе с частотой дискретизации равной 48 кГц.

Асимптотика алгоритма

Благодаря неглубокому вейвлет-пакетному разложению (WPT) асимптотика алгоритма в пределах O(N).

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

Результаты MOS тестирований

Результаты MOS тестирования проводились используя наушники DT770-Pro 32 Ohm и плеер FiiO JM21 на тихой и средней громкостях.

Участвовало 5 человек возрастом от 16 до 17 лет, в числе которых были 2 музыканта.

Была использована 5 балльная шкала MOS: Результаты тестирований:

  • 192 кбит/с: 4.6 (1 человек) и 5 (4 человека).
  • 160 кбит/с: 4.6 (2 человека) и 5 (3 человека).
  • 128 кбит/с: 4.3 (1 человек) и 4.6 (4 человека).
  • 96 кбит/с: 4 (2 человека) и 4.3 (3 человека).
  • 64 кбит/с: 3.5 (2 человека) и 4.2 (3 человека).

Примечание: результаты представляют собой неформальную MOS-оценку и не соответствуют стандартизированному тестированию.

Как запускать кодек

В файлах есть скрипт setup.sh -- он отвечает за компилирование кодека, его бинарника кодирования (code) и его бинарника декодирования (decode). И

нтерфейсы функций следующие:

  • ./code "example.wav" [bitrate] (на выходе файл формата .wha)
  • ./decode "example.wha" "output.wav"

About

Репозиторий проекта WHA

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages