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

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

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

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

Добавлен: 29.04.2023

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

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

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

IF (P [i-1]≤q) Р [i]:=P [i-1]

ELSE j:=i

ОD

FI

ОD

Р [j]:= q

Процедура Down (n,j) формирует кодовые слова.

S:= С [j,*] (запоминание j-той строки матрицы элем. кодов в массив S)

L:= L[j]

DО (i=j,…,n-2) [10, с. 22].

В заключение данной главы можно сделать вывод, что при кодировании сообщений является то, что символы сообщения порождаются определенным источником информации. Источник является установленным целиком, в случае если предоставлено вероятностное представление процесса появления сообщений на выходе источника. Данное значит, то что в любой момент времени установлена возможность порождения источником любой очередности символов Р(x1x2x3...xL), L≥1. Такой источник именуется дискретным вероятностным источником.

Метод оптимального побуквенного кодирования был создан Д. Хаффманом. Оптимальный код Хаффмана имеет минимальную среднюю длину кодового слова между всех побуквенных кодов для предоставленного источника с алфавитом А={a1,…,an} и вероятностями pi =P(ai).

3. Другие методы кодирования данных

3.1. Арифметический код

Мысль арифметического кодирования в первый раз выдвинута П. Элиасом. В арифметическом коде кодируемое сообщение разделяется на блоки неизменной длины, которые вслед за тем кодируются порознь. При этом при повышении длины блока средняя длина кодового слова устремляется к энтропии, но растет сложность реализации алгоритма и идет уменьшение скорости кодирования и декодирования. Данным образом, арифметическое кодирование дает возможность получить произвольно малую избыточность при кодировании довольно больших блоков входного сообщения [10, с. 29].

Проанализируем общую идею арифметического кодирования. Пусть дан источник, порождающий буквы из алфавита А={a1,a2,…,an} с вероятностями pi=P(ai), . Нужно закодировать очередность знаков предоставленного источника Х=х1х2х3х4.

  1. Подсчитаем кумулятивные вероятности Q0 ,Q1,,Qn:

Q0=0

Q1=р1

Q212

Q3123

...

Qn12+n=1

  1. Разделим интервал [Q0,Qn) (т.е. интервал [0,1)) таки образом, чтобы всякой букве начального алфавита отвечал свой интервал, равный ее вероятности (см. рис. 3.1):

a1 [Q0,Q1)

a2 [Q1,Q2)

a3 [Q2,Q3)

a4 [Q3,Q4)

...

an [Qn-1,Qn)

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

На рисунке 3.1 показан данный процесс для кодирования последовательности а3а2а3

Рис. 3.1 Схема арифметического кодирования [10, с. 30]

Для удобства вычислений введем дальнейшие обозначения:

li  нижняя грань отрезка, соответственного i-той букве начального сообщения;

hi  верхняя грань этого отрезка;

ri  длина отрезка [li, hi), т.е. ri = hi  li.

Возьмем исходные значения данных величин:

l0 = Q0=0, h0 = Qk=1, r0 = h0  l0=1

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

, , (3.1)

где m  порядковый номер кодируемой буквы в алфавите источника, m=1,...,n.

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

Для конкретного декодирования начальной очередности можно брать разрядов двоичной записи любой точки из интервала [li,hi), где rk  длина интервала после кодирования k знаков источника [1, с. 164].

Рассмотрим кодирование безграничной очередности X=a3a2a3a1a4... в алфавите A={a1, a2, a3, a4} с помощью арифметического кода. Пусть вероятности букв начального алфавита равны соответственно: р1 = 0,1; р2 =


= 0,4; р3 = 0,2; р4 = 0,3 с поддержкой арифметического кода. Пусть вероятности букв начального алфавита равны в соответствии с этим

Вычислим кумулятивные вероятности Qi :

Q0 = 0,0;

Q11 = 0,1;

Q212 = 0,5;

Q3123 = 0,7;

Q41 23 + р4 = 1 [10, с. 31].

Получим грани интервала, соответствующего первому знаку кодируемого сообщения а3:

l1 = l0 + r0·Q2 = 0 + 1·0,5 = 0,5;

h1 = l0 + r0·Q3 = 0 + 1·0,7 = 0,7;

r1 = h1  l1 = 0,7  0,5 = 0,2.

Для 2-го знака кодируемого сообщения а2 грани интервала станут таковыми:

l2 = l1 + r1·Q1 = 0,5 + 0,2·0,1 = 0,52;

h2 = l1 + r1·Q2 = 0,5 + 0,2·0,5 = 0,6;

r2 = h2  l2 = 0,6  0,52 = 0,08 и т.д.

В итоге всего объема вычислений получаем последующую очередность интервалов для сообщения а3 а2 а3 а1 а4

