Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТЦС_Ч1_2008.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.62 Mб
Скачать

2.1. Способы представления кодов

Самым простым способом представления или задания кодов являются кодовые таблицы, ставящие в соответствие кодируемым сообщениям i соответствующие им коды (табл. 2.1).

Буква

li

Число li

Код

с основанием 4

Код 1

с основанием 2

Код 2

с основанием 2

А

0

00

000

0

Б

1

01

001

10

В

2

02

010

1100

Г

3

03

011

1101

Д

4

10

100

1110

Е

5

11

101

11110

Ж

6

12

110

111110

З

7

13

111

111111

Таблица 2.1

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

Еще одним наглядным и удобным способом задания кодов является их представление в виде “кодовых деревьев” (рис. 2.1 и 2.2), состоящих из “корня”, “ветвей”, “узлов” и “вершин”.

Корень Узлы

0 1

Вершина

0 1 0 1

0 1 0 1 0 1 0 1

А Б В Г Д Е Ж З

1 2 3 4 5 6 7 8

Рис. 4.

Рис. 2.1

Рис. 2.2

На вершинах кодового дерева находятся буквы алфавита источника, причем каждой букве соответствуют своя вершина и свой путь от корня к вершине. Процедура кодирования с использованием “кодового дерева” состоит в движении от “корня” к соответствующей “вершине” по некоторому пути. При этом движению по дереву вправо соответствует “1”, движению влево – “0” ( или наоборот). Например, при кодировании с использованием кодового дерева (см. рис. 2.1) букве А соответствует код 000, букве В – 010, букве Е – 101 и т.д.

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

Наряду с равномерными могут применяться и неравномерные коды, когда каждая буква из алфавита источника кодируется различным количеством символов, к примеру, А – 10, Б – 110, В – 1110 и т.д. Кодовое дерево для неравномерного кодирования может выглядеть, например, так, как показано на рис. 2.2. При использовании этого кода буква А будет кодироваться как 1, Б – как 0, В – как 11 и т.д. Однако можно отметить следующее.

Закодируем с использованием кодового дерева, изображенного на рис. 2.2, текст АББА. Получим код 1001. Теперь попробуем его декодировать. К сожалению, получить однозначного ответа мы не сможем, потому, что такой же код дают фразы: ЖА = 1001, АЕА = 1001 и ГД = 1001. Такие коды, не обеспечивающие однозначного декодирования, называются приводимыми, или непрефиксными, кодами и не могут на практике применяться без специальных разделяющих символов.

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

Рис. 2.3

Может показаться, что использование неравномерных кодов не очень удобно. Действительно, их декодирование выполняется сложнее, нежели равномерных. Так, к примеру, приняв первый 0 (см. рис. 2.3), декодер должен посмотреть в кодовую таблицу и выяснить, какой букве соответствует принятая последовательность. Поскольку такой буквы нет, он должен ждать прихода следующего символа. Если следующим символом будет 1, тогда декодирование первой буквы завершится – это будет Б, если же вторым принятым символом снова будет 0, придется ждать третьего символа и т.д.

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

Пусть источник сообщения выдает некоторый текст с алфавитом от А до З (размер алфавита K = 8) и одинаковой вероятностью букв Р(li ) = 1/8.

Закодируем эти буквы равномерным трехразрядным кодом (табл. 2.1, Код 1). Определим основные информационные характеристики источника с таким алфавитом:

 энтропия источника , ;

 избыточность источника ;

 среднее число символов в коде ;

 избыточность кода .

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

Предположим теперь, что буквы в алфавите источника неравновероятны и их вероятности соответствуют табл. 2.2.

Таблица 2.2

А

Б

В

Г

Д

Е

Ж

З

Ра = 0.6

Рб = 0.2

Рв = 0.1

Рг = 0.04

Рд = 0.025

Ре = 0.015

Рж = 0.01

Рз = 0.01

Подобное распределение вероятностей означает, что буква А будет встречаться в тексте чаще всего, буква Б – несколько реже, а буквы Ж и З  совсем редко. Определим характеристики такого источника:

 энтропия источника ;

 избыточность источника .

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

,

а избыточность кода

.

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

Если же закодировать сообщение с неравновероятными буквами неравномерным кодом (Код 2), то получим среднюю длину кода

и избыточность кода

.

Таким образом, если закодировать источник, вырабатывающий неравновероятные символы (буквы), неравномерным кодом, причем более вероятные буквы кодировать короткими кодами, а менее вероятные – длинными, то мы получим почти безызбыточный код с меньшей средней длиной по сравнению с кодированием равномерными кодами.

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