Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

29-10-2014_11-40-41 / Методические указания к выполнению лабораторной работы ___4 по ОТС

.pdf
Скачиваний:
49
Добавлен:
17.03.2015
Размер:
2.01 Mб
Скачать

Методические указания к выполнению лабораторной работы №4 по дисциплине «Общая теория связи»

Изучение методов эффективного кодирования информации

Красноярск

Золотухин, В.В.

Методические указания к выполнению лабораторной работы №4 «Изучение методов эффективного кодирования информации» по дисциплине «Общая теория связи» / В.В. Золотухин. – Красноярск, 2013. – 29 с.

В данных методических указаниях к лабораторной работе по дисциплине «Общая теория связи» перед студентами ставится задача изучения современных методов эффективного кодирования (сжатия) различных видов информации, среди которых такие методы как алгоритмы Хаффмана и Шеннона-Фано, арифметическое кодирование, кодирование длин повторов RLE, словарные методы сжатия Лемпеля-Зива LZ77 и LZ78, линейное предсказывающее кодирование LPC, дельта-модуляция и нелинейное кодирование.

Предназначено для студентов, обучающихся по направлению подготовки 210700.62 «Инфокоммуникации».

© В.В. Золотухин

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

Задание на лабораторную работу: в соответствии с номером варианта требуется реализовать программно алгоритм эффективного кодирования или декодирования текстовой или числовой информации согласно заданию из табл. 4.1. Предварительно требуется выполнить и продемонстрировать преподавателю домашнее задание. В качестве исходных данных для кодирования рекомендуется выбирать последовательности из табл. 4.2 и 4.3.

 

 

Таблица 4.1

Задания на выполнение лабораторной работы согласно номеру варианта

 

 

 

Номер варианта

Домашнее задание

Программная реализация

1

Хаффмана

Кодер LZ77

2

Шеннона-Фано

Кодер LZ78

3

RLE

Декодер LZSS

4

LPC

Кодер LZSS

5

LZW

Декодер LZ78

6

LZSS

Декодер LZ77

7

Хаффмана

Кодер RLE

8

Шеннона-Фано

Кодер дельта-кодир.

9

RLE

Кодер LZ77

10

Дельта-кодирование

Кодер LZ78

11

LZ77

Декодер RLE

12

LZ78

Декодер дельта-кодир.

13

Хаффмана

Кодер LZW

14

Шеннона-Фано

Кодер арифм. кодир.

15

RLE

Декодер арифм. кодир.

16

Дельта-модуляция

Декодер LZW

17

Нелинейное кодирование

Кодер дельта-модуляция

18

Нелинейное кодирование

Декодер RLE

19

LZ77

Нелин. кодер

20

LZ78

Нелинейный декодер

 

 

Таблица 4.2

Исходные данные для решения домашнего задания

 

 

Метод сжатия

Исходные данные

Хаффмана,

AABCBCAABCAABABAAABACACABBAAAABAAA

Шеннона-Фано

ABAABAABABABABAAABAAAAABAABC

Дельта-кодиров.

5, 6, 5, 6, 7, 10, 11, 12, 13, 15, 18, 22, 15, 13, 10, 8, 5, 2, -1,

 

0, 1, -1, 0

RLE

AAABBAAAAABCBABBBBCAAAAAAAABBBCCCC

 

AAAAAAAAABBBCCACBBBBACCBBAAAABBBBBA

 

CACCCCCCBBB

LZ

ABCABABBAAABABCBACCBACBAAABACACABCC

Арифмет. кодир.

КОМОК

 

Таблица 4.3

 

Исходные данные для сжатия программой

 

 

Метод сжатия

Исходные данные

Хаффмана,

AABCBCAABCAABABAAABACACABBAAAABAAA

Шеннона-Фано

ABAABAABABABABAAABAAAAABAABCAAAABA

 

BCABBBAAAAABAABABCABBCAABBAAAAAAAB

 

AAAAAAABBACAAABBAAAAA

 

Окончание таблицы 4.3

 

 

Метод сжатия

Исходные данные

Дельта-

5, 6, 5, 6, 7, 10, 11, 12, 13, 15, 18, 22, 15, 13, 10, 8, 5, 2, -1,

кодирование

0, 1, -1, 0

RLE

AAABBAAAAABCBABBBBCAAAAAAAABBBCCCC

 

AAAAAAAAABBBCCACBBBBACCBBAAAABBBBBA

 

CACCCCCCBBB

LZ

ABCABABBAAABABCBACCBACBAAABACACABCC

 

BCBCCBABCBCCCCBCACAAACACBCAACBACBAB

 

CCABCCACCCBCAACBBACCABCBCABCBACBBCB

 

ABCBACBCBBBCBACAAAACB

Арифметическое

TORONTO

кодирование

 

4 Методы эффективного кодирования источников дискретных сообщений

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

Основная теорема кодирования, предложенная Клодом Шенноном,

устанавливающая связь между средней длиной кодовой комбинации l и

энтропией источника дискретных сообщений H(A), формулируется следующим образом:

