Алгоритм на псевдокоде

Арифметическое декодирование

Обозначим

l - массив нижних границ интервалов при кодировании

h - массив верхних границ интервалов при кодировании

r - массив длин интервалов

Q – массив для величин Qi

length – количество закодированных символов,

value – значение из входного файла.

 

l [0] :=0; h [0] :=1; r [0] :=1;

value:=ReadCode(); (читаем код из файла)

DO (i=1,…,length)

DO (j=1,…,n)

l [i] = l [i-1] + r [i-1]·Q [j-1]

h [i] = l [i-1] + r [i-1]·Q [j]

r [i] = h [i] - l [i]

IF (( l [i] <= value ) и ( value< h [i] ) OD FI

OD

Write(a[i]) (пишем символ в выходной файл)

OD

 

Заметим, что при кодировании и декодировании для экономии памяти достаточно использовать не массивы, а переменные l, r и h.

При реализации арифметического кодирования возникают две проблемы:

· необходима арифметика с плавающей точкой теоретически неограниченной точности;

· результат кодирования становится известен только после окончания входного потока.

Для решения этих проблем реальные алгоритмы работают с целыми числами и оперируют с дробями, числитель и знаменатель которых являются целыми числами (например, знаменатель равен 10000h=65536, l0=0, h0=65535). При этом с потерей точности можно бороться, отслеживая сближение li и hi и умножая числитель и знаменатель представляющей их дроби на одно и то же число, например на 2. С переполнением сверху можно бороться, записывая старшие биты li и hi в файл только тогда, когда они перестают меняться (т.е. уже не участвуют в дальнейшем уточнении интервала), когда li и hi одновременно находятся в верхней или нижней половине интервала.


 

6. адаптивные методы кодирования

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

Большинство адаптивных методов для учета изменений статистики исходных данных используют так называемое окно. Окном называют последовательность символов, предшествующих кодируемой букве, а длиной окна - количество символов в окне.

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

 

 
 


Рисунок 8 Схема перемещения окна при кодировании

 

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

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

Однако для всех методов адаптивного кодирования, которые приводятся в этой главе, справедлива следующая теорема:

 

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

,

где Н – энтропия источника информации,C – константа, зависящая от размера алфавита источника и длины окна.

 

6.1 Адаптивный код Хаффмана

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

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

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

P(a1)= q(a1)/W, P(a2) =q(a2)/W, ..., P(an)= q(an)/W.

2. По полученному распределению вероятностей строится код Хаффмана для алфавита А.

3. Очередная буква кодируется при помощи построенного кода.

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

Пример. Рассмотрим пример адаптивного кодирования с помощью метода Хаффмана для алфавита А={a1, a2, a3, a4} и длины окна W=6 (см. рис. 9).

 

 
 

 

 


Рисунок 9 Кодирование адаптивным кодом Хаффмана

 

Рассмотрим подробно этапы кодирования сообщения.

При кодировании буквы a3получаем следующие частоты встреч символов в окне: q(a1)=3, q(a2)=1, q(a3)=1, q(a4)=1. Тогда вероятности символов алфавита A оцениваются так

Строим код Хаффмана для полученного распределения вероятностей (см. рис. 10 (а)) и кодируем символ а3 кодовым символом 001.

a)

Символы Вероятности Построение кода Кодовые cлова
а1 1/2 1
а2 1/6 1/2 0
а3 1/6 1/3
а4 1/6  

 

 

б)

Символы Вероятности Построение кода Кодовые слова
а1 1/3 1
а2 1/6 1/3 2/3 0
а3 1/3  
а4 1/6  

в)

Символы Вероятности Построение кода Кодовые слова
а1 1/3 1/2 1
а2 1/6 0
а3 1/2
а4 1/6

 

Рисунок 10 Построение адаптивного кода Хаффмана

 

Далее передвигаем окно на один символ вправо и снова подсчитываем частоты встреч символов в окне q(a1)=2, q(a2)=1, q(a3)=2, q(a4)=1 и оцениваем вероятности:

Строим код на основе полученных оценок вероятностного распределения (см. рис. 10 (б)) и кодируем очередной символа3 другим кодовым словом - 00. В этом случае частота встречи в окне символа а3увеличилась, соответственно уменьшилась длина его кодового слова.

Снова передвигаем окно на один символ вправо, подсчитываем частоты встреч символов в окне q(a1)=2, q(a2)=0, q(a3)=3, q(a4)=1 и оцениваем вероятности:

Строим код на основе полученных оценок вероятностного распределения (см. рис. 10 (в)) и кодируем очередной символа2 кодовым словом - 101. Таким образом, после кодирования символов a3a3a2 получаем кодовую последовательность 00100101.

 








Дата добавления: 2019-02-07; просмотров: 292;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.016 сек.