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