Кодирование на основе линейного предсказания и кодового возбуждения (англ. Code Excited Linear Prediction, CELP) представляет собой алгоритм кодирования речи, первоначально предложенный Манфредом Шрёдером и Б. С. Аталом в 1985 году. В то время алгоритм обеспечивал значительно лучшее качество, чем существовавшие тогда алгоритмы с низким битрейтом, такие, как аудиокодеки RELP и LPC (например, FS-1015). Наряду с вариантами, как, например, ACELP, RCELP, LD-CELP и VSELP, на сегодня это наиболее широко используемый алгоритм кодирования речи. CELP в настоящее время используется как общий термин для класса алгоритмов, а не для определенного кодека.
Введение
правитьАлгоритм CELP базируется на четырех основных идеях:
- Использование модели источника-фильтра для воспроизведения речи на основе линейного предсказания (ЛП);
- Использование адаптивной и фиксированной кодовых таблиц в качестве базы для модели линейного предсказания;
- Замкнутый поиск в «перцептуально взвешенном домене».
- Применение векторного квантования (VQ)
Оригинальный алгоритм Шредера и Атала в 1983 году, при запуске на суперкомпьютере Cray I, требовал 150 секунд для кодирования речевого сигнала длиной 1 секунду. С возникновением более эффективных способов реализации таблиц кодов и совершенствованием вычислительных возможностей- запуск алгоритма стал возможен во встраиваемых устройствах, таких как мобильные телефоны.
CELP-декодер
правитьПрежде чем исследовать сложный процесс кодирования CELP, мы рассмотрим принцип работы декодера. Иллюстрация описывает универсальный декодер CELP. Возбуждение производится через суммирование вкладов от адаптивной (иначе - тактовой) таблицы кодов и фиксированной (иначе - стохастической) таблицы кодов:
где является адаптивным (тактовым) взносом таблицы кодов и является фиксированным (стохастическим) вкладом таблицы кодов. Фиксированная таблица кодов - векторный словарь квантования, который является (неявно или явно) жестко закодированным в кодек. Эта таблица кодов может быть алгебраической ACELP или сохраненной явно (например, Speex). Записи в адаптивной таблице кодов состоят из отсроченных версий возбуждения. Это позволяет эффективно кодировать периодические сигналы, такие как человеческая речь.
У фильтра, который формирует возбуждение, есть все полюсы модели в форме , где называется фильтром прогнозирования и получения, с применением линейного прогнозирования алгоритм Левинсона-Дарбина (Levinson-Durbin). Этот фильтр применим не только потому, что использует все полюсы, но и потому, что его легко вычислить и это хорошее представление человеческого голоса.
Кодер CELP
правитьОсновной принцип, заключённый в основе CELP, называют (Абсолютным) «Анализом через синтез», что означает, что кодирование (анализ) выполнено перцепционно, оптимизируя декодированный сигнал в замкнутом цикле. В теории, лучший поток CELP был бы произведён в результате комбинаций всех возможных наборов двоичных знаков и выбором того, который производит декодированный сигнал наилучшего звучания. Это, очевидно, невозможно по двум причинам: сложность реализации выше любых доступных в настоящее время аппаратных средств, и критерий отбора «лучшее звучание» подразумевает человека в качестве слушателя.
Чтобы осуществить кодирование в реальном времени, используя ограниченные вычислительные ресурсы, поиск CELP разбит на мелкие, более управляемые, последовательные поиски, используя простую перцептуальную функцию надбавки. Как правило, кодирование выполнено в следующем порядке:
- Линейные Коэффициенты Предсказания (ЛКП) вычислены и квантованы, обычно как LSP
- Происходит поиск по адаптивной (тактовой) таблице кодов, и её содействие/взнос/ удаляется
- Поиск по фиксированной (стохастической) таблице кодов
Искажение шумом
правитьБольшинство (если не все) современные звуковые кодеки пытаются сформировать искажение в кодировании так, чтобы оно проявилось главным образом в тех частотных областях, где его не может уловить человеческое ухо. Например, ухо более терпимо к искажению в частях звукового диапазона, которые громче и наоборот. Именно поэтому вместо минимизации квадратичной ошибки, CELP минимизирует ошибки на взвешенной области. Взвешивающий результат по кривой W (z), как правило, вытекает из фильтра ЛКП при помощи расширения полосы пропускания:
где .
Ссылки
правитьВ статье не хватает ссылок на источники (см. рекомендации по поиску). |