
- •Д.Е. Турчин
- •Лабораторный практикум
- •Кемерово 2013
- •Описание лабораторного практикума
- •1.2.2. Понятие кода и кодирования. Моделирование дискретных источников сообщений без памяти
- •1.3. Порядок выполнения работы
- •1.4. Контрольные вопросы
- •Марковские источники сообщений.
- •Эффективность, избыточность и производительность источника сообщений.
- •Кодовые деревья и префиксные коды.
- •2.3. Порядок выполнения работы
- •2.4. Контрольные вопросы
- •3.2.2. Пропускная способность дискретного канала связи. Кодеры и декодеры канала связи. Код с битом четности Пропускная способность дискретного канала связи.
- •Кодер и декодер канала связи. Код с битом четности.
- •3.3. Порядок выполнения работы
- •3.4. Контрольные вопросы
- •Метод Шеннона-Фано.
- •4.2.2. Методы кодирования источников сообщений по Хаффману Кодирование дискретного источника сообщений без памяти по Хаффману.
- •4.3. Порядок выполнения работы
- •4.4. Контрольные вопросы
- •Декодирование арифметического кода.
- •5.2.2. Метод адаптивного арифметического кодирования и его программная реализация
- •5.3. Порядок выполнения работы
- •5.4. Контрольные вопросы
- •6. Сжатие информации методами Лемпела-Зива
- •6.1. Цель работы
- •6.2. Основные теоретические сведения
- •Код Хэмминга.
- •7.2.2. Расширенный код Хэмминга. Программная реализация кода Хэмминга Расширенный код Хэмминга.
- •7.3. Порядок выполнения работы
- •7.5. Контрольные вопросы
- •8. Построение и декодирование линейных блоковых кодов
- •8.1. Цель работы
- •8.2. Основные теоретические сведения
- •8.3. Порядок выполнения работы
- •8.4. Контрольные вопросы
- •Приложение п.1. Понятие события и его вероятности. Теоремы сложения и умножения вероятностей Понятие события и вероятности события. Непосредственный подсчет вероятностей.
- •Теорема сложения вероятностей.
- •Теорема умножения вероятностей.
- •П.2. Данные для расчета энтропии и количества информации
- •П.3. Матрицы и операции над ними п.4. Многочлены и операции над ними
- •П.5. Вопросы к экзамену
4.4. Контрольные вопросы
В чем заключается сущность эффективного кодирования?
Каковы основные задачи эффективного кодирования?
Как определяется средняя длина кодового слова?
Чему равна нижняя граница эффективного кодирования?
Как определяется эффективность и избыточность кода?
Как осуществляется кодирование источника по методу Шеннона-Фано?
В каком случае метод Шеннона-Фано гарантированно обеспечивает получение эффективного кода?
С помощью какой операции в методе Хаффмана обеспечивается получение вспомогательных символов?
Как получают кодовые слова по методу Хаффмана?
5. Сжатие информации методом арифметического кодирования
5.1. Цель работы
Цель работы – приобрести умение сжимать информацию с помощью метода арифметического кодирования, а также умение декодировать арифметический код.
Работа рассчитана на 4 часа.
5.2. Основные теоретические сведения
5.2.1. Описание метода арифметического кодирования. Декодирование арифметического кода
Описание метода арифметического кодирования.
Арифметическое кодирование представляет собой метод сжатия информации, в котором кодируемая последовательность символов представляется в виде дробного числа x, принимающего значения из интервала 0 < x < 1.
Пусть задан дискретный источник сообщений [S, p(si)] с алфавитом S={s1, … , sm} и распределением вероятностей p(si). На выходе источника задана последовательность символов
;
где i – порядковый номер символа в алфавите; k – порядковый номер символа в последовательности.
Для
заданной последовательности
требуется
получить кодовое слово:
;
где xj = 0 или 1.
Определим величины, называемые кумулятивными вероятностями символов si:
q(s1)
= 0; q(s2)
= p(s1);
…
.
В рекурсивной форме данные вероятности можно записать следующим образом:
q(si) = q(si–1) + p(si–1). (5.Х)
Определим величины Fk и Gk, представляющие собой нижнюю границу и длину интервала вероятностей на шаге k:
Fk = Fk – 1 + q(si)∙Gk – 1; (5.Х)
Gk = p(si)∙Gk – 1. (5.Х)
При k=0 (начальный шаг алгоритма) принимают F=0, G=1.
Искомое кодовое
слово
определяется как L
знаков после запятой в двоичной записи
числа FM
+ GM/2,
где FM
GM
– нижняя
граница
интервала вероятностей и его длина,
соответствующие последнему (M-му)
символу последовательности:
bin[FM
+ GM/2]
=
0,
→
(5.Х)
Таким образом, метод арифметического кодирования заключается в последовательном нахождении величин q(si), Fk, Gk, для i = 2, 3, … , m и k = 1, 2, … , M, пока не будут определены значения FM и GM. На основе последних значений FM и GM определяется искомое кодовое слово.
Длина L кодового слова , обеспечивающая однозначное декодирование последовательности символов определяется следующим образом:
.
где – округление числа, стоящего в скобках, до целого в большую сторону.
Для пояснения метода арифметического кодирования можно прибегнуть к его графической интерпретации. В этом случае интервал [0, 1) вероятностей появления символов рассматривается в виде отрезка длиной 1. При этом символам на данном отрезке будут соответствовать непересекающиеся полуинтервалы длинами, равными вероятностям появления символов (рис 5.1). Кумулятивные вероятности соответствуют началам этих полуинтервалов. Эти точки идентифицируют сообщения источника.
Рис. 5.1. Графическая интерпретация арифметического кодирования
На каждом шаге алгоритма производится пересчет границ всего отрезка, в котором будет расположено число, соответствующее кодовому слову. Число Fk в этом случае является начальной точкой отрезка на шаге k, а число Gk является длиной данного отрезка.
❒ Пример 5.1. Арифметическое кодирование заданной последовательности символов.
Пусть
задан дискретный источник сообщений с
алфавитом S={s1,
s2,
s3}
и распределением вероятностей p(s1)=0,1,
p(s2)=0,6,
p(s3)=0,3.
Произведем арифметическое кодирование
последовательности
длиной M=5.
Процесс арифметического кодирования
последовательности
представлен в таблице 5.1.
Длина кодового слова будет
,
то есть после запятой в кодовом слове
должно быть не меньше 9 знаков.
Таблица 5.1.
Арифметическое кодирование последовательности
Шаг k |
si |
|
p(si) |
q(si) |
F( ) |
G( ) |
0 |
– |
– |
– |
– |
0 |
1 |
1 |
s2 |
s2 |
0,6 |
0,1 |
0,1 |
0,6 |
2 |
s3 |
s2s3 |
0,3 |
0,7 |
0,52 |
0,18 |
3 |
s2 |
s2s3s2 |
0,6 |
0,1 |
0,538 |
0,108 |
4 |
s1 |
s2s3s2s1 |
0,1 |
0 |
0,538 |
0,0108 |
5 |
s2 |
s2s3s2s1s2 |
0,6 |
0,1 |
0,53908 |
0,00648 |
Отсюда кодовое слово запишется следующим образом:
x = (0,53908 + 0,00648/2)10 = (0,54232)10 =
= 0,1000101012 → = 100010101.
Графическая интерпретация арифметического кодирования показана на рис. 5.2. ❒