Научная статья на тему 'Моделирование арифметического кодека в среде MathCAD'

Моделирование арифметического кодека в среде MathCAD Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
926
128
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОДЕР / ДЕКОДЕР / КОДЕК / КОДИРОВАНИЕ / ОПТИМАЛЬНОЕ КОДИРОВАНИЕ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Яковлев В. В., Ходаковский В. А., Кудряшов В. А.

Широко известны методы оптимального кодирования и оптимальные коды, например коды Шеннона – Фано, Хаффмена и др. Вместе с тем в последние годы в различных системах передачи данных стало широко применяться арифметическое кодирование. Предпринята попытка рассмотрения простого кодека и моделирование его алгоритмов в среде MathCAD.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Modeling of the Arithmetic Codec in MATHCAD Environment

Methods of optimum coding and optimum codes, such as codes of Shennon-Fano, Haffmen and others are widely known. At the same time, last years arithmetic coding has been applied widely in various systems of data transmission. One of the most complete monographies published in Russia and dedicated to optimum coding and information compression pres ents the main approaches and algorithms of optimum coding, including arithmetic coding. This article presents an attempt of consider a simple codec and modeling of its algorithms in MathCAD environment.

Текст научной работы на тему «Моделирование арифметического кодека в среде MathCAD»

132

Информатика и технологии информатики

6. Автоматическая классификация документов на основе латентно-семантического анализа / И. Е. Кураленок, И. С. Некрестьянов // ТРУды Первой Всероссийской научно-методической конференции «Электронные библиотеки: перспективные методы и технологии, электронные коллекции». - СПб., 1999. - C. 89-96.

7. Latent semantic indexing / S. Dumais // TREC-3 report. In Proc. of the Third Text REtrieval Conference, 1995. - PP. 219-230.

8. Using latent semantic indexing for information filtering / P. Foltz // In ACM Conference on Office Information Systems (COIS), 1990. -PP, 40-47.

УДК 681.3

В. В. Яковлев, В. А. Ходаковский, В. А. Кудряшов

Петербургский государственный университет путей сообщения

МОДЕЛИРОВАНИЕ АРИФМЕТИЧЕСКОГО КОДЕКА В СРЕДЕ MATHCAD

Широко известны методы оптимального кодирования и оптимальные коды, например коды Шеннона - Фано, Хаффмена и др. Вместе с тем в последние годы в различных системах передачи данных стало широко применяться арифметическое кодирование.

Предпринята попытка рассмотрения простого кодека и моделирование его алгоритмов в среде MathCAD.

кодер, декодер, кодек, кодирование, оптимальное кодирование.

Введение

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

будут иметь короткие кодовые комбинации. Оптимальные коды, подобные кодам Шеннона - Фано и Хаффмена [2] позволяют использовать до одного бита на символ сообщения, но для получения такого показателя необходимо иметь таблицу вероятностей символов используемого алфавита, а сами вероятности должны быть кратны степеням двойки: 1/2, 1/4, 1/8 и т. д. На рис. 1 приведен график эффективности оптимального кодирования и кодирования по Хаффмену.

Из рисунка видно, что при кодировании по Хаффмену и при передаче всего двух символов (например, «0» и «1»), следующих

2012/2

Proceedings of Petersburg Transport University

Информатика и технологии информатики

133

п

о

и

К

о

сЗ

д

ОЭ

g

к

ю

о

и

н

о

£

Рис. 1. Сравнение методов кодирования

с равными вероятностями Р0 = Р1 = 0,5, достаточно одного бита на символ.

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

Понятие «кодек» основано на слиянии двух частей слов: «код» - кодер или коди -ровщик и «дек» - декодер [1], [2].

1.1 Основная идея метода

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

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

Пусть дан некий интервал, заданный границами: левой а и правой b. Пусть а = 0, b = 1.

Имеется кодовая таблица символов (табл. 1).

Необходимо передать сообщение bade-fac.

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

Для первого символа «Ь» интервалы по кодовой таблице: а1 = 0,3, b1 = 0,5. Значит, полученная десятичная дробь находится в интервале [0,3-0,5].

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

