G.711 — это узкополосный аудиокодек , изначально разработанный для использования в телефонии и обеспечивающий качество звука междугородной связи со скоростью 64 кбит/с. Это стандарт ITU-T (рекомендация) для кодирования звука под названием « Импульсно-кодовая модуляция (PCM) голосовых частот», выпущенный для использования в 1972 году.
G.711 передает аудиосигналы в полосе частот 300–3400 Гц и дискретизирует их с частотой 8000 Гц с допуском на эту скорость 50 частей на миллион (ppm).
Он использует один из двух различных алгоритмов логарифмического компандирования : μ-law , который используется в основном в Северной Америке и Японии, и A-law , который используется в большинстве других стран за пределами Северной Америки. Каждая компандированная выборка квантуется как 8 бит, что приводит к скорости передачи данных 64 кбит/с .
G.711 является обязательным стандартом во многих технологиях, например в стандартах H.320 и H.323 . [1] Его также можно использовать для факсимильной связи по IP-сетям (как определено в спецификации T.38 ).
Были опубликованы два усовершенствования G.711: G.711.0 использует сжатие данных без потерь для уменьшения использования полосы пропускания, а G.711.1 повышает качество звука за счет увеличения полосы пропускания.
G.711 определяет два основных алгоритма компандирования : алгоритм μ-закона и алгоритм A-закона . Оба являются логарифмическими , но А-закон был специально разработан, чтобы его было проще обрабатывать на компьютере . Стандарт также определяет последовательность повторяющихся значений кода, которая определяет уровень мощности 0 дБ .
Алгоритмы μ-law и A-law кодируют 14-битные и 13-битные линейные выборки PCM со знаком (соответственно) в логарифмические 8-битные выборки. Таким образом, кодер G.711 создаст битовый поток со скоростью 64 кбит/с для сигнала, дискретизированного с частотой 8 кГц. [1]
Мю-закон G.711 имеет тенденцию давать большее разрешение сигналам более высокого диапазона, тогда как A-закон G.711 обеспечивает более высокие уровни квантования при более низких уровнях сигнала.
Используются термины PCMU, G711u или G711MU для G711 μ-закона и PCMA или G711A для G711 A-закона. [2]
Таким образом, кодирование по закону A принимает в качестве входных данных 13-битный линейный аудиовыбор со знаком и преобразует его в 8-битное значение следующим образом:
Где s
находится знаковый бит, s
является его обратным (т.е. положительные значения кодируются с помощью MSB = s = 1), а отмеченные биты x
отбрасываются. Обратите внимание, что в первом столбце таблицы используется другое представление отрицательных значений, чем в третьем столбце. Так, например, входное десятичное значение -21 представляется в двоичном виде после инверсии битов как 1000000010100, что соответствует 00001010 (согласно первой строке таблицы). При декодировании это отображается обратно в 1000000010101, что интерпретируется как выходное значение -21 в десятичном формате. Входное значение +52 (0000000110100 в двоичном формате) отображается в 10011010 (согласно второй строке), которое отображается обратно в 0000000110101 (+53 в десятичном формате).
Это можно рассматривать как число с плавающей запятой с 4 битами мантиссы m (что эквивалентно 5-битной точности), 3 битами показателя степени e и 1 битом знака s , отформатированным как seeemmmm
декодированное линейное значение y, заданное формулой
которое представляет собой 13-битное целое число со знаком в диапазоне от ±1 до ±(2 12 − 2 6 ). Обратите внимание, что сжатый код не декодируется в ноль из-за добавления 0,5 (половина шага квантования).
Кроме того, стандарт определяет, что все результирующие четные биты ( LSB — четный) инвертируются перед передачей октета. Это сделано для того, чтобы обеспечить множество переходов 0/1 для облегчения процесса восстановления тактовой частоты в приемниках PCM. Таким образом, тихий канал PCM, закодированный по закону A, имеет 8-битные выборки, закодированные в октетах 0xD5 вместо 0x80.
Когда данные передаются через E0 ( G.703 ), старший бит (знак) отправляется первым, а младший бит отправляется последним.
ITU-T STL [3] определяет алгоритм декодирования следующим образом (он помещает декодированные значения в 13 старших бит 16-битного типа выходных данных).
void alaw_expand ( lseg , logbuf , linbuf ) long lseg ; коротко * линбуф ; короткий * logbuf ; { короткое ix , mant , iexp ; длинный н ; for ( n = 0 ; n < lseg ; n ++ ) { ix = logbuf [ n ] ^ ( 0x0055 ); /* повторное переключение переключённых битов */ ix &= ( 0x007F ); /* удалить знаковый бит */ iexp = ix >> 4 ; /* извлекаем показатель степени */ mant = ix & ( 0x000F ); /* теперь получаем мантиссу */ if ( iexp > 0 ) mant = mant + 16 ; /* добавляем начальную '1', если показатель степени > 0 */ mant = ( mant << 4 ) + ( 0x0008 ); /* теперь мантисса выровнена по левому краю и */ /* добавлен шаг квантования 1/2 */ if ( iexp > 1 ) /* теперь сдвиг влево в соответствии с экспонентой */ mant = mant << ( iexp - 1 ); linbuf [ n ] = logbuf [ n ] > 127 /* инвертировать, если образец отрицательный */ ? мант : - мант ; } }
См. также «Руководство пользователя библиотеки программных средств ITU-T 2009», которое можно найти по адресу. [4]
Кодирование по закону μ (иногда называемое ulaw, G.711Mu или G.711μ) принимает в качестве входных данных 14-битный знаковый линейный аудиосэмпл в представлении с дополнением до двух , инвертирует все биты после знакового бита, если значение отрицательное. добавляет 33 (двоичное число 100001) и преобразует его в 8-битное значение следующим образом:
Где s
находится знаковый бит, а отмеченные биты x
отбрасываются.
Кроме того, стандарт указывает, что закодированные биты инвертируются перед передачей октета. Таким образом, тихий канал PCM, закодированный по закону μ, имеет 8-битные выборки, передаваемые в октетах 0xFF вместо 0x00.
Добавление 33 необходимо для того, чтобы все значения попали в группу сжатия и при декодировании она вычиталась обратно.
Разбивая закодированное значение, отформатированное как seeemmmm
на 4 бита мантиссы m , 3 бита показателя степени e и 1 бит знака s , декодированное линейное значение y определяется формулой
которое представляет собой 14-битное целое число со знаком в диапазоне от ±0 до ±8031.
Обратите внимание, что 0 передается как 0xFF, а −1 передается как 0x7F, но при получении результат в обоих случаях равен 0.
G.711.0, также известный как G.711 LLC, использует сжатие данных без потерь для снижения использования полосы пропускания на целых 50 процентов. [5] Сжатие без потерь стандарта импульсно-кодовой модуляции G.711 было одобрено ITU-T в сентябре 2009 года. [6] [7]
G.711.1 «Широкополосное встроенное расширение для импульсно-кодовой модуляции G.711» представляет собой более высококачественное расширение G.711, ратифицированное в 2008 году и дополнительно расширенное в 2012 году. [8]
G.711.1 допускает ряд уровней улучшения поверх необработанного основного потока G.711 (уровень 0): уровень 1 кодирует 16-битный звук в той же узкой полосе 4 кГц, а уровень 2 допускает широкополосную полосу 8 кГц с использованием MDCT ; каждый использует фиксированную скорость 16 Кбит/с в дополнение к ядру со скоростью 64 Кбит/с. Их можно использовать вместе или по отдельности, и каждый кодирует отличия от предыдущего слоя. Утвержденный в 2012 году, уровень 3 расширяет уровень 2 до «сверхширокополосной» частоты 16 кГц, обеспечивая еще 16 кбит/с для самых высоких частот, сохраняя при этом независимость уровней. Пиковая скорость передачи данных составляет 96 кбит/с в исходном G.711.1 или 112 кбит/с в сверхширокополосном режиме. Никакой внутренний метод идентификации или разделения слоев не определен, поэтому пакетирование или сигнализация о них остается на усмотрение реализации.
Декодер, который не понимает какой-либо набор уровней точности, может игнорировать или отбрасывать неосновные пакеты, не затрагивая его, обеспечивая постепенное ухудшение качества в любой телефонной системе G.711 (или исходной G.711.1) без изменений.
В 2012 году также был ратифицирован стандарт G.711.0 без потерь, расширенный на новые уровни качества воспроизведения. Как и в случае с G.711.0, полная обратная совместимость G.711 приносится в жертву ради эффективности, хотя узел, поддерживающий G.711.0, все равно может игнорировать или отбрасывать пакеты уровня, которые он не понимает.
Срок действия патентов на G.711, выпущенных в 1972 году, истек, поэтому его можно использовать без лицензии. [1]
alaw_expand
в файле Software/stl2009/g711/g711.c
. Itu.int. Проверено 18 сентября 2013 г.