Кодеки в VoIP

Что такое кодек?

Что такое кодек Кодеки – это разные математические модели, которые используются для цифрового сжатия и кодирования аналоговой аудиоинформации. Большинство из таких математических моделей оснуются на том, что человеческий мозг имеет способность формировать полное впечатление даже из неполной информации. Ведь на самом деле, наш мозг интерпретирует нам то, что мы хотим услышать,  а не то, что мы слышим на самом деле. Точно то же происходит и с оптическими иллюзиями.

Различные алгоритмы кодирования имеют перед собой конкретную цель – между эффективностью полосы пропускания и качеством передачи голоса должен быть баланс. Например,  в случае с аудио CD качество звука выходит на первый план, поэтому экономия пропускной способности не так важна. CD-диск квантуется в режиме 16 бит (2 раза для стерео), с частотой дискретизации 44100 Гц. Учитывая, что такие показатели он имел наконец 70-х годов, качество было достаточно хорошим.

Но для телефонной линии нет необходимости в таком высоком уровне качества, как и для оптимизации полосы пропускания. Поэтому кодировка телефонных сигналов происходит с использованием 8 бит, а частота дискретизации составляет 8000 Гц.

Вообще изначально “кодек” имело название устройство, которое конвертировало сигнал с аналогового в цифровой. Теперь же это слово имеет значение компрессия/декомпрессия.

Любой телефон, шлюз, программа обычно поддерживают несколько видов кодеков, и во время совершения звонка они могут между собой  “договориться”, какой кодек будут использовать.

Кодеки, которые используются в VoIP:

AMR Codec

BroadVoice Codec 16Kbps для узкополосных и 32Kbps для широкополосных

DoD CELP – 4.8 Kbps

GIPS Family – 13.3 Kbps и выше

GSM – 13 Kbps

iLBC – 15Kbps, 13.3 Kbps

ITU G.711 – 64 Kbps, в двух вариантах: A-law и μ-law

ITU G.722 – 48/56/64 Kbps ADPCM 7 кГц пропускной способности

ITU G.722.1 – 24/32 Kbps 7 кГц пропускной способности (основан на кодеке SIREN от Polycom)

ITU G.722.1C – 32 Kbps, усовершенствованный кодек от Polycom, 14 кГц пропускной способности

ITU G.722.2 – от 6.6Kbps до 23.85Kbps. Также известный как AMR-WB. CELP 7 кГц пропускной способности

ITU G.723.1 – 5.3/6.3 Kbps

ITU G.726 – 16/24/32/40 Kbps

ITU G.728 – 16 Kbps

ITU G.729 – 8 Kbps

LPC10 – 2.5 Kbps

Speex – от 2.15 до 44.2 Kbps

Теперь давайте проведем voip кодеки сравнение.

AMR Codec

AMR (англ. – Adaptive Multi-Rate) кодек позволяет декодировать узкополосные сигналы (200-3400Гц) при переменном битрейте в диапазоне от 4,75 до 12,2 кбит с качеством, начиная с 7,4 кбит для междугородних звонков.  Кодек AMR  – стандартный кодек, обязательный для 2.5G/3G беспроводных сетей, который работает на базе GSM (WDMA, EDGE, GPRS).

Изначально кодек AMR разрабатывался для GSM и был стандартизован в 1999 году Европейским институтом телекоммуникационных стандартов ETSI. Уже в 2006 году его включили в спецификацию CableLabs PacketCable 2.0.

AMR может работать на различных битрейтах и есть в каждом GSM и WCDMA телефоне. Он гарантирует, что такой контент, который он генерирует, будет восприниматься абсолютно любым мобильным телефоном в любой точке мира.

BroadVoice

codec voip broadvoice BroadVoice – это целое семейство кодеков, которое создала компания Broadcom . Они стандартизированны CableLabs, ANSI и другими.

Кодек BroadVoice есть в двух вариантах: 16 кб/с версия под названием BroadVoice16 (BV16) для узкополосных телефонных линий с частотой дискретизации 8 кГц, 32 кб/с версия под названием BroadVoice32 (BV32) для широкополосных линий с частотой дискретизации 16 кГц. BV16 это стандартный кодек в следующих стандартах: PacketCable ™ 1.5, PacketCable 2.0, ANSI / SCTE 24-21 2006 года и Рекомендации ITU-Т J.161. BV32 это стандартный кодек в PacketCable 2.0, ANSI / SCTE 24-23 2007 года и Рекомендации ITU-Т J.361. RTP формат для BV16 BV32 и указан в RFC4298.

BroadVoice разрабатывали совершенно с нуля, а задачей было оптимизировать передачу голоса через IP-сети. Дизайн BroadVoice должен по минимуму кодировать задержки и сложности кодека. При этом, выходная речь должна иметь хорошее качество и быть похожей на исходный вариант.