а- = а-1+*,..3 • (bi-1 - a-1);

bi = а-1+s,.a • (b-1 - аЛ (1)

где s. 3, s. 4 - левая и правая границы интервала текущего символа.

Для нашего сообщения второй символ -«а», поэтому

«2 = а1 + S1...3 ^ (b1 - а1) =

= 0,3 + 0 • (0,5 - 0,3) = 0,3;

b2 = а1 + s1,4 • (b1 - а1) =

= 0,3 + 0,3 • (0,5 - 0,3) = 0,36, (2)

где s ; s - левая и правая границы интервала из кодовой таблицы для символа «а», здесь первый индекс равен 1, поскольку символ «а» имеет первый номер в кодовой таблице.

Все этапы кодирования сведены в табл. 2.

Итоговой кодовой десятичной дробью будет левая граница последнего интервала

ISSN 1815-588Х. Известия ПГУПС

2012/2

134

Информатика и технологии информатики

ТАБЛИЦА 1. Вероятности символов и их интервалы

Номер i Символ Вероятность P Границы интервала

a. i b l

0 1 2 3 4

1 a 0,3 0 0,3

2 b 0,2 0,3 0,5

3 c 0,2 0,5 0,7

4 d 0,1 0,7 0,8

5 e 0,1 0,8 0,9

6 f 0,1 0,9 1,0

ТАБЛИЦА 2. Кодирование сообщения badefac

№ п/п Сим- вол Формула Границы

левая правая

0 a0 = 0 b0 = 1 0 1

1 b a1 = 0,3 b1 = 0,5 0,3 0,5

2 a a2 = a1 + s13 • (b1 - a1) = 0,3 + 0 • (0,5 - 0,3) b2 = a1 + s14 • (b1 - a1) = 0,3 + 0,3 • (0,5 - 0,3) 0,3 0,36

3 d a3 = a2 + T,3 • (b2 - a2) = 0,3 + 0,7 • (0,36 - 0,3) b3 = a2 + s4,4 • (b2 - a2) = 0,3 + 0,8 • (0,36 - 0,3) 0,342 0,348

4 e a4 = a3 + s53 • (b3 - a3) = 0,342 + 0,8 • (0,348 - 0,342) b4 = a3 + s5,4 • (b3 - a3) = 0,342 + 0,9 • (0,348 - 0,342) 0,3468 0,3474

5 f a5 = a4 + s63 • (b4 - a4) = 0,3468 + 0,9 • (0,3474 - 0,3468) b5 = a4 + s6,4 • (b4 - a4) = 0,3468 + 1,0 • (0,3474 - 0,3468) 0,34734 0,3474

6 a a6 = a5 + s1 3 • (b5 - a5) = 0,34734 + 0,0 • (0,3474 - 0,34734) b6 = a5 + s14 • (b5 - a5) = 0,34734 + 0,3 • (0,3474 - 0,34734) 0,34734 0,347358

7 c a7 = a6 + • (b6 - a6) = 0,34734 + 0,5 • (0,347358 - 0,34734) b7 = a6 + s3’4 • (b6 - a6) = 0,34734 + 0,7 • (0,347358 - 0,34734) 0,347349 0,3473526

2012/2

Proceedings of Petersburg Transport University

Информатика и технологии информатики

135

(строка 7 таблицы), т е. кодом сообщения badefac будет 0,347349.

Часть процесса получения кодового слова (кодирование первых трех символов сообщения, т е. bad) можно изобразить графически (рис. 2).

На рис. 2 показано, что основной интервал [0-1] разбивается на части, соответствующие вероятностям символов в сообщении.

Фактически передавать необходимо только цифры после запятой.

Переданная дробь больше чем 0,3, а по кодовой таблице это соответствует первому символу - «Ь», интервал которого [0,3-0,5], поэтому декодер выдает первый дешифрованный символ - «Ь».

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

0 a . 0 b c . d . e . f

1 м iii! , ■]■ -i' у ' 1 1 1 1 1 1 1

0 0, 3 0,5 0,7 0,9 1

cn o' 1 42

1 a - 0,30

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

J d 0,306

Рис. 2. Принцип арифметического кодирования сообщения badefac

