Введение

Код с возбуждением по линейному предсказанию (CELP) — это линейный предсказательный алгоритм кодирования речи, впервые предложенный Манфредом Р. Шредером и Бишну С. Аталом в 1985 году. В то время он обеспечивал значительно более высокое качество, чем существующие алгоритмы с низкой битовой скоростью, такие как вокодеры с остаточным возбуждением линейного предсказания (RELP) и линейное предсказательное кодирование (LPC) (например, FS 1015). Вместе со своими вариантами, такими как алгебраический CELP, CELP с ослабленными ограничениями, CELP с низкой задержкой и линейное предсказание с векторным суммарным возбуждением, он в настоящее время является наиболее широко используемым алгоритмом кодирования речи. Он также используется в кодировании речи в MPEG 4 Audio. CELP обычно используется как общий термин для целого класса алгоритмов, а не для конкретного кодека.

Декодер CELP

Прежде чем исследовать сложный процесс кодирования CELP, мы представляем здесь декодер. На рисунке 1 описан обобщенный декодер CELP. Возбуждение формируется путем суммирования вкладов из фиксированного (так называемого стохастического или инновационного) и адаптивного (так называемого высотного) кодовых книг:

где – вклад фиксированного (так называемого стохастического или инновационного) кодового книги, а – вклад адаптивного (высотного) кодового книги. Фиксированный кодовый словарь представляет собой словарь векторного квантования, который (явно или неявно) жестко запрограммирован в кодеке. Этот словарь может быть алгебраическим (ACELP) или храниться явно (например, Speex). Элементы адаптивного кодового словаря состоят из задержанных версий возбуждения. Это позволяет эффективно кодировать периодические сигналы, такие как речевые звуки. Фильтр, формирующий возбуждение, имеет всеполюсную модель вида , где называется фильтром предсказания и получается с использованием линейного предсказания (алгоритм Левинсона-Дурбина). Всеполюсный фильтр используется, поскольку он хорошо аппроксимирует человеческий голосовой тракт и его легко вычислить.

Кодировщик CELP

Основной принцип CELP называется анализ-синтез (AbS) и означает, что кодирование (анализ) выполняется путем перцептивной оптимизации декодированного (синтезируемого) сигнала в замкнутом контуре. Теоретически, наилучший поток CELP был бы получен путем перебора всех возможных комбинаций битов и выбора той, которая обеспечивает наилучшее звучание декодированного сигнала. Это, очевидно, невозможно на практике по двум причинам: требуемая вычислительная сложность превышает возможности любого современного оборудования, а критерий выбора "лучшего звучания" подразумевает участие человека-слушателя. Для достижения кодирования в реальном времени при ограниченных вычислительных ресурсах поиск CELP разбивается на более мелкие, управляемые последовательные поиски с использованием простой функции перцептивного взвешивания. Обычно кодирование выполняется в следующем порядке:

Вычисляются и квантуются коэффициенты линейного предсказания (LPC), как правило, в виде линейных спектральных пар (LSP). Выполняется поиск в адаптивном (питч) кодовом словаре, и его вклад вычитается. Выполняется поиск в фиксированном (инновационном) кодовом словаре.

Взвешивание шума

Большинство (если не все) современных аудиокодеков стремятся формировать шум кодирования таким образом, чтобы он проявлялся преимущественно в тех частотных областях, где ухо его не воспринимает. Например, ухо более терпимо к шуму в более громких участках спектра и наоборот. Именно поэтому, вместо минимизации простой квадратичной ошибки, CELP минимизирует ошибку в перцептивно взвешенном пространстве. Взвешивающий фильтр W(z) обычно получают из LPC-фильтра с помощью расширения полосы пропускания:

где .