An open API service indexing awesome lists of open source software.

https://github.com/agushaos/wha

Репозиторий проекта WHA
https://github.com/agushaos/wha

audio audiocodec dsp wavelet

Last synced: 9 days ago
JSON representation

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

Awesome Lists containing this project

README

          

# Wavelet Hierarchical Audio

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

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

- Алгоритмическая задержка: ~22 мс на блок
- Скорость кодирования превышает MP3 LIB3LAME в ~5.3 раза, AAC-LC в ~5.3 раз, Opus в ~4 раза
- Скорость декодирования сравнима с MP3
- Прозрачное качество достигается на битрейтах 160 - 192 кбит/с для большинства треков
- Перекрытие между блоками: ~4.56%
- Поддержка: 44.1 кГц, 88.2 кГц
- Плавное затухание частот выше 16 кГц с сохранением формы спектра
- Стерео, моно
- Работает в режиме CVBR

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

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

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

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

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

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

На уже квантованные значения применяется декорреляционная и энтропийная системы. Для первых 2-х субполос подбираются наилучшие фиксированными LPC предикторы, для оставшихся они по умолчанию берутся равные 0.

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

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

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

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

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

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

Диапазон сохранения энергии ВЧ:
- на 192 кбит/с: 25% - 97%
- на 160 кбит/с: 23% - 74%
- на 128 кбит/с: 20% - 60%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

При экстремально низких битрейтах (ниже 128 кбит/с) могут наблюдаться:
- упрощение шумовой текстуры
- частичная потеря высокочастотной детализации
- смазывание инструментов

## Ограничения

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

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

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

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

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

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

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

Была использована 5 балльная шкала:
- 1 -- ужасный результат
- 2 -- плохой результат
- 3 -- терпимый результат
- 4 -- нормальный результат
- 4+ -- хороший результат
- 5- -- почти прозрачный результат
- 5 -- прозрачный результат

Результаты тестирований:
- 192 кбит/с: 5- (1 человек) и 5 (4 человека). Прозрачно для большинства треков (5) и почти-прозрачно для крайних случаев (5-)
- 160 кбит/с: 5- (2 человека) и 5 (3 человека). Прозрачно для большинства треков (5) и почти-прозрачно для крайних случаев и сложной стерео сцены (5-)
- 128 кбит/с: 4+ (3 человека) и 5- (2 человека). Хорошее (4+) или почти прозрачное (5-) качество для большинства треков

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

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

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

нтерфейсы функций следующие:
- ./code "example.wav" [bitrate] (на выходе файл фПормата .wha)
- ./decode "example.wha" "output.wav"