Для любого однозначно декодируемого кода всегда выполняется неравенство

l H(A),

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

l H(A) 1.

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

Далее рассмотрим методы статистического кодирования источников дискретных сообщений, предложенные Шенноном и Фано, а также Хаффманом. Следует заметить, что такие методы предполагают наличие статистических данных о вероятностях появления символов алфавита p(ai) или хотя бы их оценок.

4.1Статистическое кодирование источников дискретных сообщений

4.1.1Метод кодирования Шеннона-Фано

Данный метод был предложен независимо Клодом Шенноном (Claude Elwood Shannon) и Робертом Фано (Robert Fano). Алгоритм кодирования источника состоит из следующих трех этапов: сортировки, разделения и кодирования. Более полно алгоритм кодирования можно описать следующими этапами:

1.Расположить все символы алфавита в порядке убывания вероятностей.

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

3.Продолжаем процесс разделения: теперь каждую из групп вновь делим на две подгруппы с примерно одинаковыми вероятностями. Теперь уже в качестве вторых символов кодовых комбинаций для верхних подгрупп выбираем 0, а для нижних – 1.

4.Весь процесс повторяется до тех пор, пока не в каждой из подгрупп не останется по одному символу.

Для примера рассмотрим процесс получения кодовых комбинаций для источника с алфавитом из 6 символов:

Достаточно часто построение кода Шеннона-Фано удобно проиллюстрировать с помощью дерева:

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

В случае равномерного кодирования символов данного алфавита потребуется 3 бита на символ – l = 3 бита.

Для кода Шеннона-Фано на один символ в среднем приходится следующее число битов:

K

lli P(ai) 1 0,5 2 0,2 3 0,1 4 0,1 5 0,05 5 0,05 2,1 бит.

i1

При этом энтропия источника равна:

6

H(A) P(ai) log2 P(ai) 2,061бит.

i 1

Таким образом, избыточность при использовании кодирования Шеннона-Фано составит всего лишь:

R(A) l H(A) 2,1 2,061 0,039 бит.

Следует заметить, что метод Шеннона-Фано может быть использован не только для кодирования отдельных символов, но и для кодирования групп символов, то есть блокового кодирования.

Рассмотрим простой пример. Пусть алфавит источника состоит всего из двух символов – A и B с вероятностями появления p(A)=0,7 и p(B)=0,3 соответственно. Энтропия для такого источника равна:

H(A) 0,7 log2 0,7 0,3 log2 0,3 0,88 бит.

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

Символ

Вероятность

Кодовое слово

A

0.7

1

 

 

 

B

0.3

0

 

 

 

При этом избыточность источника будет равна R(A)=0,12 бит/символ. Теперь попробуем использовать метод Шеннона-Фано для

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

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

l 1,81битов 0,905 бит. 2

При этом избыточность составит R(A)=0,905-0,88=0,025 бит/символ, что почти в пять раз меньше исходного значения.

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

Метод кодирования Шеннона-Фано является близким к оптимальному, но не оптимальным. Это объясняется тем фактом, что в процессе кодирования возможны ситуации, когда суммарные вероятности двух групп будут одинаковы не только для одного, но и для двух вариантов разделения. В этом случае, даже выбирая оптимальный на данном шаге вариант, можно в конечном счете прийти к неоптимальному решению. Иными словами, для одних и тех же вероятностей появления символов можно построить несколько кодов Шеннона-Фано, лишь некоторые из которых будут оптимальными.

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

4.1.2 Метод кодирования Хаффмана

Данный алгоритм был разработан в 1952 году аспирантом Массачусетского технологического института Дэвидом Хаффманом в процессе написания им курсовой работы.

Во многом принцип работы алгоритма Хаффмана напоминает алгоритм Шеннона-Фано, но при этом является более сложным, что является его расплатой за оптимальность. Основные этапы работы алгоритма Хаффмана:

1.Расположить все символы алфавита в порядке убывания вероятностей.

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

3.Процесс объединения продолжается до тех пор, пока в новом алфавите не останется всего двух символов.

4.Теперь начинается процедура кодирования: двигаясь в обратном направлении, верхнему из объединенных символов в качестве очередного бита кодовой комбинации добавляется 1, нижнему - 0.

Процесс создания кодовых комбинаций продолжается до тех пор, пока не дойдет до исходного алфавита.

Таким образом, новым этапом в алгоритме Хаффмана является процедура движения в обратном направлении.

Рассмотрим кодирование методом Хаффмана на примере:

В данном случае средняя длина кодовой комбинации составит l 2,1битов. Следует заметить, что данное значение полностью совпало с результатом кодирования методом Шеннона-Фано. Однако, уже математически доказано, что в общем случае код Хаффмана позволяет получить более высокие результаты по сравнению с кодом Шеннона-Фано. Именно по этой причине код Хаффмана широко используется в технике связи – факсимильных аппаратах и модемных протоколах, а также как составная часть в большинстве современных алгоритмов сжатия информации, таких как JPEG, MPEG, MP3.