Принцип сжатия G722
Алгоритм кодирования G.722 отличается от G.711 тем, что он использует адаптивную дифференциальную импульсно-кодовую модуляцию (ADPCM), которая позволяет достигать более эффективного сжатия данных при передаче широкополосного аудио. Рассмотрим пошагово, как происходит кодирование сигнала с использованием G.722.
Шаг 1: Дискретизация
Как и в случае с G.711, первый этап включает дискретизацию аналогового аудиосигнала. Однако частота дискретизации в G.722 выше и составляет 16000 Гц (то есть каждые 62,5 мкс). Это позволяет захватывать более широкую полосу частот, чем в G.711, что улучшает качество звука.
Шаг 2: Преобразование в разностную форму
Вместо того чтобы кодировать сам сигнал, как это делается в G.711, в G.722 сначала вычисляется разница между текущим отсчетом и предсказанным значением предыдущего отсчета. Эта операция называется дифференциацией.
Для предсказания следующего значения используется линейный предсказатель первого порядка, который основывается на предыдущем отсчете. Формула предсказанного значения может выглядеть так:

где
^Xn — предсказанное значение текущего отсчета, x{n-1} — предыдущий отсчет, a1 — коэффициент предсказания.
Разница между фактическим и предсказанным значениями определяется как:

Шаг 3: Адаптивное квантование
Затем разностный сигнал квантуется с использованием адаптивного квантизатора. Адаптация заключается в изменении шага квантования в зависимости от уровня сигнала. Чем сильнее изменяется сигнал, тем больший шаг квантования используется, и наоборот.
Шаг квантования обновляется после каждой итерации согласно следующему правилу:

где — текущий шаг квантования, — предыдущий шаг квантования, — функция масштабирования, зависящая от величины ошибки .
Шаг 4: Кодирование
Квантуемые значения кодируются в 6-битном формате, что дает 64 возможных уровня. Это меньше, чем в G.711 (8 бит), но благодаря адаптивному квантованию удается сохранить хорошее качество звука при меньшем объеме передаваемых данных.
Шаг 5: Обратное преобразование
На стороне декодера выполняется обратное преобразование, которое включает восстановление сигнала из разностных значений и предсказанных значений. Процесс восстановления начинается с последнего известного значения и продолжается рекурсивно.
Пример псевдокода для реализации алгоритма кодирования G.722
def encode_g722(x, a1=0.9):
# Инициализация переменных
x_hat = 0 # Предсказанное значение
Q = 1 # Начальный шаг квантования
encoded_signal = []
for xn in x:
# Вычисляем ошибку предсказания
en = xn - x_hat
# Адаптивное квантование
qn = round(en / Q)
Q = Q * abs(qn) / 32 if abs(qn) > 15 else Q * 115 / 128
# Кодируем значение
cn = int_to_bits(qn, 6)
encoded_signal.append(cn)
# Обновляем предсказанное значение
x_hat = xn - Q * qn
return encoded_signal
Отличия от G.711
Основные различия между алгоритмами кодирования G.711 и G.722 заключаются в следующем:
- Частота дискретизации: G.711 использует частоту 8000 Гц, тогда как G.722 — 16000 Гц, что позволяет передавать более широкий диапазон частот.
- Метод кодирования: G.711 использует PCM с логарифмическим сжатием амплитуды (компандированием), в то время как G.722 применяет ADPCM, что делает его более эффективным для сжатия данных.
- Битрейт: G.711 передает данные со скоростью 64 Кбит/с, тогда как G.722 может работать в диапазоне от 48 до 64 Кбит/с, в зависимости от настроек.
- Качество звука: G.722 обеспечивает лучшее качество звука за счет большей полосы пропускания и более эффективной схемы сжатия.
Таким образом, G.722 является более современным и эффективным решением для передачи высококачественного аудио по сравнению с G.711, хотя последний остается популярным благодаря своей простоте и надежности.