- •Методические указания
- •Содержание
- •Общие методологические указания к выполнению лабораторного практикума
- •1 Цели и задачи лабораторного практикума
- •2 Порядок выполнения лабораторных работ
- •Структурная схема передачи информации
- •Основные понятия и определения
- •Количество информации в дискретном сообщении. Энтропия
- •Параметры и характеристики кодов
- •Избыточность дискретного источника сообщений
- •Классификация кодов
- •Не избыточные коды
- •2.6.1 Простые равномерные коды
- •Описание программного обеспечения для выполнения лабораторных работ
- •Программа исследований
- •Содержание отчёта
- •Контрольные вопросы
- •Лабораторная работа № 2 Эффективное кодирование. Метод Шеннона-Фано
- •1 Цель работы
- •2 Основные теоретические положения
- •2.1 Эффективное кодирование
- •2.1.1 Общие положения
- •Коды Шеннона - Фано.
- •2.1.3 Коды Хаффмана.
- •Программа исследований
- •Содержание отчёта
- •Контрольные вопросы
- •1 Цель работы
- •2 Основные теоретические положения
- •2.2 Основы матричного представления кодов
- •2.3 Код с проверкой на четность
- •2.4 Код с простым повторением
- •3 Программа исследований
- •4 Содержание отчета
- •5 Контрольные вопросы
- •2.2 Коды Хэмминга
- •3 Программа исследований
- •4 Содержание отчета
- •5 Контрольные вопросы
- •2.2 Матричное представление циклических кодов
- •2.3 Выбор образующего полинома
- •2.4 Обнаружение и исправление ошибок
- •2.5 Коды Файра
- •3 Программа исследований
- •4 Содержание отчета
- •5 Конрольные вопросы
- •Лабораторная работа №6 Динамическое кодирование неравномерными кодами. Динамические коды Хаффмена
- •1 Цель работы
- •2 Основные теоретические положения
- •2.1 Динамическое кодирование Хаффмена
- •2.2 Алгоритм динамического кодирования методом fgk
- •3 Программа исследований
- •4 Содержание отчета
- •5 Контрольные вопросы
2.2 Матричное представление циклических кодов
Комбинации циклического кода можно записать в виде производящей матрицы, содержащей k строк и n столбцов.
Для формирования строк производящей матрицы по первому способу образования кода берут те комбинации Q(x), которые содержат единицу в одном разряде – Qi(x).
Затем находят остатки:
Q
Ri(x)
=
P(x)
Соответствующая строка матрицы записывается в виде: Q(x) xr + Ri(x).
Матрица при этом разбивается на две подматрицы: Gn,k = | EkT, Cr,k|.
Производящая матрица дает возможность получить первые k комбинаций кода. Остальные 2k–k–1 комбинации получаются суммированием по модулю 2 строк производящей матрицы во всех возможных сочетаниях.
Пример 4:
Р(х) = х3 + х + 1; Р(1,0) = 1011; n = 7; k = 4.
Тогда:
Qi(x) : Q1 = 0001; Q2 = 0010; Q3 = 0100; Q4 = 1000.
Q
= ;
P(x)
1011
Разделив, получим R1(x) 011.
Первая строка матрицы – 0001011.
П
роделав
эту операцию 4 раза, получим:
0001 | 011
0
G7,4
=
0100 | 111
1000 | 101
EkT
Ck,r
2.3 Выбор образующего полинома
Важнейшей задачей построения циклических кодов является выбор образующего полинома, удовлетворяющего данным условиям. Если код предназначен для исправления независимых ошибок, таким условием является обеспечение заданного кодового расстояния d, если же код должен исправлять пакеты ошибок – длина b исправляемого или обнаруживаемого пакета ошибок.
Образующий полином Р(х) степени r должен входить в качестве сомножителя в разложение двучлена
xn + 1 = x2m-1 + 1 (51)
Доказано, что для любых целых положительных m и tи существует циклический код значности
n = 2m – 1 (52)
с кодовым расстоянием
dmin 2tи + 1 (53)
При этом число проверочных символов r = n-k не превышает величины m tи, т.е. r m tи. Такой код исправляет ошибки кратности tи и менее и обнаруживает ошибки кратности 2tи и менее. Кроме того, код обнаруживает все пакеты ошибок, длина которых равна или меньше r. Соотношения (52) – (54) можно использовать для выбора Р(х). Из таблиц неприводимых полиномов нужной степени в качестве образующего выбирают тот, который дает наибольшее число остатков. При степени многочлена m= n-k он может дать 2n-k – 1 ненулевых остатков (нулевой остаток характеризует безошибочную передачу).
В общем случае при построении циклического (n,k) кода с исправлением в кодовой комбинации tи ошибок в качестве образующего полинома степени r выбирается произведение из tи сомножителей старших степеней, входящих в разложение двучлена вида x2m-1 + 1.
2.4 Обнаружение и исправление ошибок
Для обнаружения и исправления ошибочного разряда производят следующие операции.
1 Принятую комбинацию делят на образующий полином.
2 Подсчитывают количество единиц в остатке (вес остатка). Если tи, принятую комбинацию складывают по модулю 2 с полученным остатком. Сумма дает исправленную комбинацию. Если tи, то
3 Производят циклический сдвиг влево на один разряд. Комбинацию, полученную после сдвига, делят на Р(х). Если в результате повторного деления tи, делимое суммируют с остатком, затем
4 Производят циклический сдвиг вправо на один разряд комбинации, полученной в результате суммирования последнего делимого с последним остатком. Полученная комбинация уже не содержит ошибок. Если после первого циклического сдвига и последующего деления вес остатка tи, то
5 Повторяют операцию п.3 до тех пор, пока не будет достигнуто tи. В этом случае комбинацию, полученную в результате последнего циклического сдвига, суммируют с остатком от деления этой комбинации на образующий многочлен, а затем
6 Производят циклический сдвиг вправо на столько разрядов, на сколько сдвинута суммируемая с последним остатком комбинация относительно принятой комбинации. В результате получается исправленная комбинация.
Пример 5:
При передаче комбинации 1001110 циклического кода, исправляющего одиночные ошибки (tи = 1), полученного с помощью образующего полинома Р(х) = х3 + х + 1, произошла ошибка в четвертом разряде. Принятая комбинация имеет вид 1000110. Процесс исправления ошибки следующий.
Делим принятую комбинацию на Р(х). Р(х) = 1011.
1
000110
1011
1
011
1111
1011
1000
1011
11
Вес остатка = 2; >tи.
Производим циклический сдвиг на один разряд влево и деление на Р(х).
0
001101
1011
1011
110
Повторяем п.3, пока tи.
а
)
0011010 1011 б) 0110100 1011 в) 1101000 1011
1011
1011 1011
1100
1100 1100
1011
1011 1011
111
1110 1110
1011 1011
101 1010
1011
1
>tи >tи =tи
Складываем по модулю 2 последнее делимое с остатком.
1
1
1101001
Производим циклический сдвиг комбинации, полученной в результате суммирования последнего делимого с последним остатком вправо на 4 разряда:
1110100 0111010 0011101 1001110.
Последняя комбинация безошибочная.