Наибольший интервал отведен для символа «а», он равен 0,3. Границы интервала первого из передаваемых символов соответствуют [0,3-0,5], поэтому для кодирования первого символа достаточно передать любую дробь из этого интервала, которая впоследствии уточняется (на рисунке поставлен код -0,3). Из полученного интервала выделяется часть, которая соответствует вероятности и интервалу второго из передаваемых символов. Границы интервала второго символа «а» по кодовой таблице [0-0,3], поэтому от первого интервала [0,3-0,5] берется доля 0,3, и т. д. После передачи трех символов код - 0,306.

1.2 Арифметическое декодирование сообщения

Итак, что касается приемной стороны, то нам известно, что сообщение имеет длину 7 символов, известна кодовая таблица (табл. 1) и мы получили дробь - 0,347349.

левой границы символа «Ь» и деления результата на длину интервала этого символа: (0,347349 - 0,3)/0,2 = 0,236745. Полученное число попадает в интервал символа «а» [0-0,3], поэтому декодер выдает второй символ - «а».

Устраняется влияние символа «а»: (0,236745 - 0,0)/0,3 = 0,78915, это число находится в интервале [0,7-0,8] символа «d».

Устраняется влияние символа «d»: (0,78915 - 0,7)/0,1 = 0,8915, это в интервале [0,8-0,9] символа «е».

Устраняется влияние символа «е»: (0,8915 - 0,8)/0,1 = 0,915, это в интервале [0,9-1,0] символа «f».

Устраняется влияние символа «f>: (0,915 - 0,9)/0,1 = 0,15, это в интервале [0,00,3] символа «а».

Устраняется влияние символа «a»: (0,15 - 0)/0,3 = 0,5, это в интервале [0,5-0,7] символа «с».

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

ISSN 1815-588Х. Известия ПГУПС

2012/2

136

Информатика и технологии информатики

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

2 Моделирование арифметического кодека в среде MathCAD

2.1 Алгоритм построения кодовой таблицы

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

Ниже приведены тексты двух программ для системы MathCAD, первая из которых -P( f ) - вычисляет частоты символов в сообщении, а вторая - T(C, f ) - формирует кодовую таблицу:

T(C,f) :=

n ^ length(f) n1 ^ rows(C) m ^ 0

for i e 0..n1 - 2

m ^ 1 if Ci,0 = Cn1-1,0

continue otherwise for i e 0..n1 -1 - m

Di,0 ^ Ci,0 Di,1 ^ Ci,1

Q ^ reverse (csort(D,1))

C0,2

f

