exponenta event banner

Кодек низкого битрейта Интернета (iLBC) для VoIP

Этот пример реализует кодек iLBC и иллюстрирует его использование. iLBC предназначен для кодирования и декодирования речи для передачи по VoIP (Voice Over Internet Protocol).

VoIP

Протокол передачи речи через Интернет - это семейство технологий, которые позволяют использовать IP-сети для голосовых приложений, таких как телефония и телеконференции. Сжатие обычно требуется для снижения требований к полосе пропускания этих приложений. Для эффективности VoIP часто реализуется с использованием облегченного, но ненадежного протокола пользовательских дейтаграмм (UDP). Коррекция потери пакетов необходима для поддержания качества принимаемой речи в сетях с потерями.

Базовый дизайн и производительность iLBC

iLBC предназначен для сжатия речи, передаваемой через Интернет. Таким образом, его алгоритмы предназначены только для охвата узкого частотного диапазона 90-4000 Гц и реализуют перцептивное кодирование, настроенное на нормальную речь. Все входные сигналы в кодер iLBC должны быть импульсно-кодовыми (ИКМ) речевыми сигналами, дискретизированными ровно на 8000 Гц с 16-битовыми выборками в диапазоне от -32768 до + 32767.

iLBC определяется для двух различных скоростей передачи, причем пакет данных кодируется либо после каждых 30 мс, либо после каждых 20 мс речи. Преимущество кодирования каждые 30 мс состоит в том, что скорость кодирования данных ниже: 13,33 кбит/с по сравнению с 15,20 кбит/с для 20 мс кадров. Однако кодирование каждые 30 мс приводит к 50% большей задержке в принятой речи, что может вызвать нежелательную задержку.

Так как все входы в iLBC должны быть 8000 Гц, 16-битная PCM речь, скорость входа (8000 Гц) * (16 бит) = 128 кбит/с. Таким образом, iLBC сжимает речь до 10,4% и 11,9% от исходной скорости передачи данных для режимов 13,33 кбит/с и 15,20 кбит/с соответственно.

В дополнение к кодированию для низких скоростей передачи данных iLBC обеспечивает структуру для простой реализации систем коррекции потери пакетов (PLC). Кодек предназначен для речи в реальном времени через Интернет, но Интернет подвержен случайным задержкам в маршрутизации информации в реальном времени, что делает многие пакеты бесполезными для декодера iLBC. Задача ПЛК состоит в интерполяции речи для отсутствующих пакетов на основе пакетов до и сразу после отсутствующего. Хотя iLBC не определяет конкретный алгоритм ПЛК, в этом примере для иллюстрации реализован простой ПЛК.

Пример модели iLBC

Модель, показанная ниже, считывает речевой сигнал и после прохождения через iLBC воспроизводит выходной сигнал с аудиоустройством по умолчанию.

Использование примера модели iLBC

Верхний уровень этой модели состоит всего из нескольких простых блоков. Основная операция состоит в загрузке речевого сигнала и передаче его в блок кодера iLBC для преобразования его в поток пакетов iLBC. Затем пакеты посылаются через моделируемый канал с потерями, что приводит к установке случайных пакетов на все нули. Наконец, пакеты посылаются в блок декодера iLBC для преобразования обратно в речевой сигнал, который затем воспроизводится. Кроме того, имеется ручной переключатель, который может переключаться при запуске модели для сравнения исходного речевого сигнала с декодированным сигналом.

При двойном щелчке по блоку конфигурации в правом верхнем углу модели появляется диалоговое окно, в котором можно изменить скорость передачи данных на один из двух режимов iLBC (13,33 кбит/с или 15,20 кбит/с). Скорость передачи декодера должна быть установлена такой же, как у кодера, иначе возникнет ошибка. Кроме того, пользователь может указать, использовать ли двойную или одиночную точность для всех внутренних вычислений в кодере и декодере.

При двойном щелчке по подсистеме канала с потерями появляется диалоговое окно, позволяющее установить процент потерянных пакетов. Алгоритм маскирования потери пакетов декодера iLBC настроен на исправление потери 0-10% пакетов. Скорость потери пакетов выше 10% будет легко слышна.

Блоки кодера и декодера iLBC реализованы в этой модели как подсистемы. Для того, чтобы приспособить уровень повторного использования, они также используют библиотеку примеров, которую можно найти в dspilbclib. Эта библиотека содержит четыре вспомогательных блока, используемых кодером и декодером. Не стесняйтесь открывать библиотеку и смотреть под блоками, чтобы увидеть, как iLBC был реализован в Simulink ®.