DoD CELP

Эти кодеки получили стандартизацию в 1991 году американским Министерством обороны. Оно стандартизировало 4,8 кбит/с CELP кодек в качестве федерального стандарта 1016. Кодек DoD CELP имеет возможность кодировать речь в 30мс блоки, которые в последующем делятся на четыре 7,5 мс суб-блоков. Кодер вычисляет ряд 10 коэффициентов фильтра для каждого фрейма, чтобы получить краткосрочный фильтр синтеза. Затем он используется для того, чтобы сделать модель  вокального трактата динамика.

Для этого фильтра определяется возбуждение, причем для каждого подкадра, и дано суммой масштабируемых записей от двух книг шифров.

Чтобы смоделировать долгосрочные периодичности, которые есть в речевой речи, используется адаптивная книга шифров. Каждый подкадр имеет свой индекс и усиление, которые заранее определяются для этой книги шифров.

Также ищется фиксированная книга шифров, которая содержит 512 псевдослучайных кодов. Чтобы найти запись такой книги, множитель усиления для этой записи. Делается это для минимизации ошибок между восстановленными и исходными речевыми выборками.

От двух книг шифров записи передаются через фильтр синтеза. Это нужно для того, чтобы воспроизвести  восстановленную речь. Затем эта речь передается через постфильтр, который значительно улучшает его приемные качества.

GIPS

codec voip gips GIPS (Global IP Sound) – производитель семейства кодеков VOIP и соответствующего программного обеспечения. Его скорость передачи составляет: 13,3 кб/с и выше.

Кодек GIPS  может поддерживать качество передачи голоса с 30% потерей пакетов. Данная технология является лицензированной для использования Skype.

GIPS создали iLBC узкополосного кодека, который они также предоставляют, однако под ограниченной, но свободной лицензией. Такой кодек по умолчанию поддерживается в Asterisk и является стандартом IETF.

Широкополосные GIPS кодеки (частота дискретизации равна 16кГц) являются платными. К ним относятся:

iSAC (internet Speech Audio Codec): кодек с переменным битрейтом высокой производительности, предназначенным для низкоскоростных соединений включая dialup. Это кодек, который наиболее близко соответствует тому, который используется клиентом Skype.

iPCM-wb (internet Pulse Code Modulation wide-band): для более высокоскоростных соединений.

GSM

GSM GSM (англ. – Global System for Mobile communications) – очень популярный вне США стандарт сотовой телефонной связи. Исходный ‘Full Rate’ GSM речевой кодек имеет название RPE-LTP (англ. – Regular Pulse Excitation Long-Term Prediction). Он умеет использовать информация от предыдущих сэмплов, поскольку эта информация не изменяется очень быстро, и таким образом он может “угадывать” текущий сэмпл.

Речевой сигнал делится на отдельные блоки по 20 мс. Затем такие сэмплы передаются на разговорный кодек, который имеет битрейт 13 Кбит/с, чтобы получить блоки 260 битов.

Современные GSM  системы в своем распоряжении имеют более новые кодеки, однако они сильно связаны с патентами.

EFR (Enhanced Full Rate) использует патент ACELP

HR (Half Rate) использует патент CELP-VSELP

VoIP кодек GSM можно назвать практически родным кодеком для всех Asterisk / Trixbox установок.

Он очень удобен, поскольку не требует лицензирования, и при этом обладает прекрасной, просто восхитительной производительностью. Считается, что такой кодек имеет более низкое качество звука, чем G.729A, однако это скорее личные предпочтения, чем объективная оценка.

Скорость работы  GSM составляет 13 Kbps и не требует лицензирования.

iLBC

iLBC кодек iLBC – первоначально создался компанией  Global IP Sound как VoIP кодек, но позже он стал доступен в рамках свободной, но ограниченой лицензии. В том числе,  стал доступным его исходный код, который разрешается изменять.

iLBC  можно назвать свободным кодеком, которые передает голос и прекрасно подходит для надежной голосовой связи через интернет. Его используют при узкополосных линиях передачи с битрейтом 13,33 кбит/с,  а также поддержкой кодирования длины фрейма в 30 мс и 15,20 кбит/с кодировкой фреймов длиной 20 мс.

Кодек iLBC имеет более высокие основные качества, чем, к примеру G.729A, а также обладает высокой устойчивостью к потере пакетов.

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

iLBC придерживается Asterisk, но он не обрел такой популярности, как кодеки ITU , поэтому его нельзя совместить с обычными IP-телефонами  или коммерческими системами VoIP. В IETF RFC 3951 и 3952 была включена поддержка iLBC.  Поскольку кодеки iLBC в своей работе используют сложные алгоритмы, им удается достичь высокой степени сжатия, и поэтому они достаточно сильно загружают процессор в Asterisk.

