Файл: Методы кодирования данных.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 05.04.2023

Просмотров: 323

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Если в рассмотренном выше коде исключить кодовое слово для нуля, то можно уменьшить длины кодовых слов на 1 бит, убрав первый нуль. Таким образом строится гамма-код Элиаса (γ-код Элиаса).

Таблица 3. Гамма-код Элиаса

Число

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

Длина кодового слова

1

1

1

2

3

01 0

01 1

3

3

4

5

6

7

00 1 00

00 1 01

00 1 10

00 1 11

5

5

5

5

8

9

10

000 1 000

000 1 001

000 1 010

7

7

7

Другим примером кода класса Variable + Variable является омега-код Элиаса (ω-код Элиаса). В нем первое значение (кодовое слово для единицы) задается отдельно. Другие кодовые слова состоят из последовательности групп длиной L1,L2.,…,Lm, начинающихся с единицы. Конец всей последовательности задается нулевым битом. Длина первой группы составляет 2 бита, длина каждой следующей группы равна двоичному значению битов предыдущей группы плюс 1. Значение битов последней группы является итоговым значением всей последовательности групп, то есть первые m-1 групп служат лишь для указания длины последней группы.

Таблица 4. Омега-код Элиаса

Число

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

Длина кодового

слова

1

2

3

0

10 0

11 0

1

3

3

4

5

6

7

10 100 0

10 101 0

10 110 0

10 111 0

6

6

6

6

8

9

..

15

11 1000 0

11 1001 0

11 1111 0

7

7

..

7

16

17

..

31

10

10

10

11

11

..

11

32

10

12

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

Рассмотренные типы кодов могут быть эффективны в следующих случаях

1. Вероятности чисел убывают с ростом значений элементов и их распределение близко к такому: Р(х)≥ Р(х+1), при любом x, то есть маленькие числа встречаются чаще, чем большие[5].

2. Диапазон значений входных элементов не ограничен или неизвестен. Например, при кодировании 32-битовых чисел реально большинство чисел маленькие, но могут быть и большие.


3. При использовании в составе других схем кодирования, например, кодировании длин серий.

2.3. Кодирование длин серий

Метод кодирования информации, известный как метод кодирования длин серий и предложенный П.Элиасом, при построении использует коды целых чисел. Входной поток для кодирования рассматривается как последовательность из нулей и единиц[6]. Идея кодирования заключается в том, чтобы кодировать последовательности одинаковых элементов (например, нулей) как целые числа, указывающие количество элементов в этой последовательности. Последовательность одинаковых элементов называется серией, количество элементов в ней – длиной серии.

Пример. Входную последовательность (общая длина 31 бит) можно разбить на серии, а затем закодировать их длины.

00000 1

Используем, например, γ-код Элиаса. Поскольку в коде нет кодового слова для нуля, то будем кодировать длину серии +1, то есть последовательность: Þ 00

Длина полученной кодовой последовательности равна 25 бит.

Метод длин серий актуален для кодирования данных, в которых есть длинные последовательности одинаковых бит. В нашем примере, если Р(0)>>Р(1).

3. НЕКОТОРЫЕ ТЕОРЕМЫ ПОБУКВЕННОГО КОДИРОВАНИЯ

Пусть даны алфавит источника А={а1, а2, …аn}, кодовый алфавит В={b1, b2, …bn}. Обозначим А**) множество всевозможных последовательностей в алфавите А(В). Множество всех сообщений в алфавите А обозначим S. Кодирование F:S→ В* может сопоставлять код всему сообщению из множества S как единому целому или строить код сообщения из кодов его частей (побуквенное кодирование).

Пример.

А={a1,a2,a3}, B={0,1}. Побуквенное кодирование символов источника a1 ®1001 a2 ®0 a3®010 позволяет следующим образом закодировать сообщение a2a1a2a3 ®

Пример.

Азбука Морзе. Входной алфавит – английский. Наиболее часто встречающиеся буквы кодируются более короткими словами:

А ® 01, В ® 1000, С ® 1010, D ® 100, E ® 0, …

Побуквенное кодирование задается таблицей кодовых слов: αiєA, βiєВ*. Множество кодовых слов V={βi} называется множеством элементарных кодов. Используя побуквенное кодирование, можно закодировать любое сообщение α= αil…αikєS следующим образом F(α)=F(αil)…F(αik)=βil…βik, то есть общий код сообщения складывается из элементарных кодов символов входного алфавита.


Количество букв в слове α=α1…αk называется длиной слова. (Обозначение |αا|=k) Пустое слово, то есть слово, не содержащее ни одного символа обозначается Λ. Если α=α1α2, то α1 – начало (префикс) слова α, α2 – окончание (постфикс) слова α.

4. ОПТИМАЛЬНОЕ ПОБУКВЕННОЕ КОДИРОВАНИЕ. КОД ХАФФМАНА

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

Рассмотрим ансамбль сообщений X={1,…,N} с вероятностями сообщений {P1,…,PN}. Без потери общности мы считаем сообщения упорядоченными по убыванию вероятностей, то есть P1≤P2≤ …≤PN. Наша задача состоит в построении оптимального кода, то есть кода с наименьшей возможной средней длиной кодовых слов[7]. Понятно, что при заданных вероятностях такой код может не быть единственным, возможно существование семейства оптимальных кодов. Мы установим некоторые свойства всех кодов этого семейства. Эти свойства подскажут нам простой путь к нахождению одного из оптимальных кодов.

