Этот пример реализует Internet Low Bitrate Codec (iLBC) и иллюстрирует его использование. iLBC предназначен для кодирования и декодирования речи для передачи через VoIP (протокол Voice Over Internet Protocol).
Voice over Межсетевого протокола - семейство технологий, позволяющих использовать IP-сети для голосовых приложений, таких как телефония и телеконференции. Сжатие обычно требуется, чтобы уменьшить требования к пропускной способности этих приложений. Для эффективности VoIP часто реализуется с помощью легкого, но ненадежного протокола User Datаграммы (UDP). Коррекция потерь пакетов необходима для поддержания качества принимаемой речи в сетях с потерями.
iLBC предназначен для сжатия речи, передаваемой через Интернет. Таким образом, его алгоритмы предназначены только для охвата узкой частотной области значений 90-4000 Гц и он реализует перцептивное кодирование, настроенное на нормальную речь. Все входные сигналы на энкодер iLBC должны быть речевыми сигналами, модулированными импульсным кодом (PCM), дискретизированными ровно на 8000 Гц с 16-битовыми выборками в диапазоне от -32768 до + 32767.
iLBC определяется для двух различных скоростей передачи, причем пакет данных кодируется либо через каждые 30 мс, либо через каждые 20 мс речи. Преимущество кодирования каждые 30 мс заключается в том, что скорость закодированных данных ниже: 13,33 кбит/с, в отличие от 15,20 кбит/с для систем координат 20 мс. Однако кодирование каждые 30 мс приводит к 50% большей задержке в принятой речи, что может вызвать нежелательную задержку.
Поскольку все входы в iLBC должны быть 8000 Гц, 16-битная речь ИКМ, входная скорость (8000 Гц) * (16 бит) = 128 кбит/сек. Таким образом, iLBC сжимает речь до 10,4% и 11,9% от исходной скорости передачи данных для режимов 13,33 кбит/с и 15,20 кбит/с, соответственно.
В дополнение к кодированию с низкой скоростью передачи данных, iLBC предоставляет среду для легкой реализации систем коррекции потерь пакетов (PLC). Кодек предназначен для речи в реальном времени через Интернет, но Интернет подвержен случайным задержкам в маршрутизации информации в реальном времени, что делает многие пакеты бесполезными для декодера iLBC. Задача ПЛК состоит в том, чтобы интерполировать речь для отсутствующих пакетов на основе пакетов до и сразу после отсутствующего. Хотя iLBC не задает конкретный алгоритм ПЛК, в этом примере реализуется простой ПЛК для рисунка.
Модель, показанная ниже, читается в речевом сигнале и, после прохождения через iLBC, воспроизводит выход с аудио устройством по умолчанию.
Верхний уровень этой модели примера состоит всего из горстки простых блоков. Основной операцией является загрузка речевого сигнала и передача его в блок iLBC Encoder, чтобы преобразовать его в поток пакетов iLBC. Затем пакеты передаются через моделируемый канал потери, который заставляет случайные пакеты устанавливаться во все нули. Наконец, пакеты передаются в блок iLBC Decoder для преобразования обратно в речевой сигнал, который затем воспроизводится. В сложение существует ручной переключатель, который может быть переключен, когда модель запускается, чтобы сравнить исходный речевой сигнал с декодированным сигналом.
Двойной клик по блоку Configuration в правом верхнем углу модели приводит к диалогу, где можно изменить скорость передачи данных на один из двух режимов iLBC (13,33 кбит/с или 15,20 кбит/с). Скорость передачи декодера должна быть такой же, как и у энкодера, иначе произойдет ошибка. В сложение пользователь может задать, использовать ли двойную или одинарную точность для всех внутренних вычислений в энкодере и декодере.
Двойной щелчок по подсистеме Lossy Channel приводит к диалоговому окну, позволяющему задать процент потерянных пакетов. Алгоритм сокрытия потерь пакетов iLBC Decoder настроен на 0-10% потерю пакета. Частота потерь пакетов выше 10% будет легко слышна.
Блоки энкодера и декодера iLBC реализованы как подсистемы в этой модели. В порядок с уровнем повторного использования они также используют примерную библиотеку, которую можно найти в dspilbclib. Эта библиотека содержит четыре вспомогательных блока, используемых энкодером и декодером. Не стесняйтесь открывать библиотеку и заглядывать под блоки, чтобы увидеть, как iLBC был реализован в Simulink ®.