Эффективное кодирование - Техника передачи дискретных сообщений

Эффективное кодирование - это процедуры направленные на устранение избыточности.

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

Пусть имеется источник дискретных сообщений, алфавит которого K.

При кодировании сообщений данного источника двоичным, равномерным кодом, потребуется

Двоичных элементов на кодирование каждого сообщения.

Если вероятности P(aI) появления всех сообщений источника равны, то энтропия источника (или среднее количество информации в одном сообщении) максимальна и равна

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

Если при том же объеме алфавита сообщения не равновероятны, то, как известно, энтропия источника будет

.

Если и в этом случае использовать для перевозки сообщения lР. к. - разрядные кодовые комбинации, то на каждый двоичный элемент кодовой комбинации будет приходиться меньше чем 1 бит.

Появляется избыточность, которая может быть определена по следующей формуле:

,

Где D - избыточность.

Если средняя загрузка единичного элемента так мала, встает вопрос, нельзя ли уменьшить среднее количество элементов необходимых для переноса одного сообщения и как наиболее эффективно это сделать?

Для решения этой задачи используются неравномерные коды.

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

Учитывая, что объем информации, содержащейся в сообщении, определяется вероятностью появления

,

Можно перефразировать данное высказывание.

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

Таким образом, на одно сообщение будет затрачено в среднем меньшее единичных элементов

,

Чем при равномерном.

Если скорость телеграфирования постоянна, то на передачу одного сообщения будет затрачено в среднем меньше времени:

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

Каково же в среднем минимальное количество единичных элементов требуется для передачи сообщений данного источника?

Ответ на этот вопрос дал Шеннон.

Шеннон показал, что

    1. Нельзя закодировать сообщение двоичным кодом так, что бы средняя длина кодового слова была численно меньше величины энтропии источника сообщений. 2. Существует способ кодирования, при котором средняя длина кодового слова немногим отличается от энтропии источника

.

Остается выбрать подходящий способ кодирования.

Эффективность применения оптимальных неравномерных кодов может быть оценена:

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

В неравномерных кодах возникает проблема разделения кодовых комбинаций. Решение данной проблемы обеспечивается применением префиксных кодов.

Префиксным называют код, для которого никакое более короткое слово не является началом другого более длинного слова кода. Префиксные коды всегда однозначно декодируемы.

Введем понятие кодового дерева для множества кодовых слов.

Наглядное графическое изображение множества кодовых слов можно получить, установив соответствие между сообщениями и концевыми узлами двоичного дерева. Пример двоичного кодового дерева изображен на рисунке. 3.2.1.

Две ветви, идущие от корня дерева к узлам первого порядка, соответствуют выбору между "0" и "1" в качестве первого символа кодового слова: левая ветвь соответствует "0", а правая - "1". Две ветви, идущие из узлов первого порядка, соответствуют второму символу кодовых слов, левая означает "0", а правая - "1" и т. д. Ясно, что последовательность символов каждого кодового слова определяет необходимые правила продвижения от корня дерева до концевого узла, соответствующего рассматриваемому сообщению.

Рис. 3.2.1

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

Требование, чтобы только концевые узлы сопоставлялись сообщениям, эквивалентно условию, чтобы ни одно из кодовых слов не совпало с началом (префиксом) более длинного кодового слова.

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

Одним из часто используемых методов эффективного кодирования является так называемый Код Хаффмана.

Пусть сообщения входного алфавита A{a1,a2,a3...aK} имеют соответственно вероятности их появления p1,p2,p3...pK.

Тогда алгоритм кодирования Хаффмана состоит в следующем:

    1. Сообщения располагаются в столбец в порядке убывания вероятности их появления. 2. Два самых маловероятных сообщения объединяем в одно сообщение b, которое имеет вероятность, равную сумме вероятностей сообщений aK-1, aK т. е. pK-1+pK. В результате получим сообщения a1,a2,a3...aK-1,b, вероятности которых p1, p2, p3...pK-2, pK-1+ pK. 3. Повторяем шаги 1 и 2 до тех пор, пока не получим единственное сообщение, вероятность которого равна 1. 4. Проводя линии, объединяющие сообщения и образующие последовательные подмножества, получаем дерево, в котором отдельные сообщения являются концевыми узлами. Соответствующие им кодовые слова можно

Определить, приписывая правым ветвям объединения символ "1", а левым - "0". Впрочем, понятия "правые" и "левые" ветви в данном случае относительны (Рис. 3.2.2).

На основании полученной таблицы можно построить кодовое дерево рисунок 3.2.3:

Рис. 3.2.3

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

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

Еще одним методом кодирования является Арифметическое кодирование.

Арифметическое кодирование является методом, позволяющим упаковывать символы входного алфавита без потерь при условии, что известно распределение частот этих символов и является наиболее оптимальным, т. к. достигается теоретическая граница степени сжатия. Предполагаемая требуемая последовательность символов, при сжатии методом арифметического кодирования рассматривается как некоторая двоичная дробь из интервала [0,1). Результат сжатия представляется как последовательность двоичных цифр из записи этой дроби. Идея метода состоит в следующем: исходный текст рассматривается как запись этой дроби, где каждый входной символ является "цифрой" с весом, пропорциональным вероятности его появления. Этим объясняется интервал, соответствующий минимальной и максимальной вероятностям появления символа в потоке. Поясним работу метода на примере.

Математически процесс описывается следующим образом:

Кодирование:

    1. Границы рабочего интервала D0 и U0 изначально равны 0 и 1 соответственно. Длина рабочего интервала У0=1. 2. Определяем нижнюю границу рабочего интервала (т. е. границы первого закодированного сообщения):

DI= dI-1+ QII-1.

И верхнюю границу:

UI= dI-1+ QI уI-1, где QI

    - граница кодируемого сообщения на начальном интервале. А так же определяем длину нового рабочего интервала УI= UI - dI. Далее кодируем все последующие сообщения подобным образом. 3. Определяем середину конечного рабочего интервала

,

Где AN - число архив, UN, DN - верхняя и нижняя границы конечного рабочего интервала соответственно.

Декодирование:

    1. Первое закодированное сообщение "лежит" на интервале, в который входит число архив. 2. Последующие числа архивы определяются как:

, где AJ

- новое число архив, AJ-1 - предыдущее число архив, QJ-1 - нижняя граница декодированного сообщения, P(aI) - вероятность этого сообщения.

Графически метод арифметического кодирования представлен на рисунке 3.3.1.

Рис. 3.3.1

Похожие статьи




Эффективное кодирование - Техника передачи дискретных сообщений

Предыдущая | Следующая