- •Введение
- •Элементы теории чисел
- •Модулярная арифметика
- •Алгоритм Евклида для нахождения наибольшего общего делителя
- •Вычисление обратных величин
- •Основные способы нахождения обратных величин
- •Расширенный алгоритм Евклида
- •Китайская теорема об остатках
- •Квадратичные вычеты
- •Вычисления в конечных полях
- •Свойства многочленов в двоичном поле gf(2)
- •Достоинства вычислений в поле Галуа gf(2 n)
- •Кодирование
- •Оптимальное кодирование
- •Обнаружение и исправление ошибок
- •Общие понятия
- •Линейные групповые коды
- •Код Хэмминга
- •Циклические коды
- •Построение и декодирование конкретных циклических кодов
- •Циклические коды, исправляющие две и большее количество ошибок, d0 5
- •Сжатие информации
- •Исключение повторения строк в последующих строках
- •Алгоритм lzw
- •Задания для самостоятельного выполнения
- •Расчетно-графическая работа №1
- •Расчетно-графическая работа №2
- •Список рекомендуемой литературы
- •Рекомендованная литература
-
Код Хэмминга
Систематические коды представляют собой такие коды, в которых информационные и корректирующие разряды расположены по строго определенной системе и всегда занимают строго определенные места в кодовых комбинациях. Систематические коды являются равномерными, т.е. все комбинации кода с заданными корректирующими способностями имеют одинаковую длину. Групповые коды также являются систематическими, но не все систематические коды могут быть отнесены к групповым.
Код Хэмминга является типичным примером систематического кода. Однако при его построении к матрицам обычно не прибегают. Для вычисления основных параметров кода задается либо количество информационных символов, либо количество информационных комбинаций N = 2k. При помощи формул
,
вычисляются k и . Соотношения между n, k и для кода Хэмминга представлены в таблице
Таблица 3.3.1 – Соотношения между n, k, в коде Хэмминга
n |
k |
|
n |
k |
|
1 2 3 4 5 6 7 8 |
0 0 1 1 2 3 4 4 |
1 2 2 3 3 3 3 4 |
9 10 11 12 13 14 15 16 |
5 6 7 8 9 10 11 11 |
4 4 4 4 4 4 4 5 |
Зная основные параметры корректирующего кода, определяют: какие позиции кода будут информационными, а какие проверочными. Как показала практика, номера контрольных символов удобно выбирать по закону 2i, где i = 0, 1, 2 и т.д. - натуральный ряд чисел. Номера контрольных символов в этом случае будут соответственно: 1, 2, 4, 8, 16, 32 и т.д.
Затем определяют значения проверочных разрядов (0 или 1), руководствуясь следующим правилом: сумма единиц на проверочных позициях должна быть четной. Если эта сумма четна, то значение контрольного разряда - 0, в противном случае - 1.
Проверочные позиции выбираются следующим образом: составляется таблица для ряда натуральных чисел в двоичном коде. Число строк таблицы
n = k + .
Первой строке соответствует проверочный символ a1 второй - a2 и т.д., как показано в таблице.
Таблица 3.3.2 – Ряд натуральных чисел в двоичном коде
n |
Двоичный код |
Провероч-ные коэффициенты |
n |
Двоичный Код |
провероч-ные коэффициенты |
1 2 3 4 5 6 |
0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 |
а1 a2 a3 a4 a5 a6 |
7 8 9 10 11 |
0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 |
a7 a8 a9 a10 a11 |
Затем выявляют проверочные позиции, выписывая коэффициенты по следующему принципу:
в первую проверку входят коэффициенты, которые содержат в младшем разряде 1, т.е. a1, a3,, a5 , a7 , a9 ,a11 и т.д.;
во вторую - коэффициенты, содержащие 1 во втором разряде, т.е. и т.д. a2, a3,, a6 , a7 , a10 ,a11 и т.д.;
в третью проверку - коэффициенты, которые содержат 1 в третьем разряде, и т.д.
Номера проверочных коэффициентов соответствуют номерам проверочных позиций, что позволяет составить общую таблицу проверок.
Таблица 3.3.3 – Таблица проверок
№ проверки |
Проверочные позиции |
№ провероч-ного разряда |
1 2 3 4 |
1, 3, 5, 7, 9, 11 ... 2, 3, 6, 7, 10, 11, 14, 15, 18,19, 22, 23, 26, 27, 30, 31 ... 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 ... 8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31, 40, 41, 42, 43, 44, 45, 46 ... |
1 2 3 4 |
Старшинство разрядов считается слева направо, а при проверке сверху вниз. Порядок проверок показывает также порядок следования разрядов в полученном двоичном коде.
Если в принятом коде есть ошибка, то результаты проверок по контрольным позициям образуют двоичное число, указывающее номер ошибочной позиции. Исправляют ошибку, изменяя символ ошибочной позиции на противоположный.
Для исправления одиночной и обнаружения двойной ошибки, кроме проверок по контрольным позициям, следует проводить еще одну проверку на четность для каждого кода. Чтобы осуществить такую проверку, следует к каждому коду в конце кодовой комбинации добавить контрольный символ таким образом, чтобы сумма единиц в полученной комбинации была всегда четной. Тогда в случае одной ошибки проверки по позициям укажут номер ошибочной позиции, а проверка на четность укажет наличие ошибки. Если проверки позиций укажут на наличие ошибки, а проверка на четность не фиксирует ошибки, значит в коде две ошибки.
Пример.
Построить код Хэмминга для информационной комбинации 0101. Показать процесс обнаружения ошибки.
Решение.
Количество информационных разрядов k = 4. Находим значения общей длины кодовой комбинации и число контрольных символов: = 3 и n = 7. Так как общее количество символов кода n = 7, то контрольные коэффициенты займут три позиции: 1, 2 и 4.
Корректирующий код без значений контрольных коэффициентов будет иметь вид:
b1 b2 0 b3 1 0 1.
Пользуясь таблицей проверочных позиций, определяем значения контрольных коэффициентов.
Первая проверка: сумма П1 П3 П5 П7 должна быть четной, а сумма b1 0 1 1 будет четной при b1 = 0.
Вторая проверка: сумма П2 П3 П6 П7 должна быть четной, а сумма b2 0 0 1 будет четной при b2 = 1.
Третья проверка: сумма П4 П5 П6 П7 должна быть четной, а сумма b3 1 0 1 будет четной при b3 = 0.
Окончательно корректирующий код принимает вид:
0 1 0 0 1 0 1.
Предположим, в результате искажений в канале связи вместо 0100101 было принято 0100111. Для обнаружения ошибки производим контроль на четность, аналогичные проверкам при выборе контрольных коэффициентов.
Первая проверка: сумма П1 П3 П5 П7 = 0 0 1 1 четна. В младший разряд номера ошибочной позиции записываем 0.
Вторая проверка: сумма П2 П3 П6 П7 = 1 0 1 1 нечетна. Во второй разряд номера ошибочной позиции записываем 1.
Третья проверка: сумма П4 П5 П6 П7 = 0 1 1 1 нечетна. В третий разряд номера ошибочной позиции записываем 1.
Номер ошибочной позиции 1102 = 610. Следовательно, символ шестой позиции следует изменить на обратный.