В итоге всех вычислений получаем надлежащую очередность интервалов для сообщения

В начале [0,0; 1,0)

После рассмотрения а3 [0,5; 0,7)

После рассмотрения а2 [0,52; 0,6)

После рассмотрения а3 [0,56; 0,576)

После рассмотрения а1 [0,56; 0,5616)

После рассмотрения а4 [0,56112; 0,5616)

Кодом очередности а3 а2 а3 а1 а4 станет двоичная запись всякой точки из интервала [0,56112; 0,5616), например, 0,56112. Для однозначного декодирования берем lоg2(r5) = lоg2(0,00048) = 12 разрядов, имеем 100011111010 [3, с. 328].

Этим образом, при арифметической кодировке сообщение представляется вещественными числами в интервале [0; 1]. По мере кодирования сообщения отображающий его интервал уменьшается, а численность битов для представления интервала растет. Очередные символы сообщения уменьшают значение интервала в зависимости от значений их вероятностей. Более вероятные символы делают это в меньшей степени, чем наименее вероятные, и следовательно, прибавляют меньше битов к итогу [10, с. 33].

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


3.2. Адаптивные методы кодирования: код Хаффмана, код «Стопка книг»

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

Основная масса адаптивных методов для учета перемен статистики начальных данных применяют так называемое окно. Окном именуют последовательность символов, предыдущих кодируемой букве, а длиной окна  количество символов в окне [10, с. 35].

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

Рис. 3.2 Схема перемещения окна при кодировании [10, с. 36]

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

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

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

Теорема. Размер средней длины кодового слова при адаптивном кодировании удовлетворяет неравенству:

, (3.2)

где Н – энтропия источника информации;

C – константа, зависящая от объема алфавита источника и длины окна.

Рассмотрим адаптивный код Хаффмана

В 1978 году Р. Галлагер разработал метод кодирования источников с неизвестной или меняющейся статистикой, базирующийся на коде Хаффмана, и вследствие этого названный адаптивным кодом Хаффмана [10, с. 37].

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

  1. Перед кодированием последующей буквы подсчитываются частоты возникновения в окне всех символов начального алфавита А={а1, а2, ..., аn}. Обозначим эти частоты как q(а1), q(а2), ..., q(аn). Вероятности символов начального алфавита оцениваются на основе велечин частот символов в окне:

Р(а1)= q(а1)/W, Р(а2) =q(а2)/W, ..., Р(аn)= q(аn)/W. (3.3)

  1. По полученному распределению вероятностей собирается код Хаффмана для алфавита А.
  2. Последующая буква кодируется при помощи построенного кода.
  3. Окно перемещается на 1-ин символ вправо, вновь считываются частоты встреч в окне букв алфавита, строится новый код для следующего символа, и так далее, пока не будет получен код всего сообщения.

Рассмотрим код «Стопка книг»

Данный метод был разработан Б.Я. Рябко в 1980 году. Название метод получил по аналогии со стопкой книг, лежащей на столе. Как правило, сверху стопки присутствуют книги, которые не так давно применялись, а понизу стопки – книги, которые применялись давным-давно, и впоследствии всякого обращения к стопке использованная книга кладется сверху стопки.

До начала кодирования буквы начального алфавита упорядочены случайным образом и всякой позиции в стопке присвоено свое кодовое слово, при этом 1-ой позиции стопки соответствует самое краткое кодовое слово, а последней позиции самое большое кодовое слово. Следующий символ кодируется кодовым словом, подходящим номеру его позиции в стопке, и переставляется на 1-ую позицию в стопке. [10, с. 38].

Пример. Приведем описание кода на примере алфавита А={а1234}. Пусть кодируется сообщение а3а3а4а4а3

  • Символ а3 располагается в 3-ей позиции стопки, кодируется кодовым словом 110 и переходит на 1-ую позицию в стопке, притом символы а1 и а2 переходит на 1-ну позицию вниз.
  • Последующий символ а3 уже располагается в 1-ой позиции стопки, кодируется кодовым словом ноль и стопка не меняется.
  • Символ а4 располагается в последней позиции стопки, кодируется кодовым словом 111 и переходит на первую позицию в стопке, при этом символы а1, а2, а3 переходят на одну позицию вниз.
  • Последующий символ а4 уже имеет место в первой позиции стопки, кодируется кодовым словом ноль и стопка не изменяется.
  • Символ а3 располагается во 2-ой позиции стопки, кодируется кодовым словом десять и переходит на 1-ое место в стопке, причем символ а4 сдвигается на 1-ну позицию книзу.

Таблица 3.1 Кодирование методом «стопка книг» [10, с. 39].