Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_11_Введение в теорию кодирования.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
211 Кб
Скачать
☆

11.2 Кодеры, основанные на системе сжатия без потерь информации

В данном случае кодирующее устройство должно удовлетворять следующим условиям:

  1. Обеспечивать безошибочную передачу информации, то есть взаимно однозначное соответствие между и (рисунок 11.2).

  2. Обеспечивать кодирование наиболее экономным образом (с минимальной избыточностью).

Для выполнения первого требования:

    1. необходимо, чтобы различным буквам алфавита соответствовали различные кодовые слова;

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

  • используют специальные разделяющие символы;

  • применяют кодовые слова одинаковой длины (равномерное кодирование);

  • кодовая таблица составляется таким образом, чтобы никакое кодовое слово не являлось началом другого кодового слова.

Для выполнения второго требования необходимо добиваться при кодировании минимальной средней длины кодового слова:

.

(11.3)

где – это длина -ого слова с учетом разделительной буквы (если она используется).

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

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

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

  1. Более вероятным буквам источника ставятся в соответствие более короткие кодовые слова.

  2. Никакое кодовое слово не является началом другого более длинного кодового слова.

  3. Все буквы алфавита, используемые для передачи информации приблизительно равновероятны.

  4. Символы в последовательности на выходе кодера практически независимы.

11.3 Основные методы побуквенного кодирования. Код Хаффмана

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

      • код Хаффмана;

      • код Шеннона;

      • код Шеннона-Фано;

      • код Гильбера-Мура.

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

Код Хаффмана – это двоичный префиксный код без памяти. Далее рассмотрим некоторые теоретические основы этого кода.

Префиксным множеством двоичных последовательностей S называется конечное множество двоичных последовательностей таких, что ни одна последовательность в этом множестве не является префиксом, или началом, другой последовательности в S.

Например, множество двоичных слов является префиксным множеством, а – не является т. к. здесь двоичных последовательность 00 является началом, другой последовательности 001 в S2.

Каждый префиксный код является дешифрируемым (обратное утверждение неверно).

Кодирование кодом без памяти осуществляется следующим образом:

  1. Необходимо составить полный список символов алфавита входного сигнала; на j-ом месте стоит символ с вероятностью , то есть на первом месте стоит наиболее часто встречающийся символ.

  2. Для любого назначить кодовое слово из префиксного множества двоичной последовательности S.

  3. На выходе кодера объединить в одну последовательность все полученные двоичные слова.

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

(11.4)

Длины двоичных последовательностей в префиксном множестве удовлетворяют данному соотношению. Если в (11.4) имеет место строгое равенство, то код называется оптимальным.

Пример № 1.

, .

, .

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

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

Далее приведен алгоритм построения кодового дерева Хаффмана (H-дерева):

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

Шаг 2. Цикл. Пока в списке необработанных узлов находим два узла с наименьшими вероятностями. Они исключаются из списка, и вместо них вводится новый узел, которому приписывается суммарная вероятность двух исключенных узлов. Новый узел связывается ребрами с исключенными узлами. .

Теорема 2. Код Хаффмана является оптимальным.

Пример № 2.

Пусть дан ансамбль сообщений (алфавит): .

Энтропия ансамбля (алфавита): бит.

На рисунке 11.4 приведено кодовое дерево для ансамбля X. Движение при кодировании и декодировании происходит справа налево.

Рисунок 11.4 –Кодовое дерево Хаффмана

Таким образом, имеем:

Буква

Код

l – длина кодового слова

k – номер кодового слова

а

00

2

1

b

10

2

2

c

010

3

3

d

011

3

4

e

110

3

5

f

111

3

6

Найдены кодовые слова и вектор Крафта: .

Проверим выполнение неравенства Крафта (11.4):

,

значит найденный код оптимальный.

Средняя длина двоичной последовательности, вычисленная по формуле (11.3) составляет

бит.

Очевидно, эта длина не меньше энтропии ( бит).

Найдем избыточность данного неравномерного кода:

бит.

Вычисленная избыточность показывает, что при данном кодировании тратится на 0,05 бит больше, чем могло бы быть затрачено в принципе при теоретически лучшем принципе кодирования.

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

Средняя длина кодовых слов для данного алгоритма удовлетворяет неравенству

бит,

что и было показано ранее в примере № 2.

Закодируем при помощи построенного кода Хаффмана сообщение «abba»:

a

b

b

a

00

10

10

00

Видно, что длина кодовой цепочки символов составляет 8 бит = 1 байт.

Если бы сообщение «abba» кодировалось при помощи кодой таблицы ASCII (American Standard Code of Information Interchange – американский стандартный код информационного обмена), то длина кодовой цепочки символов составляет 4 байт (каждая буква кодируется одним байтом). Следовательно, в данном случае коэффициент сжатия, рассчитанный по формуле (11.1), составит

.

Выводы

  1. Построенный в примере № 2 код Хаффмана действительно является оптимальным.

  2. Средняя длина двоичной последовательности построенного кода Хаффмана составляет 2,45 бит.

  3. Избыточность данного неравномерного кода составляет 0,05 бит.

  4. Коэффициент сжатия сообщение «abba» кода Хаффмана составляет 4 для случая, когда размер источника сообщений определялся на основе кодой таблицы ASCII.