- •Помехоустойчивое кодирование в системах телекоммуникаций
- •Пояснительная записка
- •Лабораторная работа 1 Исследование эффективных кодов на примере кода Хаффмена
- •1. Цель работы:
- •2. Литература:
- •3. Подготовка к работе:
- •4. Основное оборудование:
- •5. Задание:
- •6. Порядок выполнения работы:
- •7. Содержание отчета:
- •8. Контрольные вопросы:
- •9. Методические указания:
- •9.2. Основы эффективного кодирования
- •9.3. Методы эффективного кодирования при известной статистике сообщений
- •9.4. Методы эффективного кодирования при неизвестной статистике сообщений
- •9.5. Метод Хаффмена
- •9.6 Описание лабораторной работы
- •Лабораторная работа 2 Исследование эффективности линейных блоковых кодов
- •6.2. Исследование системы передачи данных с двоичным симметричным каналом связи при использовании кода Хэмминга.
- •7. Содержание отчета:
- •8. Контрольные вопросы:
- •Лабораторная работа 3 Исследование эффективности циклических кодов
- •7. Содержание отчета:
- •8. Контрольные вопросы:
- •9. Методические указания:
- •8.2 Инструкция по пользованию практической части программы
- •8.3 Инструкция по использованию тестирующей части программы
- •Лабораторная работа 4 Исследование алгоритма Витерби
- •6.2 Экспериментальной части программы
- •6.3 Инструкция по использованию тестирующей части программы
- •9.2 Представление сверточного кода порождающими многочленами
- •9.3. Кодовое дерево сверточного кода и решетчатая диаграмма
- •9.4 Свободное расстояние. Спектр.
- •9.5 Катастрофические кодеры
- •9.6 Декодирование сверточных кодов по максимуму правдоподобия. Алгоритм Витерби
- •9.7 Поиск кратчайшего пути на графе по принципу динамического программирования
- •9.8 Алгоритм Витерби
- •Лабораторные работы 5,6 Исследование схем кодеров и декодеров с обнаружением ошибок
- •6. Порядок выполнения работы:
- •6.2. Исследование системы передачи данных с кодами рс при использование канала с Гауссовскими помехами.
- •7. Содержание отчета:
- •8. Контрольные вопросы:
- •Лабораторные работы 7,8 Исследование схем кодеров и декодеров с исправлением ошибок
- •6. Порядок выполнения работы:
- •7. Содержание отчета:
- •8. Контрольные вопросы:
9.5. Метод Хаффмена
Одним из часто используемых методов кодирования является так называемый метод Хаффмена. Данный метод кодирования, позволяющий значительно сжимать информацию и построенный на основе двоичных кодирующих деревьев был предложен Д. А. Хаффменом в 1952 году задолго до появления современного цифрового компьютера. Метод обладает высокой эффективностью, он и его многочисленные адаптивные версии лидируют среди методов, используемых в алгоритмах кодирования.
Пусть сообщения входного алфавита А = {а1, а2, …, аk} имеют соответственно вероятности их появления р1, р2, ..., рk.
Тогда алгоритм кодирования Хаффмена состоит в следующем.
-
Сообщения располагаются в столбец в порядке убывания вероятности их появления.
-
Два самых маловероятных сообщения ak-1, и аk объединяем в одно сообщение b, которое имеет вероятность, равную сумме вероятностей сообщений ak-1, аk, т. е. pk-1+pk. В результате получим сообщения a1, a2, …, ak-2, b, вероятности которых p1, p2, …, pk-2, (pk-1+pk). Полученные сообщения вновь располагаем в порядке убывания вероятностей.
-
Повторяем шаги 1 и 2 до тех пор, пока не получим единственное сообщение, вероятность которого равна 1.
-
Проводя линии, объединяющие сообщения и образующие последовательные подмножества, получаем дерево, в котором отдельные сообщения являются концевыми узлами. Соответствующие им кодовые комбинации можно определить, приписывая левым ветвям объединения символ «1», а правым - «0». Впрочем, понятия «левые» и «правые» ветви в данном случае относительны.
Так как в процессе кодирования сообщениям сопоставляются только кон- цевые узлы, полученный код (код Хаффмена) является префиксным и, следовательно, всегда однозначно декодируемым.
Построение кода Хаффмена для восьми сообщений, появляющихся с вероятностями 0.2; 0.2; 0.15; 0.13; 0.12; 0.1; 0.07; 0.03, иллюстрируется таблицей 8 и рисунком 5.
Таблица 8 - Кодирование методом Хаффмена
Сообщение |
Вероятность |
Вспомогательные столбцы |
||||||||
a1 |
0.20 |
0.20 |
0.20 |
0.25 |
0.35 |
0.40 |
0.60 |
1 |
||
a2 |
0.20 |
0.20 |
0.20 |
0.20 |
0.25 |
0.35 |
0.40 |
|
||
a3 |
0.15 |
0.15 |
0.20 |
0.20 |
0.20 |
0.25 |
|
|
||
a4 |
0.13 |
0.13 |
0.15 |
0.20 |
0.20 |
|
|
|
||
a5 |
0.12 |
0.12 |
0.13 |
0.15 |
|
|
|
|
||
a6 |
0.10 |
0.10 |
0.12 |
|
|
|
|
|
||
a7 |
0.07 |
0.10 |
|
|
|
|
|
|
||
a8 |
0.03 |
|
|
|
|
|
|
|
Из точки, соответствующей сумме всех вероятностей (в данном случае она равна 1), направляются две ветви. Ветви с большей вероятностью присваивается единица, с меньшей - нуль. Продолжая последовательно разветвлять дерево, доходим до вероятности каждого символа (Рисунок 3).
Рисунок
3 – Кодовое дерево кода Хаффмена
Из таблицы 9 видно, что полученный код является неравномерным, причем сообщению с максимальной вероятностью появления соответствует минимальная длина кодовой комбинации (2 бита), а сообщению с минимальной вероятностью - максимальная (4 бита).
Таблица 9 - Полученный код
|
Вероятность появления сообщения |
Структура кодовой комбинации |
Длительность кодовой комбинации |
a1 |
0.20 |
01 |
2 бита |
a2 |
0.20 |
111 |
3 бита |
a3 |
0.15 |
110 |
3 бита |
a4 |
0.13 |
101 |
3 бита |
a5 |
0.12 |
100 |
3 бита |
a6 |
0.10 |
000 |
3 бита |
a7 |
0.07 |
0011 |
4 бита |
a8 |
0.03 |
0010 |
4 бита |
Пусть переданная последовательность сообщений а1, а2, а3, а4, а8 отображается двоичной последовательностью
01 |
111 |
110 |
101 |
0010… |
(11) |
Рассмотрим влияние одиночной ошибки во втором разряде принятой кодовой последовательности на результат декодирования. При этом получим
00 |
111 |
101 |
101 |
0010... |
(12) |
Полученная последовательность расшифровывается следующим образом
0011 |
111 |
01 |
01 |
0010 |
a7, a2, a1, a1, a8 |
(13) |
Из (12) видно, что искажение даже одного двоичного элемента (01) может привести к появлению ошибок в нескольких сообщениях (треку ошибок). Это является существенным недостатком рассмотренного метода кодирования.
Среднее число двоичных символов l на одно сообщение алфавита объемом К, для неравномерных двоичных кодов, определяется выражением
(14)
Эффективность неравномерных кодов оценивается следующими параметрами:
1) коэффициентом статистического сжатия, который характеризует уменьшение числа двоичных символов на знак при применении методов эффективного кодирования по сравнению с применением равномерного кода:
(15)
где lp.k - средняя длина кодовой комбинации при равномерном кодировании;
2) коэффициентом относительной эффективности, который показывает степень близости средней длины кодовой комбинации к теоретически возможному пределу Н(А):
(16)