Материал: 5856

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

101

рой вероятность ее появления, естественно, равна сумме вероятностей объединяемых букв.

Процесс кодирования удобно графически иллюстрировать при помощи горизонтально расположенного дерева (слева – ветви, справа – корень), у которого всегда две ветви объединяются в одну, более крупную. Объединяемые ветви обозначаются двоичными цифрами: верхняя – 1, нижняя – 0. Чтобы записать кодовое слово, соответствующее данной букве, нужно двигаться к ней от корня дерева и считывать эти двоичные цифры.

Пример. Закодировать буквы алфавита, приведенного в табл. 4.2, и оценить избыточность полученного кода.

Таблица 4.2 – Пример ряда распределения вероятностей букв алфавита

xj

x1

x2

x3

x4

x5

x6

p(xj)

0,1

0,2

0,25

0,05

0,25

0,15

Энтропия источника сообщений равна

H(X) = –0,1 log0,1 – – 0,15 log0,15 = 2,423 бит/букву.

Очевидно, что из-за неравновероятности букв алфавита сообщение на выходе источника имеет избыточность

Rs 1 H(X ) / H(X )max 0,0627,

где H(X)max = logs = 2,585 бит/букву.

Кодовое дерево показано на рис. 4.2, где в разрывах ветвей указаны суммарные вероятности объединяемых букв.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,55

1

 

 

 

 

 

 

 

 

 

 

0,45

 

 

 

 

 

 

 

 

 

1,00

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Комби-

xj

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

0

 

нация

 

 

 

 

 

 

 

 

 

 

 

 

 

0,30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

x3

 

 

0,25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

01

x5

 

 

0,25

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00

x2

 

 

0,20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

111

x6

 

 

0,15

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1101

x1

 

 

0,10

 

1

0,15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1100

x4

 

 

0,05

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.2. Кодовое дерево кода Хафмана

 

 

 

Средняя длина кодового слова (4.14) на выходе кодера равна L = 2 0,25 + + 4 0,05 = 2,45 (бит/букву), и избыточность (4.13) этого сигнала

102

составляет R = 1 – 2,423/2,45 = 0,011.

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

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

Другой весьма хороший код – это код Шеннона-Фано. Здесь также буквы алфавита предварительно располагаются в порядке убывания вероятностей. Кодирование двоичным кодом проводится в несколько этапов:

1)весь алфавит делится на две группы (верхнюю и нижнюю) так, чтобы суммарные вероятности в каждой из групп были по возможности равны друг другу (к сожалению, если вероятности всех букв не могут быть представлены в виде (4.18), при выполнении этой операции возможен субъективный подход); затем для каждой буквы записывается первый символ кодового слова: 1– для букв, попавших в верхнюю группу, и 0 – для букв из нижней группы;

2)каждая группа делится, в свою очередь, на две равновероятные подгруппы, и в каждом кодовом слове записывается второй символ по тому же принципу.

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

Если m > 2, на каждом шаге проводится деление группы букв на m равновероятных подгрупп и для их нумерации используются символы 0,1,...,(m–

1).

Обратите внимание, что при кодировании и кодом Хафмана, и кодом Шеннона-Фано в самой структуре кодовой таблицы уже заложена возможность разделения при приеме последовательно передаваемых кодовых комбинаций. Например, при кодировании кодом рис. 4.2 принятая двоичная последовательность 0011000100111однозначно декодируется как последова-

тельность букв x2x4x5x2x6 . Это обусловлено тем, что в кодовой таблице никакая комбинация не является началом другой, более длинной комбинации.

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

103

ния ошибки пренебрежимо мала).

Кодирование блоками, упоминаемое в теореме Шеннона, предполагает использование тех же кодов, но кодовая таблица содержит не отдельные буквы передаваемого текста, а их комбинации (двухбуквенные, трехбуквенные и т.д.), при этом, естественно, нужно указать вероятности появления этих комбинаций. При кодировании n-буквенных комбинаций объем кодовой таблицы равен N = sn, т.е. экспоненциально растет с увеличением длины блоков. Положительный эффект при этом заключается в том, что вероятности всех n- буквенных блоков все более точно могут быть представлены в форме (4.18), т.е. избыточность может быть сделана сколь угодно малой.

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

Код Лемпела-Зива [1–3] свободен от этого недостатка. Здесь кодовая таблица, изначально почти пустая, заполняется одновременно в пунктах передачи и приема в процессе кодирования (декодирования), причем в эту таблицу вносятся лишь такие все более длинные отрезки передаваемого сообщения, которые еще не встречались ранее. Каждому отрезку в таблице присваивается n-разрядный номер. При внесении очередной записи (строки) в таблицу передается блок, содержащий:

1)номер отрезка, уже имеющегося в таблице;

2)символ, следующий в передаваемом сообщении за этим отрезком. Рассмотрим пример кодирования двоичным кодом Лемпела-Зива дво-

ичного сообщения 0010101000101. Сообщение короткое, поэтому можно взять небольшое значение n = 3.

На рис. 4.3 показаны двоичные последовательности на входе и выходе кодера, причем ради наглядности они разбиты на части, соответствующие отдельным шагам. Сплошные линии указывают, какие номера извлекаются из кодовой таблицы и подаются на выход кодера. Штриховые линии показывают путь внесения очередных записей в кодовую таблицу (первая запись “пробел” и его номер 000 внесены в таблицу заранее). Убедитесь, что по передаваемой последовательности в пункте приема можно в том же порядке заполнять кодовую таблицу и декодировать сигнал.

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

