Linear Predictive Coding (LPC) — это не просто ещё один алгоритм сжатия речи. Это фундаментальная математическая модель, объединяющая физиологию человеческого голоса, теорию сигналов и практику цифровых коммуникаций. В этой статье мы разберёмся, как из грубого набора «жужжания» и «шипения» получается компактный цифровой поток, способный пересекать континенты с задержкой менее 150 мс.
Содержание
- Голос как физическая система
- Математика линейного предсказания
- Исторический путь LPC: от лаборатории до смартфонов
- Семейство LPC-кодеков: LPC-10, CELP, MELP
- Практическая реализация: от кода до звука
- Устойчивость к ошибкам и LSP-представление
- Где сегодня «живёт» LPC
- Будущее: гибриды с нейросетями
Голос как физическая система: труба и жужжалка
Самая простая, но гениальная идея 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. Синтез на приёмной стороне
- Формируем возбуждение: для гласных — импульсный поезд по питчу; для согласных, белый шум.
- Пропускаем через фильтр IIR с полученными коэффициентами.
- Применяем постфильтрацию (психоакустическое маскирование).
Устойчивость к ошибкам и 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.