Кодек линейного предсказания

Как кодек линейного предсказания творит магию, сжимая аудио без потерь качества? Разгадка секретов чистого звука и алгоритмов!

Linear Predictive Coding (LPC) — это не просто ещё один алгоритм сжатия речи. Это фундаментальная математическая модель, объединяющая физиологию человеческого голоса, теорию сигналов и практику цифровых коммуникаций. В этой статье мы разберёмся, как из грубого набора «жужжания» и «шипения» получается компактный цифровой поток, способный пересекать континенты с задержкой менее 150 мс.

Содержание

  1. Голос как физическая система
  2. Математика линейного предсказания
  3. Исторический путь LPC: от лаборатории до смартфонов
  4. Семейство LPC-кодеков: LPC-10, CELP, MELP
  5. Практическая реализация: от кода до звука
  6. Устойчивость к ошибкам и LSP-представление
  7. Где сегодня «живёт» LPC
  8. Будущее: гибриды с нейросетями

Голос как физическая система: труба и жужжалка

Самая простая, но гениальная идея LPC: представить речь как результат работы двух «блоков»:

  • Источник (buzzer) — голосовые складки, создающие периодическое жужжание. Его характеризуют основной тон (F0) и амплитуда.
  • Фильтр (tube) — голосовой тракт: гортань, ротовая полость, язык и губы. Он задаёт форманты — резонансные частоты, которые придают звуку «цвет» и делают различимыми гласные.

Шипящие и взрывные согласные моделируются добавлением шумоподобного «hiss» и «pop» сигналов.

Математика линейного предсказания

Модель AR-процесса

Сигнал s[n] описывается как линейная комбинация предыдущих p отсчётов плюс ошибка предсказания e[n]:

s[n] = Σk=1..p ak · s[n–k] + e[n]

Вектор коэффициентов ak характеризует форманты, а e[n], остаток, который либо периодичен (для гласных), либо случаен (для шумных согласных).

Метод наименьших квадратов и уравнение Юла-Уокера

Для нахождения ak минимизируется среднеквадратичная ошибка. Это приводит к системе линейных уравнений:

R · a = r

где R, матрица автокорреляции, r — вектор кросс-корреляции. Решение даёт фильтр синтеза H(z).

Исторический путь LPC

Год Событие Ключевая фигура
1947 Теория оптимального предсказания Н. Винера Норберт Винер
1966-67 Применение к речи: Itakura & Saito, Atal & Schroeder Фумиё Итакура
1971 Первый реал-тайм LPC-кодер на аппаратуре Texas Instruments
1978 LPC-10 2400 бит/с стал стандартом DoD Bishnu Atal
1985 CELP (Code-Excited Linear Prediction) Schroeder & Atal
1995 LPC в стандарте GSM 06.10 ETSI
2003 LPCNet — гибрид с нейросетями Jean-Marc Valin

Семейство LPC-кодеков

LPC-10 (2 400 бит/с)

  • Фрейм: 22,5 мс (180 отсчётов при 8 кГц)
  • 10 коэффициентов формантного фильтра + 1 питч-передатчик
  • Побочные эффекты: «металлический» тембр, низкая интеллигибельность музыки

CELP (Code Excited Linear Prediction)

Ключевое улучшение: вместо простого шумоподобного остатка используется кодовая книга векторов возбуждения, что повышает качество до 4 800–12 800 бит/с.

MELP (Mixed Excitation LPC)

Военный стандарт MIL-STD-3005: мульти-полосное возбуждение + шумовые флаги, 2 400–1 200 бит/с с сохранением интеллигибельности даже при 3 % ошибок битового потока.

Практическая реализация: шаг за шагом

Шаг 1. Оконное преобразование

Применяем оконную функцию (обычно Хэмминга) к 20–30 мс фрейму, чтобы минимизировать спектральные утечки.

Шаг 2. Оценка питча

  • Автокорреляция для грубого поиска.
  • Normalized cross-correlation для уточнения в диапазоне 50–400 Гц.

Шаг 3. Вычисление LPC-коэффициентов

% Python (scipy.signal)
import numpy as np
from scipy.signal import lfilter
a = librosa.lpc(frame, order=10)
residual = lfilter(a, [1], frame)

Шаг 4. Квантование и передача

Коэффициенты преобразуются в LSP-частоты, которые квантуются в 18–34 бит/фрейм и обладают встроенной устойчивостью.

Шаг 5. Синтез на приёмной стороне

  1. Формируем возбуждение: для гласных — импульсный поезд по питчу; для согласных, белый шум.
  2. Пропускаем через фильтр IIR с полученными коэффициентами.
  3. Применяем постфильтрацию (психоакустическое маскирование).

Устойчивость к ошибкам и LSP-представление

Передача LPC-коэффициентов ak «в сыром виде» опасна: малейшая ошибка может сместить полюс за единичную окружность → фильтр становится неустойчивым. Line Spectral Pairs (LSP) решают проблему:

  • Коэффициенты преобразуются в пары частот, упорядоченные на оси 0…π.
  • Любая перестановка или выход за границу сразу заметна и корректируется.
  • Интерполяция LSP между фреймами даёт более плавное звучание.

Где сегодня «живёт» LPC

  • VoIP: Opus, SILK (Skype), AMR-NB (GSM).
  • Спутниковая связь: Inmarsat BGAN 4 000 бит/с.
  • Игровые движки: Unity, Unreal Engine, сжатие диалогов NPC.
  • Музыка: автотюн, вокодер; Известный пример — «Hide and Seek» (Imogen Heap).
  • Ассистенты: Amazon Alexa, Google Assistant — для низкобитрейтового «wake word».

Будущее: LPC + нейросети

Современные подходы, такие как LPCNet, комбинируют классическую модель AR с нейросетью WaveRNN: LPC-параметры задают курс, а нейросеть «рисует» тонкую текстуру сигнала; Результат — звук 16 кГц при 1,6 кбит/с, качественно сравнимый с 8 кбит/с Opus.