Вход

0

01

010

1

00

0101

Выход

0000

0011

0100

0001

0010

0111

Отрезок Номер

-000

0

001

01

010

010

011

1

100

00

101

0101

110

Рис. 4.3. Пример кодирования кодом Лемпела-Зива

104

следовательности (длина больше на единицу), исключать из таблицы и повторно использовать освободившиеся номера. Например, поле записи отрезка 00 можно было бы исключить отрезок 0, т.к. для него уже существуют более длинные 01 и 00, но мы эту операцию не выполняли.

Из приведенного примера видно, что код Лемпела-Зива даже увеличивает избыточность при кодировании коротких сообщений (на входе было 13 бит, а на выходе стало 24), однако при кодировании более длинных сообщений это соотношение постепенно улучшается. Доказано, что асимптотически (при увеличении длины сообщения) избыточность этого кода стремится к нулю.

Код Лемпела-Зива является основой многих процедур архивирования файлов.

Все рассмотренные выше методы – это универсальные методы, позво-

ляющие кодировать любое цифровое сообщение без потери информации.

Разработаны также специализированные методы, каждый из которых предназначен для кодирования сообщений определенного вида (голосовых, видеоизображений и т.п.) и основан на учете особенностей данного вида [2– 4]. Кодирование такими методами производится с частичной потерей информации, что выливается в погрешности при восстановлении сообщения в приемнике. Можно увеличить степень сжатия за счет увеличения погрешностей.

4.3Взаимная информация

Вканале с помехами возможны ситуации, когда принятое значение m-

ичного символа yk отличается от переданного значения xj, хотя в нормальных условиях все-таки более вероятно, что k=j. В принципе, возможно появление

любой пары xj, yk.

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

I ( x

; y

 

) log

p( x j / yk )

.

 

k

 

 

j

 

 

p( x j

)

 

(4.19)

 

 

 

 

 

Отметим некоторые очевидные свойства величины (4.19). 1) Свойство симметрии

I ( x

; y

 

) I ( y

 

; x

 

) log

p( x j / yk )

 

 

k

k

j

 

 

j

 

 

 

 

 

 

p( x j )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

log

p( yk / x j )

log

p( x j , yk )

(4.20)

 

 

 

 

 

p( yk )

p( x j ) p( yk )

 

 

 

 

 

 

 

 

 

 

вытекает из формулы умножения вероятностей (1.8). Вследствие того, что значение переданного сообщения xj и значение принятого сигнала yk входят в (4.20) одинаковым образом, эта величина получила более короткое название

105

взаимной информации между xj и yk.

2) В канале без помех возможны лишь пары xj, yj, поэтому для остальных пар находить взаимную информацию просто нет смысла. Для таких пар имеем

I ( x j ; y j ) I ( x j ) I ( y j ),

(4.21)

т.к. в таком канале всегда p(xj/yj)= p(yj/xj)=1. В канале без помех, как уже отмечалось, вся информация, создаваемая источником, достигает получателя.

3) Взаимная информация есть разность двух собственных информа-

ций

 

I ( x j ; yk ) I ( x j ) I x j / yk I ( yk ) I yk / x j .

(4.22)

И в канале с помехами при большом отношении сигнал/помеха наибо-

лее вероятным является k=j, поэтому обычно p(xj / y j ) p(x j )

и, следователь-

но, I(xj/yj)<I(xj), тогда I(xj;yj)>0. Но иногда все-таки случается k ≠ j, и в этой ситуации вполне возможно, что I(xj/yk)>I(xj) и, следовательно, количество получаемой информации отрицательно I(xj;yk)<0.

4) Если X и Y независимы (помеха полностью подавляет полезный сигнал), всегда I(xj;yk)=0, т.к. P(xj/yk)=P(xj).

Математическое ожидание случайной величины “взаимная информация” равно

m m

 

 

 

I ( X ;Y ) p( x j

, yk )I ( x j

; yk )

(4.23)

j 1 k 1

 

 

 

 

 

и называется средней взаимной информацией между X и Y, причем вместо

I(xj;yk) можно подставить любое из трех соотношений (4.20).

Средняя взаимная информация также обладает свойствами: симметрии

I(X;Y)=I(Y;X); в канале без помех I(X;Y)=H(X)=H(Y); для независимых

X и Y

всегда I(X;Y)=0, а в общем случае имеем

 

I ( X ;Y ) H ( X ) H X / Y .

(4.24)

Напомним, что Н(Х) ≥ 0 и Н(Х/Y) ≥ 0.

Воспользовавшись неравенством Иенсена для логарифмической функции при Z>0

M log Z log M Z

(4.25)

и, положив Zj,k=P(xj)/P(xj/yk), можно показать, что

 

I(X;Y ) 0 .

(4.26)

Отсюда, кстати, следует, что всегда H(X/Y)≤H(X).

В свете сказанного величины, входящие в формулу (4.24), приобретают вполне определенный смысл. Информация H(X), созданная источником, делится на две части:

I(X;Y) – то, что доходит до получателя;

H(X/Y) – то, что потеряно в канале из-за воздействия помех на сигнал. Соотношение между этими двумя частями в первую очередь зависит от

отношения сигнал/помеха.

Источник: https://studfile.net/preview/16438528/