Д. П. Пауков

Импульсно-кодовая модуляция, использующая закон мю и А

1 Общие сведения

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

Зачем же необходимо сжимать аудиоданные? Существует две причины, обуславливающие необходимость компрессии/декомпрессии аудиоданных: экономия памяти при хранении аудиоинформации (для высококачественного воспроизведения необходимо выполнять дискретизацию сигнала на большой частоте и с большой разрядной сеткой (32 бит), что приводит к большим размерам аудиофайлов), низкая пропускная способность каналов передачи цифровой информации на расстояние. Применение компрессии/декомпрессии эффективно решает обе вышеуказанные проблемы.

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

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

В процессе преобразования аналоговой величины в цифровую и обратно возникают специфические шумы квантования, связанные с ограниченностью разрядной сетки. Это связано с тем, что аналоговый сигнал принципиально имеет бесконечную точность представления, а цифровой сигнал ограниченную точность, поэтому при преобразовании неизбежно возникает ошибка. Если сигнал имеет большую амплитуду, и можно исключить влияние его значений на величину ошибки квантования, то ошибку можно рассматривать как случайную величину с нулевым математическим ожиданием, имеющей равномерное распределение в интервале, ширина которого равна шагу квантования (величине, соответствующей младшему разряду кода).

При выборе шага квантования следует добиваться того, чтобы шум квантования был, по крайней мере, сравним по мощности с другими шумами канала. До недавнего времени считалось, что достаточно иметь 12 разрядов для квантования речевого сигнала в телефонной линии, но в более современных стандартах речь идет уже о 13 или 14 разрядах. Поскольку при передаче телефонной информации используется частота дискретизации 8 кГц, то нетрудно подсчитать, что при отсутствии компрессии для передачи ИКМ-информации по одному каналу требуется обеспечить его пропускную способность на уровне от 96 до 112 кбит/с, что в четыре раза превышает теоретический предел пропускной способности телефонного канала. Исходя из этого, актуальной становится задача компрессии/декомпрессии оцифрованной речевой информации таким образом, чтобы ее можно было передавать по стандартному телефонному каналу. Эту задачу на сегодня решают путем применения различных алгоритмов компрессии/декомпрессии, среди которых наиболее простые - закон мю, закон А, более сложные - ADPCM, GSM и другие.

2 Сжатие отдельных отсчетов

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

Применение логарифмического преобразования сигнала приводит к необходимости создания достаточно сложных и медленных вычислительных устройств. Поэтому в МККТТ при разработке рекомендации G.711 был использован подход, во многом напоминающий преобразование чисел в формате с плавающей запятой. В этом случае для представления числа отводится 3 поля: поле знака, поле мантиссы и поле порядка. В поле порядка содержится степень, в которую следует возвести число 2, чтобы при умножении результата этой операции на мантиссу получить истинное значение данного числа в формате с фиксированной запятой.

В рекомендации G.711 предложены два алгоритма преобразования сигналов: закон мю и закон А [1]. Кодирование по закону мю широко используется в США и Японии, а кодирование по закону А - в Европе. Оба эти алгоритма преобразуют исходные отсчеты исходной последовательности сигнала в формате ИКМ в байтовые отсчеты. Каждый отсчет исходной последовательности преобразуется в один байт. Таким образом, пропускная способность канала для передачи преобразованной информации снижается до 64 кбит/с.

В рекомендации МККТТ законы мю и А заданы в виде таблицы, однако во многих случаях к оперативной памяти предъявляется больше требований, чем к быстродействию, кроме того алгоритм, всегда позволит построить первоначальную таблицу, согласно рекомендации G.711.

2.1 Импульсно-кодовая модуляция, использующая закон мю

Алгоритм рекомендован для преобразования 14 разрядных отсчетов со знаком в байт, имеющий 3 поля: знак, порядок и мантисса.

Структура байта при кодировании
Рисунок 1 - Структура байта отсчета для закона мю и закона А

Так как согласно стандартам IBM PC работает с 16 битным способом дискретизации звука, а не с 14 битным, то алгоритм закона мю немножко изменится. Алгоритм сжатия предназначен для выделения из 16 битного отсчета всех трех полей байта (см. рисунок 1).

Алгоритм закона мю
Рисунок 2 - Алгоритм сжатия 16-битного отчета по закону мю