Хотя можно использовать iLBC без уплаты лицензионных платежей, но вы должны каждый раз, когда будете использовать кодеки в коммерческих целях, оповещать обладателя патента на iLBC – Global IP Sound (GIPS).

ITU G.711

G.711 – это кодек стандарта ITU с высоким битрейтом – 64 кб/с. Он является “родным” для современной цифровой телефонной сети.

Кодек G.711 изобрела компания Bell Systems и представила публике еще в начале 70-х годов, однако стандартизацию он получил в 1988 году. В данном кодеке использовалась цифровая соединительная линия T1, которая использовала 8 -разрядную несжатую схему кодирования несжатой импульсно-кодовой модуляции (ИКМ). Частота дискретизации составила 8000 сэмплов в секунду.

По теоретическим данным, голосовая пропускная способность была на уровне 4000Гц.

Соединительная линия Т1 может перенести 24 цифровых канала ИКМ, мультиплексированные вместе.  Однако современный улучшенный европейский стандарт E1 способен перенести 30 каналов.

Кодек G.711 имеет две версии: A-law и μ-law.

Кодек μ-law  – это внутренний Т1 стандарт, который используется в Северной Америке и Японии.

Кодек A-law – это внутренний Е1 стандарт, который используется в остальной части мира.

Они работают одинаково, разница их заключается лишь в сэмплировании аналогового сигнала. В двоих схемах сигнал сэмплируется в логарифмической, а не линейной форме. При этом A-law позволяет обеспечить более динамический диапазон, чем μ-law. Поэтому звук получается в результате менее четким, поскольку возникающие при сэмплировании артефакты подавляются лучше.

Кодек G.711 в VoIP позволяет дать лучшее качество передачи голоса, поскольку этот кодек также используется сетью PSTN  и линиями ISDN. Их звучание отличается не имеет отличий оттого, что есть в обычном или ISDN  телефоне. У данного кодека бывают небольшие задержки, поэтому у него нет необходимости для сильного сжатия, которое только занимает вычислительные мощности.

Однако, есть и свои недостатки. Для кодека нужна высокая пропускная способность, причем она является выше, чем для других аналогичных кодеков. ПРопускная способность необходима до 84 кб/с, включая TCP/IP.  Однако широкополосные провайдеры увеличивают свою пропускную способность, поэтому для них не должно возникать проблем.

ITU G.722

G.722 – это кодек стандарта ITU с высоким битрейтом – 48/56/64 кб/с.

В данном кодеке кодирование речи отличается более широкой пропускной способностью, в результате чего качество передачи голоса является очень хорошим. Широкополосный алгоритм кодирования речевых сигналов CCITT поддерживает скорости передачи 64, 56 и 48 кбит.

Весь кодек интегрируется на одной микросхеме, поэтому ее полная задержка составляет около 3мс, что является достаточно хорошим показателем и не вызывает эха в сетях связи. Также кодек позволяет обеспечить приемлемую производительность для коэффициента битовых ошибок передачи до 1000. Поэтому даже при плохих условиях передачи производительность будет ухудшаться полого. Высококачественное кодирование широкополосным речевым кодером G.722 обеспечено фиксацией выборки битов информации, где низкие и высокие кодеры ADPCM поддиапазонов используют 6 бит/сэмпл и 2 бит/сэмпл квантизаторы, соответственно.

Когда сигнал находится в низком поддиапазоне, то он больше похож на узкополосный речевой сигнал,  а высокий SNR в более низкой полосе пропускания становится перцепционно более важным чем в более высокой полосе. Динамический диапазон низкого квантизатора сигнала полосы был установлен на уровне 51 дБ, а высокий квантизатор сигнала полосы был установлен на уровне 66 дБ, главным образом для музыкальных сигналов. Чтобы препятствовать появлению нулевого кода в представлении данных на 4 бита, используются только 15 уровней квантизатора. Это также ограничивает представление данных на 5 и 6 битов на 30 и 60 уровнях квантизатора.

ITU G.723.1

G.723.1 – кодек стандарта ITU. Он имеет достаточно низкой битрейт (6.3Kbps или 5.3Kbps) и используется в стандарте H.323 Компания Sipro Lab Telecom требует покупки лицензии, если вы хотите использовать эти кодеки в своем продукте.

G.723.1 являетсяофициальным названием кодера речи для организации мультимедийной связи с передачей данных в 5,3 и 6,3 кбит/с. Кодек G.723.1 может работать при битрейте 6,3 кбит/с (при использовании 24 байтовых фреймов) с помощью MPC-MLQ алгоритма или с битрейтом 5,3 кбит/с (при использовании 20 байтовых кадров), используя алгоритм ACELP.

