линейное предсказание с кодовым возбуждением (CELP ) - это алгоритм линейного предсказания речевого кодирования, первоначально предложенный Манфред Р. Шредер и Бишну С. Атал в 1985 году. В то время он обеспечивал значительно лучшее качество, чем существующие алгоритмы с низкой скоростью передачи данных, такие как линейное предсказание с остаточным возбуждением. (RELP) и кодирование с линейным предсказанием (LPC) вокодеры (например, FS-1015 ). Наряду с его вариантами, такими как алгебраический CELP, ослабленный CELP, CELP с малой задержкой и линейное предсказание с возбуждением векторной суммой, он в настоящее время наиболее широко используемый алгоритм кодирования речи. Он также используется в кодировании речи MPEG-4 Audio. CELP обычно используется как общий термин для класса алгоритмов, а не для конкретного кодека.
Алгоритм CELP основан на четырех основных идеях:
Исходный алгоритм, смоделированный в 1983 году Шредером и Аталом, требовал 150 секунд для кодирования 1 секунды речи при запуске на суперкомпьютер Cray-1. С тех пор более эффективные способы реализации кодовых книг и улучшения вычислительных возможностей сделали возможным запуск алгоритма во встроенных устройствах, таких как мобильные телефоны.
Перед тем, как исследовать сложный процесс кодирования CELP, мы представляем здесь декодер. На рисунке 1 показан общий декодер CELP. Возбуждение создается путем суммирования вкладов от фиксированной (также известной как стохастический или инновационный) и адаптивной (также известной как шаг) кодовых книг:
где - фиксированный (также известный как стохастический или инновационный) вклад в кодовую книгу и - вклад адаптивной (основного тона ) кодовой книги. Фиксированная кодовая книга - это словарь векторного квантования, который (неявно или явно) жестко закодирован в кодеке. Эта кодовая книга может быть алгебраической (ACELP ) или сохраняться явно (например, Speex ). Записи в адаптивной кодовой книге состоят из отложенных версий возбуждения. Это позволяет эффективно кодировать периодические сигналы, например звонкие звуки.
Фильтр, формирующий возбуждение, имеет всеполюсную модель вида , где называется фильтром прогнозирования и получается с использованием линейного прогнозирования (алгоритм Левинсона – Дарбина ). Всеполюсный фильтр используется потому, что он хорошо отображает голосовой тракт человека и потому, что его легко вычислить.
Основной принцип, лежащий в основе CELP, называется Analysis-by-Synthesis (AbS) и означает, что кодирование (анализ) выполняется путем перцепционной оптимизации декодированного (синтез) сигнал в замкнутом контуре. Теоретически лучший поток CELP можно получить, попробовав все возможные битовые комбинации и выбрав ту, которая дает декодированный сигнал с наилучшим звучанием. Очевидно, что на практике это невозможно по двум причинам: требуемая сложность выходит за рамки любого доступного в настоящее время оборудования, и критерий выбора «наилучшего звучания» предполагает наличие слушателя-человека.
Чтобы обеспечить кодирование в реальном времени с использованием ограниченных вычислительных ресурсов, поиск CELP разбивается на более мелкие, более управляемые, последовательные поиски с использованием простой функции взвешивания восприятия. Обычно кодирование выполняется в следующем порядке:
Большинство (если не все) современные аудиокодеки пытаются формируют шум кодирования так, чтобы он появлялся в основном в частотных областях, где ухо не может его обнаружить. Например, ухо более устойчиво к шуму в более громких частях спектра и наоборот. Вот почему вместо минимизации простой квадратичной ошибки CELP минимизирует ошибку для перцепционно взвешенной области. Весовой фильтр W (z) обычно получается из LPC-фильтра с помощью расширения полосы пропускания :
где .