На рисунке 2 показан алгоритм преобразования отдельного 16 битного отсчета по закону мю в байтовый код. Первой операцией преобразования является получение абсолютной величины преобразуемого отсчета. После проверяется, не наступит ли переполнение при добавлении смещения к полученной величине. Если переполнение наступит, то вместо полученной абсолютной величины кодируется максимально возможная величина, в противном случае к полученной абсолютной величине прибавляется смещение. В рекомендации G.711 предлагается использовать в качестве смещения величину 33, добавление которой к исходной гарантирует, что в результате нормализации их суммы в старшем незнаковом разряде числа будет содержаться значение 1, а величина порядка при этом не выйдет за допустимый диапазон значений. Однако в данной рекомендации в качестве исходного формата, как говорилось выше, предполагается использовать 14-разрядные числа со знаком, в то время как исходный формат для нашего преобразования является 16-разрядные числа со знаком. Поэтому вместо рекомендованного смещения 33 используется вчетверо большее значение смещения - 132. После этого определяется значение порядка. Поскольку в языке C++ отсутствуют поддерживаемые в сигнальных процессорах команды автоматической нормализации с одновременным определением порядка, то в данной функции для определения порядка применяется многоуровневый условный оператор, а для нормализации - оператор сдвига. Поскольку операция нормализации является промежуточной в процессе получения мантиссы числа, то оператор сдвига сразу перемещает мантиссу числа на ее место. Так как добавление смещения гарантирует, что старший разряд мантиссы будет иметь значение 1, то этот разряд не передается и восстанавливается на приемном конце (см. декодер рис. 3). Далее значение порядка корректируется с учетом различия форматов и сдвигается в младшие разряды старшего ниббла байта. Знак кода получается путем его маскировки в исходном отсчете и переноса результата из старшего байта в младший. После получения всех компонентов кода он собирается операцией побитового или, затем полученный код инвертируется, что повышает вероятность появления единиц в передаваемой последовательности, что, в свою очередь, повышает помехозащищенность кода.

На рисунке 3 показан алгоритм декодера закона мю, который позволяет преобразовать байтовый отсчет, закодированный по закону мю (см. рис. 1) в базовый формат - 16 битное число со знаком. Прежде всего, полученная величина инвертируется. После этого из полученной величины извлекается значение порядка, передаваемое в 4, 5 и 6 битах. Для получения порядка эти биты маскируются, и результат сдвигается на 4 разряда влево. Порядок представляет собой степень, в которую нужно возвести число 2, чтобы результат этой операции при умножении на мантиссу давал требуемое значение абсолютной величины числа. Так как мы работаем с 16 битным форматом отсчета, а не с 14 битным, то необходимо к полученной величине порядка прибавить число 2. Старший разряд мантиссы не передается, он всегда равен 1. Для восстановления мантиссы она сдвигается на 1 разряд влево и к ней прибавляется величина 33. После восстановления величин мантиссы и порядка производится сдвиг мантиссы влево на число разрядов, равное значению порядка. Затем нужно вычесть из этой величины смещение и восстановить знак числа. В качестве смещения мы использовали величину 132. Поскольку вычесть из абсолютной величины числа величину равную 132 и инвертировать знак результата - все равно что вычесть эту величину из величины 132, то для получения отрицательного числа используется второй вариант, что уменьшает число операций. Полученная величина сохраняется в выходном файле как 16 битная.

Декодер отсчета закона мю
Рисунок 3 - Алгоритм декодирования отсчета по закону мю

2.2 Импульсно-кодовая модуляция, использующая закон А

Кодирование по закону А во многом аналогично кодированию по закону мю, однако в данном случае исходная информация представляется в формате 13 битного числа со знаком (в нашем случае используется 16 битовое число со знаком, что несколько изменяет алгоритм рекомендации G.711). При кодировании не используется смещение и при передаче инвертируются только четные биты кода.

Кодирование исходного 16 битного отсчета по закону А осуществляется следующим образом. Как и в алгоритме закона мю, первой операцией преобразования является получение абсолютной величины отсчета исходного формата. После этого проверяется, имеет ли полученная величина достаточно большое значение, чтобы обеспечить единичное значение мантиссы при данной разрядности порядка (три разряда). Дело в том, что в алгоритме закона А не гарантировано единичное значение старшего разряда мантиссы, и для мантиссы с нулевым старшим разрядом применяется свой алгоритм кодирования и декодирования: мантисса получается простым сдвигом на 4 разряда (в случае использования исходного формата 16-разрядного числа со знаком) без дальнейшего преобразования, этой мантиссе соответствует нулевое значение порядка. Если при кодировании единичное значение старшего разряда мантиссы не может быть обеспечено, то исходная величина просто сдвигается влево на 4 разряда (для 16 битного исходного формата), что эквивалентно заданию нулевого значения порядка в отведенных ему битах. Если единичное значение мантиссы может быть обеспечено, то старший разряд не передается, а следующие за ним разряды записываются в младшие четыре разряда байта кода (см. рис. 1), а в три младшие разряда старшей тетрады записывается порядок. В старший разряд этой тетрады всегда записывается знак числа. Для повышения помехоустойчивости кода при его передаче значения его четных разрядов инвертируются.

