- •Код Шеннона-Фано
- •Код Хэмминга
- •Решение поставленной задачи Задача 3.1.4
- •Задача 3.1.14
- •Задача 3.2.4
- •Задача 3.2.14
- •Список использованных источников
- •Контрольные вопросы:
- •1. Что понимают под кодированием?
- •2. Какие коды называются равномерными?
- •3. Сформулировать основную теорему о кодировании.
- •4. Назначение и цели эффективного кодирования
- •5. Поясните, за счёт чего обеспечивается сжатие информации при применении эффективного кодирования
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра информационной безопасности
Лабораторная РАБОТА №3
по дисциплине «Сети и системы передачи данных»
Тема: Кодирование источника и кодирование канала
Студент _________________
Преподаватель _________________ Абазина Е.С.
Санкт-Петербург
2026
Содержание
Y
Формулировка определений и их свойств 3
Код Хаффмана 3
Код Шеннона-Фано 4
Код Хэмминга 5
Задача 3.1.4 7
Задача 3.1.14 10
Задача 3.2.4 13
Задача 3.2.14 13
Список использованных источников 14
Теоретическое введение
Цель лабораторной работы:
Ознакомиться с основными понятиями теории информации и кодирования, подходам к сокращению избыточности и к повышению помехоустойчивости за счет кодирования.
Изучить метод кодирования Хаффмана и Шеннона-Фано
Изучить метод кодирования Хэмминга
Формулировка определений и их свойств
Код Хаффмана
Построение кода Хаффмана производится при помощи таблицы распределения вероятностей повторения каждого символа:
Рисунок 1. Схема построения кода Хаффмана
Где
означает количество повторений или
вероятность повторения символа
Декодирование происходит следующим образом:
На вход выдается сообщение и таблица кодов.
Подобные закодированные сообщения могут декодироваться благодаря свойству префиксности эффективных кодов: никакая из коротких комбинаций не является началом другой, более длинной. Это свойство позволяет декодировать ОДНОЗНАЧНО.
В сообщении слева направо выделяется по одному двоичному символу и делается попытка декодирования в соответствии с таблицей кодов. Если попытка успешна, двоичный символ (или символы) исключается из исходной цепочки и заменяется соответствующим исходным символом. Если попытка не удается, во входной цепочке выделяется следующий двоичный символ и уже с двумя двоичными символами делается попытка их декодирования по таблице кодов. Если попытка и тогда неудачна, выделяют следующий третий и т.д
Код Шеннона-Фано
Код Шеннона – Фано строится с помощью дерева. Всё множество кодируемых элементов соответствует корню дерева (вершине первого уровня). Оно разбивается на два подмножества с примерно одинаковыми суммарными вероятностями. Эти подмножества соответствуют двум вершинам второго уровня, которые соединяются с корнем. Далее каждое из этих подмножеств разбивается на два подмножества с примерно одинаковыми суммарными вероятностями. Им соответствуют вершины третьего уровня. Если подмножество содержит единственный элемент, то ему соответствует концевая вершина кодового дерева; такое подмножество разбиению не подлежит. Подобным образом поступаем до тех пор, пока не получим все концевые вершины. Ветви кодового дерева размечаем символами 1 и 0, как в случае кода Хаффмана.
Рисунок 2. Дерево Шеннона-Фано
Ответ: A – 11, B – 101, C – 100, D – 00, E – 011, F – 010
Алгоритм декодирования аналогичен тому, что был представлен для алгоритма кодирования Хаффмана.
Код Хэмминга
Код Хэмминга — наиболее известные и, вероятно, первые из самоконтролирующихся и самокорректирующихся кодов. Построены они применительно к двоичной системе счисления.
Другими словами, это алгоритм, который позволяет закодировать какое-либо информационное сообщение определённым образом и после передачи (например по сети) определить появилась ли какая-то ошибка в этом сообщении (к примеру из-за помех) и, при возможности, восстановить это сообщение. Сегодня, я опишу самый простой алгоритм Хемминга, который может исправлять лишь одну ошибку.
Также стоит отметить, что существуют более совершенные модификации данного алгоритма, которые позволяют обнаруживать (и если возможно исправлять) большее количество ошибок.
Сразу стоит сказать, что Код Хэмминга состоит из двух частей. Первая часть кодирует исходное сообщение, вставляя в него в определённых местах контрольные биты (вычисленные особым образом). Вторая часть получает входящее сообщение и заново вычисляет контрольные биты (по тому же алгоритму, что и первая часть). Если все вновь вычисленные контрольные биты совпадают с полученными, то сообщение получено без ошибок. В противном случае, выводится сообщение об ошибке и при возможности ошибка исправляется.
Рисунок 3. Построение кода Хэмминга
Теперь необходимо вычислить значение каждого контрольного бита. Значение каждого контрольного бита зависит от значений информационных бит (как неожиданно), но не от всех, а только от тех, которые этот контрольных бит контролирует. Для того, чтобы понять, за какие биты отвечает каждых контрольный бит необходимо понять очень простую закономерность: контрольный бит с номером N контролирует все последующие N бит через каждые N бит, начиная с позиции N.
Рисунок 4. Формирование контрольных битов
Решение поставленной задачи Задача 3.1.4
В
данной задаче
– это энтропия, средняя длина на один
символ и относительная избыточность
соответственно.
Построение кодов для отдельных букв:
Рисунок 5. Побуквенные коды
-
Буква
Код
A
1
B
01
C
00
Построение кодов для пар букв:
Рисунок 6. Коды для пар букв
-
Сочетание
Код
AA
1
AB
011
AC
0011
BA
010
BB
0001
BC
00001
CA
0010
CB
000001
CC
000000
Вывод: Кодирование двухбуквенных сочетаний значительно эффективнее: избыточность менее 1%, тогда как при побуквенном кодировании избыточность превышает 11%. Это объясняется тем, что при укрупнении алфавита появляется возможность лучше согласовать длины кодов с вероятностями символов.
