Development of communication systems
26 December 2011

Некоторые умозаключения об IP-телефонии — основной цифровой сигнал, кодеки, полоса пропускания

Приветствую вас, друзья!

В ходе изучения материалов к экзамену CCNA Voice родилась идея оформить некоторую полученную информацию в виде отдельной статьи. Преследуя при этом две цели: одна корыстная — получше самому разобраться в изучаемом материале и разложить всё по полочкам в своём сознании; вторая альтруистическая — поделиться полученными знаниями с теми, кому это мало мальски интересно.

В статье поведаю о процессах кодирования голоса, кодеках как таковых и расчётах полосы пропускания, необходимой для передачи голоса в IP-сетях


Про основной цифровой сигнал

Думаю, не стоит объяснять что, для передачи аналогового сигнала (коим является голос человека) по IP-сетям, необходимо этот самый сигнал преобразовать в последовательность единиц и нулей. Как это делается, прекрасно объяснил пользователь denis_g в своей многим понравившейся статье. Дабы не сойти за плагиатора и дабы не дублировать информацию, я просто оставлю это здесь. Вкратце суть такова — исходя из теоремы Котельникова (буржуи зовут её теоремой Найквиста) при использовании импульсно-кодовой модуляции для передачи голосового сигнала без потери качества достаточно передавать данные со скоростью 64 kbit/сек.
64 килобита в секунду — это то, что в современной цифровой телефонии называется основным цифровым сигналом.

На 32-х (30 голосовых + 2 служебных) основных цифровых сигналах построен первичный (самый маленький, простой) уровень в плезиосинхронной (почти синхронной) цифровой иерархии (PDH) — т.н. поток E1 (2048 кбит/сек). А сам основной цифровой сигнал порой называют нулевым уровнем. Стоит отметить, что в PDH существует второй (E2), третий (E3) и четвёртый (E4) уровни. Каждый последующий уровень мультиплексируется из четырёх предыдущих с добавлением кое-какой служебной информации, например E3=4*E2+сигнализация.

На PDH-технологии какое-то время (в 80-х годах) была построена вся цифровая телефония в мире. Но у неё было некоторое количество недостатков, самым существенным из которых была необходимость последовательного демультиплексирования потока высокого уровня для извлечения потоков более низкого уровня. То есть, к примеру, для извлечения одного E1 потока из потока E4 с целью маршрутизации его в другое место, необходимо было для начала разложить E4 на четыре E3, затем разобрать E3 на четыре E2, разобрать E2 на четыре E1, перенаправить E1 куда следует, собрать поток в обратном порядке и отправить дальше. Муторно в общем, да и ресурсов немерено съедало.

На смену технологии PDH пришла SDH (синхронная цифровая иерархия), которая и по сей день остаётся основным вариантом организации связи у сотовых операторов, да и сети наших двух магистральных провайдеров (ТТК, РТК) до сих пор основаны на SDH.

Тем не менее первичные уровни (E1) никуда не делись, и порой остаются единственным способом организации связи. Так например, все телефонные операторы в нашей стране для стыков друг с другом используют N-ное количество потоков E1.

Ага, отвлёкся. Вернёмся таки к IP-телефонии, то бишь к коммутации пакетов, а про коммутацию каналов пока забудем.

Про кодеки

Итак, у нас с вами есть первичный цифровой канал воплощением которого в IP-сетях стал кодек G.711. Этот стандарт стал де-факто самым популярным и нынче используется в таких протоколах как SIP и SCCP. Он использует полосу пропускания в 64 кбит/секунду и наверное знаком всем, кто имеет дело с современной IP-телефонией.
Стандарт был разработан в 70-х годах прошлого столетия и в данный момент срок патента на него истёк, и он является народным достоянием.
В стандарте описано два алгоритма кодирования — Mu-law (используется в Северной Америке и Японии) и A-law (используется в Европе и в остальном мире). Оба алгоритма являются логарифмическими, но более поздний a-law был изначально предназначен для компьютерной обработки процессов. (с) Wikipedia

Помимо общепризнанного G.711 существует ещё масса стандартов для кодирования\декодирования аудиосигналов. Наиболее популярными из них являются G.729, G.729a, G.726, G.728. Если оценивать их по занимаемой полосе пропускания, то увидим следующую картину:

G.729 — 8 кбит/сек
G.729а — 8 кбит/сек
G.726 — 32 кбит/сек
G.728 — 16 кбит/сек