Декодирование полученного по закону А байта осуществляется по следующему алгоритму. Сначала в байте инвертируются четные разряды, Затем из полученного кода выделяется мантисса и порядок, но, если выделение порядка ничем не отличается от подобной операции в алгоритме закона мю, то выделение мантиссы имеет свои особенности, связанные с тем, что старший разряд мантиссы может принимать нулевое значение. Если старший разряд мантиссы имеет единичное значение, то оно, как и в случае закона мю, не передается, а восстанавливается на приемном конце. В данном алгоритме не применяется коррекция округления, поэтому к мантиссе прибавляется смещение 32, а не 33, как в случае закона мю. После восстановления мантиссы она сдвигается в соответствии со значениями порядка. Если старший разряд мантиссы равен 0, то этой мантиссе соответствует нулевое значение порядка, и она получается сдвигом на 4 разряда. Поскольку в алгоритме закона А не используется смещение, то для получение отрицательного числа выполняется простая инверсия его абсолютной величины, знак числа хранится в старшем разряде передаваемого байта.

3 Обзор прочих методов сжатия аудиоданных

При кодировании аудиоинформации по закону мю или закону А все отсчеты входной последовательности кодируются независимо, а компрессия достигается за счет свойств слуха. Это кодирование может быть применено для любых сигналов, в том числе и музыкальных, без заметной потери качества. Однако такое кодирование не может обеспечить значительной компрессии сигнала, поскольку не учитывает его свойства. Известно, например, что речевой сигнал является низкочастотным, и начиная с частоты около 500 Гц, его средний спектр спадает на 6 дБ на октаву. Поэтому существенной компрессии сигнала можно добиться, передавая не сам сигнал, а его приращения от отсчета к отсчету. На этом принципе основана дельта-модуляция.

Дельта-кодер работает по принципу анализа через синтез, то есть, послав отсчет в линию, он тут же выполняет операцию декодирования и получает величину, которая будет восстановлена на приемном конце. На вход дельта-кодера подается последовательность отсчетов формата ИКМ. Кодер сравнивает пришедший отсчет с декодированным предыдущим отсчетом и, если новый отсчет превышает предыдущий, посылает в канал единичный бит, а если меньше - нуль. Если значения отсчетов равны, то посылается любой из них. На приемном конце располагается накапливающий сумматор, который при получении единичного бита увеличивает хранящуюся в нем величину на единицу, и уменьшает ее на единицу в противном случае. Из описания алгоритма ясно, что соседние отсчеты входной последовательности не должны отличаться более чем на единицу. В противном случае возникнет перегрузка по крутизне, когда в восстановленном сигнале вместо крутых участков появляются линейные участки меньшей крутизны.

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

Существуют и более сложные алгоритмы, например, алгоритм адаптивной дифференциальной импульсно-кодовой модуляции (АДИКМ). Этот алгоритм использует адаптивный предсказатель значения входного отсчета и кодирует не сам входной сигнал, а ошибку его предсказания. Это позволило снизить количество бит, отводимых для кодирования одного отсчета до 4, что соответствует скорости передачи 32 кбит/с, без снижения качества передаваемой информации. Этот алгоритм был рекомендован МККТТ в рекомендации G.721[2] и идентичной ей рекомендации ANSI T1.301-1987.

В мобильной связи широко применяется алгоритм GSM, соответствующий рекомендации 06.10 Европейского Института Телекоммуникационных Стандартов. Этот кодек имеет достаточно сложную структуру, и он специально разрабатывался для цифровых процессоров обработки сигналов, выполняющих все операции в формате с фиксированной запятой.

Широкое распространение получил также алгоритм MPEG Layer 3 (MP3), позволяющий выполнить сжатие аудиоданных в формате ИКМ в 11 и более раз без существенного снижения качества.

Перечень ссылок

  1. Boll S. F. Suppression of acoustic noise in speech using spectral subtraction. IEEE Transactions on Acoustics, Speech and Signal Processing, vol. ASSP-27, No 2, April 1978, pp. 113-120.
  2. International Telegraph and Telephone Consultative Committee. 1986. Study Group XVIII - Report R26(C), Recommendation G.721. 32 kbit/s Adaptive Differential Pulse-Code Modulation (ADPCM).
  3. Секунов Н. Ю. Обработка звука на PC. - СПб.: БХВ-Петербург, 2001. - 1248 с.: ил.


доклад сделан на дне науки кафедры ПМИ ДонНТУ в апреле 2002 года


© 2003 Дмитрий Пауков
email: paukoff@fromru.com