Пусть двоичный код С={ć1,Кćn} с длинами кодовых слов {m1,…,mN} оптимален для рассматриваемого ансамбля сообщений.

Свойство 1. Если Pi<Pj, то mi>mj.

Свойство 2. Не менее двух кодовых слов имеют одинаковую длину mmax=maxmk.

Свойство 3. Среди кодовых слов длины mmax = maxmk найдутся 2 слова, отличающиеся только в одном последнем символе.

Прежде, чем сформулировать следующее свойство, введем дополнительные обозначения[8]. Для рассматриваемого ансамбля X={1,…,N} и некоторого кода C, удовлетворяющего свойствам 1–3, введем вспомогательный ансамбль X’={1,…,N-1}, сообщениям которого сопоставим вероятности {P’1,…,P’N} следующим образом P1¢=P1K, PN¢2=PN-2, PN¢1=PN-1+PN

Из кода C построим код C' для ансамбля X', приписав сообщениям {х1¢К, хN-2¢} те же кодовые слова, что и в коде C, а сообщению хN-2¢ – слово ćN-1, представляющее собой общую часть слов ćN-1 и ćN (согласно свойству 3 эти два кодовых слова отличаются только в одном последнем символе).


Свойство 4. Если код C' для X' оптимален, то код C оптимален для X.

Итак, сформулированные свойства оптимальных префиксных кодов сводят задачу построения кода объема N к задаче построения кодов объема N'=N-1. Это означает, что мы получили рекуррентное правило построения кодового дерева оптимального неравномерного кода.

5. ПОЧТИ ОПТИМАЛЬНОЕ КОДИРОВАНИЕ

5.1. Код Шеннона

Код Шеннона позволяет построить почти оптимальный код с длинами кодовых слов Li<-log pi+1. Тогда по теореме Шеннона Lcp<H(p1,..., pn)+1.

Код Шеннона, удовлетворяющий этому соотношению, строится следующим образом:

  1. Упорядочим символы исходного алфавита А={a1,a2,…,an} по убыванию их вероятностей: p1≥p2≥p3≥…≥pn.
  2. Вычислим величины Qi, которые называются кумулятивные вероятности Q0=0, Q1=p1, Q2=p1+p2, Q3=p1+p2+p3, … , Qn=1.
  3. Представим Qi в двоичной системе счисления и возьмем в качестве кодового слова первые /-log pi / знаков после запятой[9].

Для вероятностей, представленных в виде десятичных дробей, удобно определить длину кодового слова Li из соотношения 1/2Li ≤ pi<1/2Li-1, i=1,…n

Пример.

Пусть дан алфавит A={a1,a2,a3,a4,a5,a6} с вероятностями p1=0.36, p2=0.18, p3=0.18, p4=0.12, p5=0.09, p6=0.07. Построенный код приведен в таблице 5.

Таблица 5. Код Шеннона

ai

Pi

Qi

Li

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

a1

a2

a3

a4

a5

a6

1/22≤0.36<1/2

1/23≤0.18<1/22

1/23≤0.18<1/22

1/24≤0.12<1/23

1/24≤0.09<1/23

1/24≤0.07<1/23

0

0.36

0.54

0.72

0.84

0.93

2

3

3

4

4

4

00

010

100

1011

1101

1110

Построенный код является префиксным. Вычислим среднюю длину кодового слова и сравним ее с энтропией. Значение энтропии вычислено при построении кода Хаффмана (H=2.37), сравним его со значением средней длины кодового слова кода Шеннона


Lср= 0.36.2+(0.18+0.18).3+(0.12+0.09+0.07).4=2.92< 2.37+1,

что полностью соответствует утверждению теоремы Шеннона.

5.2. Код Фано

Метод Фано построения префиксного почти оптимального кода, для которого Lcp<H(p1,..., pn)+1, заключается в следующем. Упорядоченный по убыванию вероятностей список букв алфавита источника делится на две части так, чтобы суммы вероятностей букв, входящих в эти части, как можно меньше отличались друг от друга[10]. Буквам первой части приписывается 0, а буквам из второй части – 1. Далее также поступают с каждой из полученных частей. Процесс продолжается до тех пор, пока весь список не разобьется на части, содержащие по одной букве.

Пример.

Пусть дан алфавит A={a1, a2, a3, a4, a5, a6} с вероятностями p1=0.36, p2=0.18, p3=0.18, p4=0.12, p5=0.09, p6=0.07. Построенный код приведен в таблице 6 и на рисунке 2.

Таблица 6. Код Фано

ai

Pi

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

Li

a1

0.36

0

0

2

a2

0.18

0

1

2

a3

0.18

1

0

2

a4

0.12

1

1

0

3

a5

0.09

1

1

1

0

3

a6

0.07

1

1

1

1

4

Рисунок 2. Кодовое дерево для кода Фано

Полученный код является префиксным и почти оптимальным со средней длиной кодового слова Lср=0.36.2+0.18.2+0.18.2+0.12.3+0.09.4+0.07.4=2.44