(

V

0

Q0,1

Л

40,4

n

Q0,3

for i e1..rows(Q) -1

Qi,2 ^ Qi1

n

Qi,3 ^ Qi-1,4 Qi,4 ^ Qi,3 + Qi,2

Q

P(f):

n ^ rows(f)

i ^ 0

Результат вызова приведенных программ для построения кодовой таблицы сообщения:

C0,1 ^ 0 C0,0 ^ f0 for j e 0..n -1

Ci+1,0 ^ fj

sov ^ 0 for k e 0..i

if Ck,0 = fj

Ck,1 ^ Ck,1 +1 i ^ i -1

sov ^ sov +1 i ^ i +1 if sov < 1

data := str 2 vec("'Welcome")

T(P(data),data) =

f 101 2 0.286 0 0 286

109 1 0.143 0.286 0 429

111 1 0.143 0.429 0 .571

99 1 0.143 0.571 0 714

108 1 0.143 0.714 0. 857

V 87 1 0.143 0.857 1

В первом столбце приведены ASC II коды символов сообщения Welcome.

2.2 Алгоритм кодирования

Ci,0 ^ fj

Cy ^ 1 C

Ниже представлена программа для системы MathCAD, моделирующая арифметический алгоритм кодирования. Справа представлен короткий комментарий.

2012/2

Proceedings of Petersburg Transport University

Информатика и технологии информатики

137

data := str2vec("badefac")

' 97 3 0.3 0 0 3 N

98 2 0.2 0.3 0 5

99 2 0.2 0.5 0. 7

100 1 0.1 0.7 0 8

101 1 0.1 0.8 0 9

v102 1 0.1 0.9 1 J

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

ввод текстовой строки сообщения

ввод матрицы кодирования с вероятностями

Текст программы kod с аргументами:

f — сообщение, X- матрица кодирования

kod(f, X)

n ^ length(f) m ^ rows(X)

a0 ^ (D0,3 ^ 0) b0 ^ (D0,4 ^1)

for i £ 1..n

считываем длину сообщения и число сток в кодовой таблице

цикл по длине сообщения

цикл по строкам кодовой таблицы

for j £ 0..m -1

k ^ j if fi-1 = Xj,0 ai ^ ai-1 + Xk,3 ' (bi-1 - ai-1) bi ^ ai-1 + Xk,4 ' (bi-1 - ai-1) Di,0 ^ Xk,0 Di,1 ^ Xk,1 Di,2 ^ Xk,2 Di,3 ^ ai Di,4 ^ bi

D

определяем номер строки считанного символа в кодовой таблице

находим левую границу правую границу

выводим код текущего символа сообщения

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

запоминаем правую границу выводим код

Результатом работы программы является кодовая таблица:

kod(data, A) =

0 0 0 0

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

98 0.2 0.3 0.5

97 0.3 0.3 0.36

100 0.1 0.342 0.348

101 0.1 0.3468 0.3474

102 0.1 0.34734 0.3474

97 0.3 0.34734 0.347358

99 0.2 0.347349 0.3473526

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

2.3 Алгоритм декодирования

Ниже представлена программа для системы MathCAD, моделирующая арифметический алгоритм декодирования. Справа, как и для кодера, представлен короткий комментарий:

ISSN 1815-588Х. Известия ПГУПС

2012/2

138

Информатика и технологии информатики

decod(n, s, X)

m ^ rows(X) for i e 0..n -1

аргументы: n - длина сообщения s - кодовая дробь, Х - кодовая таблица

for j e 0..m -1 k ^ j if Xj,3 < s < Xj,4

s - X

s ^

k,3

D-

X

X

k,2

k,0

D

цикл по длине сообщения

цикл по строкам таблицы кодирования

найден текущий символ

устраняем влияние текущего символа

запоминаем расшифрованный символ

( 98 ^

decod(7,0.347349, A)

97

100

101

102

97

результат вызова декодера приведены ASCII коды символов передаваемого сообщения

выдача расшифрованной строки

3 Сравнение арифметического кода и кода Хаффмена

Двоичным представлением числа 347349 является 101 0100 1100 1101 0101; таким образом, на передачу сообщения badefac (7 символов) арифметическому кодеку требуется 19 битов, т. е. 2,71 бит/символ.

Если при заданной кодовой таблице то же сообщение закодировать по методу Хаффмена, мы получим кодовое дерево (рис. 3).

Результат кодирования: 01 00 110 1110 1111 00 10 - те же 19 бит и та же эффективность

0i-------------------11

0 0 1

1 0 0

0,3 0,2 0,2 0,1 0,1 0,1

a b c d e f

00 01 10 110 1110 1111

Рис. 3. Кодовое дерево по методу Хаффмена

2,71 бит/символ. Итак, при коротких сообщениях без повторов символов арифметический код не уступает коду Хаффмена.

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

Заключение

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

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

2012/2

Proceedings of Petersburg Transport University

Информатика и технологии информатики

139

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

Библиографический список

1. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео / Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. - М. : Диалог-МИФИ, 2003. - 384 с. - ISBN 5-86404-170-х.

2. Anoverview of the basic principles of the Q-coder adaptive binary arithmetic coder / W. B. Penne-baker, J. L. Mitchell, G. G. Langdon, R. B. Arps // IBM Journal of research and development. - November 1988. - Vol. 32, No. 6. - PP. 771-726.

3. A method for the construction of minimum redundancy codes / D.A. Huffman // Proc. of IRE. -1952. - Vol. 40. - PP. 1098-1101.

ISSN 1815-588Х. Известия ПГУПС

2012/2

i Надоели баннеры? Вы всегда можете отключить рекламу.