- •Д.Е. Турчин
- •Лабораторный практикум
- •Кемерово 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. Вопросы к экзамену
Декодирование арифметического кода.
Декодирование полученного арифметического кода заключается в выполнении следующих действий.
На нулевом шаге (k=0) принимаем q(sM+1) = 1, Fk = 0, Gk = 1. Последовательно (от i = 1 до m) для символов si на каждом шаге производим проверку выполнения условия:
Fk +q(si)∙Gk < x.
Если для символа si данное условие не выполнятся, то в качестве символа декодируемой последовательности на данном шаге принимаем si–1. В обратном случае (условие выполняется для всех i) принимаем символ sm.
Для найденного символа определяют величины Fk и Gk по тем же формулам, что и при кодировании.
Алгоритм
продолжают до тех пор, пока не будет
найден последний символ (k
= M)
декодируемой последовательности
.
Рис. 5.2. Графическая интерпретация арифметического кодирования последовательности
❒ Пример 5.2. Декодирование арифметического кода.
Требуется выполнить декодирование арифметического кода = 100010101, полученного в примере 5.1. Процесс декодирования представлен в таблице 5.2.
Таблица 5.2.
Декодирование арифметического кода = 100010101
Шаг k |
Fk |
Gk |
Гипо- теза si |
q(si) |
Проверка Fk+qi∙Gk< x |
Реше- ние si |
p(si) |
0 |
=
100010101
→
|
||||||
1 |
0 |
1 |
s1 |
0 |
0 < x |
s2 |
0,6 |
s2 |
0,1 |
0,1 < x |
|||||
s3 |
0,7 |
0,7 > x |
|||||
2 |
0,1 |
0,6 |
s1 |
0 |
0,1 < x |
s3 |
0,3 |
s2 |
0,1 |
0,16 < x |
|||||
s3 |
0,7 |
0,52 < x |
|||||
3 |
0,52 |
0,18 |
s1 |
0 |
0,52 < x |
s2 |
0,6 |
s2 |
0,1 |
0,538 < x |
|||||
s3 |
0,7 |
0,646 > x |
|||||
4 |
0,538 |
0,108 |
s1 |
0 |
0,538 < x |
s1 |
0,1 |
s2 |
0,1 |
0,5488 > x |
|||||
5 |
0,538 |
0,0108 |
s1 |
0 |
0,538 < x |
s2 |
0,6 |
s2 |
0,1 |
0,53908 < x |
|||||
s3 |
0,7 |
0,5450 > x |
|||||
Отсюда последовательность символов, полученная путем декодирования арифметического кода, будет s2s3s2s1s2, что полностью совпадает с данными из примера 5.1. ❒
5.2.2. Метод адаптивного арифметического кодирования и его программная реализация
В случае адаптивного арифметического кодирования кодеру при поступлении на его вход очередного сообщения не доступна информация о сообщениях, которые появятся в будущем. Поэтому способ кодирования текущего сообщения зависит только от того, какими были предыдущие сообщения.
Вместо вероятностей появления символов s1, …, sm при адаптивном арифметическом кодировании используются оценочные вероятности:
;
где τM(si) – число появлений символа si в последовательности длины M; m – объем алфавита.
❒ Пример 5.3. Программная реализация метода арифметического кодирования.
Требуется разработать программную реализацию метода арифметического кодирования для последовательностей символов заданной длины M.
Добавим в класс DiskrIS (пример 2.1) метод GenPos(), который генерирует последовательности символов заданной длины. В этом методе отдельные символы будут добавляться в последовательность путем многократного вызова метода GenSimv(). Исходный код метода GenPos() показан на рис. 5.3.
Рис. 5.3. Метод GenPos() класса DiskrIS
Рис. 5.4. Методы ArifmKod() и DvoichKod() класса KoderIS
Рис. 5.4. Метод DekodArifm() класса DekodIS
Рис. 5.5. Метод DesChisl() класса DekodIS
Рис. 5.6. Метод Main() класса Program
Результат работы консольного приложения при числе последовательностей n = 12 и длине каждой последовательности M = 15 показан на рис. 5.7. ❒
Рис. 5.7. Результат работы консольного приложения (пример 5.3)