Казалось бы, если они используют меньшую полосу, то почему не стали популярнее G.711? Дело в том, что полоса пропускания — не самый важный параметр кодека, важна ещё и скорость работы, и как следствие — загрузка DSP (Digital Signal Processor) — цифровго сигнального процессора, который в реальном времени отвечает за кодирование/декодирования сигнала.
Ещё одним немаловажным критерием определяющим успешность того или иного кодека является т.н. MOS (Mean Opinion Score, в русской литературе встречается как усреднённая субъективная оценка). Идея MOS очень проста: специально сформированной группе людей предоставляют возможность воспользоваться системой связи и просят поставить оценку от 1 (ужасно) до 5 (отлично). Усредненные данные такого исследования и называются MOS.

Так вот, для указанных мною кодеков оценки MOS имеют следующие значения:

G.711 — 4,1 (по некоторым источникам 4,45 для Мю-закона)
G.729 — 3, 92 (возможно бы и потягался с G.711, да вот процессорного времени много сжирает)
G.729а — 3,7 (этот кодек работает гораздо быстрее своего старшего брата, но как видим — в ущерб качества)
G.726 — 3,85
G.728 — 3,61

И вот совокупность всех этих факторов (пропускная способность, скорость работы, MOS) определяет главенство того или иного кодека в царстве цифрового кодирования сигналов.

К слову сказать, все эти стандарты (ну которые начинаются на G.) являются плодами деятельности международного консультационного комитета по телефонии и телеграфии (подразделения ITU — международного союза электросвязи) и по сути дела являются проприетарными. А в наше время сложно представить отсутствие свободных альтернатив у проприетраных стандартов. Так и в сфере кодирования аудиосигналов родился стандарт iLBC (internet Low Bitrate Codec), который использует15,2 Кбит/секунду и имеет оценку MOS 4,1. Именно эти факторы наряду с открытостью оказали влияние на то, что данный стандарт используется в Google talk, Yahoo messenger и всем нами любимом Skype.

Стоит отметить, что популярные IP-АТС (asterisk, cisco CME) поддерживают все эти кодеки, и вы всегда вправе сами определить, что будете использовать в вашей телефонной сети.

Про полосу пропускания

Расчётная пропускная способность — это тот параметр, который необходимо учитывать при планировании любой сети передачи данных, чтобы она была легко масштабируемой и у ваших пользователей не возникало лишних неудобств в процессе её эксплуатации. Повторюсь — любой сети, в том числе и сети VoIP.

Немаловажным параметром в данном частном случае является размер сэмпла (измеряется в миллисекундах). Размер сэмпла это тот параметр который определяет «количество» голосовой информации в IP-пакете — например, в один и тот же стандартных размеров пакет вы можете запихать один слог или два. Чем больше размер сэмпла, тем экономнее вы расходуете свою пропускную способность, но тем больше в разговоре будет слышна задержка (следствие работы цифрового процессора по кодированию/раскодированию).

Не знаю как в Asterisk (надеюсь кто-нибудь подскажет), но в Cisco CME (решение от Cisco в области IP-телефонии) при настройке параметров кодека к сожалению нет такого параметра — размер сэмпла, зато есть параметр, определяющий количество байт в сэмпле. Они друг с другом связаны простой формулой (линейная зависимость), и легко выражаются друг через друга. А вот и формула:

БвС = РС*ППК/8, где БвС — количество байт в сэмпле, РС — размер сэмпла в секундах, ППК — пропускания кодека в битах/сек. То есть если мы хотим чтобы при использовании кодека G.711 в одном пакете было, к примеру, 20 милисекунду разговора, то нам необходимо выставить значение параметра БвС=0,02*64000/8=160

Таким образом нам в наш UDP-фрагмент необходимо заложить 160 байт полезной информации. Ок, идём дальше.

Допустим мы используем классическую IP сеть, канальным протоколом для которой является Ethernet, плюс хотим это всё гонять в шифрованной сети VPN. Тогда к нашим 160 байтам добавятся ещё 18 байт служебной информации Ethernet. Добавляем сюда сетевой и транспортный уровень — заголовки IP, UDP и RTP (20+8+12 байт). И заворачиваем всё наше добро в IPSec — ещё плюс 50 байт. На выходе имеем пакет размером 268 байт.

Чтобы вычислить итоговую полосу пропускания нам необходимо умножить размер этого пакета на количество пакетов в секунду. С учётом того, что размер нашего сэмпла — 20 мс, то в одну секунду таких сэмплов будет 50. Умножая 50 на 268 видим что за одну секунду нам надо гонять 13400 байт или 107200 бит в секунду, то есть 107, 2 Кбита в секунду. А это уже почти в два раза больше чем изначальные 64 килобита! Именно из этого числа необходимо исходить при планировании своей сети.

Будьте бдительны! Да пребудет с вами сила!

Используемые источники:
Видео-курс CCNA Voice
en.wikipedia.org
www.deltann.ru

P.S.: надеюсь на дополнения с вашей стороны

+24
33.8k 191
Comments 26