Чтобы использовать G.723.1, вам понадобится патент или лицензия, которые покрывают алгоритм.  Авторизованные права интеллектуальной собственности и лицензиатор для технологии G.723.1 является Sipro Lab Telecom. Членами патентного пула G.723.1 являются AudioCodes, France Telecom, Университет Шербрука, Nippon Telegraph и Nokia.

ITU G.726

G.726 – это кодек ITU стандарта. Он использует адаптивную дифференциальную импульсно-кодовую модуляцию (ADPCM).

Как и G.711, G.726, в кодека есть свои корни в сети PSTN. Как правило, его стараются использовать для международных линий, поскольку он дает возможность сохранить пропускную способность. G.726 имеет битрейт 32 Kbps, и дает качество, практически аналогичное к G.711 c битрейтом 64kbps. Также, он является стандартным кодеком в беспроводных телефонах DECT.

G.726 не обрел большой популярности в 1990-х годах, поскольку он не мог передавать модемные и факсимильные сигналы. Однако, его пропускная способность и малая нагрузка на систему все же сделали его известным и широко применяемым.

Битрейт может варьироваться в районе 16, 24, 32 или 40 Kbps, но 32 Kbps, но является стандартом.

Asterisk в настоящее время поддерживает только стандартные 32kbps.

ITU G.728

G.728 является кодеков ITU стандарта для кодирования голосовой информации при битрейте в 16 Кбит/с. Для кодировки используется технология LD-CELP. Задержка кодека составляет только 5 сэмплов (0,625мс).  Окончательно стандарт закончили в 1992 году и он получил код с плавающей запятой. Однако, уже в 1994 году кодек умел извлекать биты с фиксированной запятой. G.728 пропускает модемные сигналы до 2400 бит/с. Также проходит сетевая сигнализация. RealAudio 28_8 является разновидностью этого кодека с битрейтом 15.2 Кб/с.

ITU G.729

G.729 является кодеком ITU стандарта. Имеется две разновидности: A и B. Благодаря этому кодеку возможна качественная междугородная передача речи при низком битрейте – 8 Кбит/с.

Но с точки зрения машинного времени, это достаточно “дорогостоящий” кодек, поэтому некоторые VoIP-телефоны и адаптеры (в частности брендов Linksys / Sipura / Cisco) способны обрабатывать только один G.729 звонок (канал) одновременно.

Если такой кодек вы хотите использовать в своем продукте, то необходимо приобрести лицензию. Лицензии могут быть приобретены у компаний-реселлеров G.729 лицензий, таких как: Digium, Howler Технологии, VoiceAge, Adaptive Digital Technologies.

Но если вы хотите использовать кодек для некоммерческих целей, то можете воспользоваться бесплатной экспериментальной реализацией.

Кодек использует достаточно мало пропускной способности, поэтому G.729A обеспечивает шикарное качество звука. Он делает это с помощью CS-ACELP алгоритма сжатия речи. Использовать G729A без уплаты лицензионного сбора невозможно, поскольку он защищен патентом, однако он очень популярен и хорошо поддерживается на различными телефонами и системами. Чтобы достичь такой степени сжатия, кодек требует внушительное количество мощностей от процессора. Например, на системах Asterisk, использование кодеков с сильным сжатием кодеками может задерживать работу процессора.

LPC10

LPC – англ. Linear Predictive Coding – линейное кодирование с предсказанием.

LPC10 используется для линий связи с узкой пропускной способностью с битрейтом 2.5 Кбит/с. Голосовой сигнал чистый, но звучание похоже на голос робота.

Speex

Speex – открытый и бесплатный исходящий код, который не имеет патентов. Это лучший кодек voip, который является аудиоформатом сжатия речи.  Speex является бесплатной альтернативой дорогим кодекам. Кроме того, одним из важный преимуществ Speex  выступает его адаптация для интернет-приложений. Он предоставляет множество полезных функций, которые зачастую отсутствуют в других кодеках. Также стоить упомянуть, что Speex  является частью проекта GNU  и доступен в соответствии с Xiph.org разновидностью BSD лицензии.

Speex стал популярным благодаря своей гибкости. Тем не менее он потребляет больше ресурсов процессора, чем G729, G726 или GSM кодеки, и примерно такую же, как iLBC. В то время как iLBC поставляется с атипичным количеством фреймов – 30 мс и при его работе теряются пакеты, вы можете скорректировать Speex под свои нужды через codecs.conf в системе Asterisk, в отличие от любого другого кодека.

Как видите, сравнение Voip кодеков показывает, что нет универсального варианта, но можно подобрать самый нужный кодек Voip, если вы знаете, на какие параметры ориментироваться.