Код
Хэмминга, являющийся групповым (n,k)
кодом, с минимальным расстоянием d=3
позволяет обнаруживать и исправлять
однократные ошибки. Для построения кода
Хэмминга используется матрица H.
, где
Ak-
транспонированная подматрица, En-k
-
единичная подматрица порядка n-k.
Если
Х - исходная последовательность, то
произведение Х·Н=0. Пусть E-
вектор ошибок. Тогда
(Х+Е)·Н = Х·Н+Е·Н = 0+Е·Н=E·H
- синдром или корректор, который позволяет
обнаружить и исправить ошибки. Контрольные
символы
e1
,e2
,...,er
образуются из информационных символов,
путем линейной комбинации
, где
аj={0,1}
-
коэффициенты, взятые из подматрицы A
матрицы H.
Рассмотрим
Построение кода Хэмминга для k=4
символам. Число контрольных символов r=n-k
можно определить по неравенству Хэмминга
для
однократной ошибки. Но так, как нам известно,
только исходное число символов k,
то проще вычислить по эмпирической формуле
,
(5.2)
где [.] - означает округление до большего ближайшего целого значения. Вычислим для k=4 . Получим код (n,k)=(7,4); n=7; k=4; r=n-k=3; d=3. Построим матрицу H.
Контрольные
символы ej
определим
по формуле
. Например,
.
Для простоты оставляем только
слагаемые с единичными коэффициентами. В
результате получим систему линейных
уравнений, с помощью которых вычисляются
контрольные разряды. Каждый контрольный
разряд является как бы дополнением для
определенных информационных разрядов для
проверки на четность.
При
декодировании вычисляем корректор K=k4k2k1
Если
корректор равен нулю, следовательно, ошибок
нет. Если корректор не равен нулю, то
местоположение вектор-столбца
матрицы H,
совпадающего с вычисленным корректором,
указывает место ошибки. При передаче может
возникнуть
двойная и более ошибка. Корректор также
не будет равен нулю. В этом случае
произойдет исправление
случайного символа и нами будет принят
неверный код. Для исключения такого
автоматического исправления вводится еще
один символ
для
проверки всей комбинации на четность.
Кодовое расстояние d=4.
Тогда матрица H
будет иметь вид
Пример
5.4. Дана 1101 -
исходная комбинация (k=4).
Закодировать ее в коде Хэмминга.
По
формуле (5.2) находим число контрольных
символов r=3.
Берем регистр из 7 ячеек памяти. Размещаем
исходную комбинацию в ячейках 3,5,6,7.
1
2 3 4 5 6 7
*
* 1 * 1 0 1
Находим
контрольные символы
е4
= 5 + 6 + 7 = 1 + 0 + 1 = 0
е2
= 3 + 6 + 7 = 1 + 0 + 1 = 0
е1
= 3 + 5 + 7 = 1 + 1 + 1 = 1
Закодированная
комбинация будет иметь вид
1
2 3 4 5 6 7
1
0 1 0 1 0 1
Допустим,
что при передаче возникла ошибка, и мы
приняли неверную комбинацию
1
2 3 4 5 6 7
1
0 1 0 1 1 1
к
4 = 4 + 5 + 6 + 7 = 0 + 1 + 1 + 1 = 1
к2
= 2 + 3 + 6 + 7 = 0 + 1 + 1 + 1 = 1
к1 = 1 + 3 + 5 + 7 = 1 + 1 + 1 + 1 + 0
K=
- в шестом
разряде ошибка.
Если
бы нам понадобилось построить код и для
проверки двойных ошибок, необходимо было бы
ввести еще один дополнительный нулевой
разряд.
Получим
следующий код
0
1 2 3 4 5 6 7
0
1 0 1 0 1 0 1
При
передаче и возникновении ошибки код будет
иметь вид
0
1 2 3 4 5 6 7
0
1 0 1 0 1 1 1
Проверка
в этом случае показала бы, что корректор K=110,
а проверка всей комбинации на четность E0
= 0+1+0+1+0+1+1+1=1. Это указывает на одиночную
ошибку. Допускается автоматическое
исправление ошибки.
Существует следующий алгоритм декодирования кода Хэмминга с d=4
Корректор - K | Значение E0 | Вывод |
K=0 | E0=0 |
Ошибок нет |
K#0 | E0#0 |
Произошла одиночная ошибка |
K#0 | E0=0 |
Произошла
двойная ошибка. Исправление запрещено. |
K=0 | E0#0 |
Произошла тройная или более нечетная ошибка |
Длина кода - n | 7 | 15 | 31 | 63 |
Число информационных разрядов - k | 4 | 11 | 26 | 57 |
Число контрольных разрядов - r | 3 | 4 | 5 | 6 |
Эффективность кода k/n | 0,57 | 0,73 | 0,84 | 0,9 |