Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1120
Добавлен:
02.02.2015
Размер:
2.13 Mб
Скачать

168

E(α) как ближайшее к нему кодовое слово, единственное,

которое может привести к появлению слова β в результате не более, чем k ошибок.

6.5. Коды Хемминга

Начнем с нескольких определений и конструкций общего характера.

Если функция кодирования блочного кода E:{0,1}n{0,1}m линейна, то код называется линейным. В дальнейшем мы рассматриваем только линейные коды. Назовем проверочным

такое линейное отображение S:{0,1}m{0,1}k, что S(β)=0 тогда и только тогда, когда β является кодовым словом. Для произвольного β {0,1}m вектор S(β) называется синдромом. Нулевой синдром имеют кодовые слова, и только они.

Предположим, что в зашумленном канале передаваемое кодовое слово E(α) исказилось, к нему добавился вектор ошибок δ, так что на выходе принято слово β=δ E(α). Тогда

S(β)=S(δ E(α))=S(δ) S(E(α))=S(δ).

Для того чтобы правильно декодировать передаваемое сообщение, нужно уметь определять вектор ошибок по его синдрому. Если вектор ошибок определен, то исправить их несложно: E(α)=δ β. Ограничившись случаем одиночных ошибок, можно привести сравнительно несложное построение кода, исправляющего ошибки.

{0,1}m

169

Вектор одиночной ошибки имеет всего одну ненулевую координату, то есть является одним из векторов канонического базиса пространства {0,1}m. Линейный код позволяет исправлять все одиночные ошибки тогда и только тогда, когда синдромы всех векторов из канонического базиса пространства

отличны от нуля и друг от друга. Поскольку пространство {0,1}k содержит всего 2k1 ненулевых векторов,

используя проверочное отображение S:{0,1}m{0,1}k, можно исправлять одиночные ошибки лишь в том случае, когда длины кодовых слов ограничены числом 2k1, то есть m2k1. Оказывается, что можно построить коды с исправлением ошибок, в которых m=2k1. В таких кодах их «исправляющие» возможности используются с максимальной эффективностью. К их числу относятся рассматриваемые ниже коды Хемминга.

Перейдем к описанию кода Хемминга. Пусть m=2k1. Среди m позиций кодового слова k позиций являются контрольными, а n = 2kk–1 – информационными. Матрица H (размерности k×(2k1)), задающая проверочное отображение, содержит в качестве столбцов все ненулевые векторы пространства {0,1}k. Порядок столбцов не важен, но технически удобнее считать, что в каждом столбце записан его номер в двоичном формате. Строки матрицы H определяют коэффициенты системы из k

однородных линейных уравнений c 2k1 неизвестными. Множество кодовых слов совпадает с множеством решений этой системы. Выражая последние k неизвестных через первые

170

2kk–1, мы получаем уравнения для вычисления контрольных битов. Вектор с нулевым синдромом является кодовым и его декодирование сводится просто к отбрасыванию контрольных битов. Если синдром отличен от нуля, он представляет собой двоичную запись номера позиции, в которой произошла ошибка. В этом случае при декодировании ошибка исправляется. Доля информационных позиций в коде Хемминга составляет

2k k 1

=1

k

 

 

 

 

2k 1

 

2k 1

 

 

и стремится к 1 с ростом k.

Пример. Рассмотрим случай k=3, m=7, n=4. Проверочное отображение S задается следующей матрицей:

 

0

0

0

1

1

1

1

 

0

1

1

0

0

1

 

H =

1 .

 

1

0

1

0

1

0

 

 

1

Столбцы матрицы представляют собой образы векторов канонического базиса пространства {0,1}7 относительно S. Для произвольного вектора β=(β1,β2,β3,β4,β5,β6,β7) синдром

S(β)=(σ1,σ2,σ3) определяется уравнениями

σ1=β4 β5 β6 β7;

σ2=β2 β3 β6 β7;

σ3=β1 β3 β5 β7.

171

Кодовое слово S(α)=(α1,α2,α3,α4,α5,α6,α7) должно удовлетворять системе уравнений

α4 α5 α6 α7=0; α2 α3 α6 α7=0; α1 α3 α5 α7=0.

Решив эту систему относительно α5, α6, α7, можно найти уравнения, задающие контрольные биты. Сложив первые два уравнения, получаем

α2 α3 α4 α5=0,

откуда

α5=α2 α3 α4.

Подставив выражение для α5 в третье уравнение системы, получаем

α7=α1 α2 α4.

Теперь подставляем выражение для α7 во второе уравнение системы и находим

α6=α1 α3 α4.