
Коды, исправляющие ошибки
Особое значение имеют помехозащитные коды, которые могут исправлять ошибки определенной кратности. Соотношение между максимальной кратностью исправляемой ошибки g и кодовым расстоянием d определяется по формуле:
d ≥ 2g + 1.
В основу исправления ошибок положена следующая идея: определяется множество кодовых комбинаций, включающее все разрешенные и те запрещенные, которые получены при искажении ошибкой кратности не более g. Это множество разбивается на N+1 подмножеств, где N – число исходных кодируемых символов. В каждое из N подмножеств входят: разрешенная кодовая комбинация и ближайшие к ней запрещенные, которые отстоят от разрешенной на расстояние не больше g. Еще одно подмножество составляют те кодовые комбинации, которые отстоят от исходной на расстояние больше g.
При декодировании определяется, в какое подмножество входит принятая кодовая комбинация. Если она является разрешенной, то сразу декодируется; если запрещенная, то исправляется на разрешенную, с которой находится в одном подмножеств, а затем декодируется. Если кодовая комбинация не распознается по одному из приведенных правил, она считается искаженной и исправить ее нет возможности (корректирующая способность кода недостаточна для этого).
Пример 1. Построить помехозащитный код, исправляющий ошибку кратности 1, для передачи двух символов: a и b.
Построим первичный код. Поскольку для кодирования двух символов достаточно одного информационного двоичного разряда, первичный код может иметь следующий вид:
a
0
b 1
В силу приведенной выше формулы для расчета кодового расстояния для исправления ошибки и поскольку по заданию g= 1, имеем d = 3, таким образом, для исправления ошибки кратности 1 кодовое расстояние должно быть равно по меньшей мере 3.
Поскольку
в первичном коде обеспечено расстояние
между кодовыми комбинациями, равное 1,
для выполнения условия
необходимо, чтобы проверочные разряды
обеспечивали расстояние между кодовыми
комбинациями, по меньшей мере, равным
2. Для этого число проверочных разрядов
должно быть не меньше 2. Тогда разрешенные
кодовые комбинации будут иметь вид
Исходный символ |
Информационный разряд |
Проверочные разряды |
Результирующий код |
a |
0 |
00 |
000 |
b |
1 |
11 |
111 |
Из таблицы видно, что кодовое расстояние равно 3, а построенные кодовые комбинации являются разрешенными. Определим общее число всевозможных комбинаций, если число разрядов кода равно 3:
разрешенные кодовые комбинации = {000, 111};
запрещенные кодовые комбинации = {001, 010, 011, 100, 101, 110}.
Определим подмножества кодовых комбинаций, которые отстояли бы от каждой разрешенной на минимальное расстояние, равное 1:
для 000 для 111
001 011
010 101
100 110.
Пусть передается кодовая комбинация 000 (символ a) и на нее накладывается ошибка кратности 1. В таблице показаны полученные кодовые комбинации и их декодирование:
Передаваемая кодовая комбинация |
Ошибка |
Принимаемая кодовая комбинация |
Результат исправления |
Результат декодирования |
000 |
100 |
100 |
000 |
a |
000 |
010 |
010 |
000 |
a |
000 |
001 |
001 |
000 |
a |
Построенный код позволяет исправлять ошибки кратности 1.
Пример 2.Построить помехозащищенный код, исправляющий ошибку кратности 1, для передачи символов: a, b и c.
Вначале построим первичный код: a - 00; b – 01;c –10.
Для решения поставленной задачи необходимо обеспечить d= 3. Для этого воспользуемся схемой формирования кода Грея:
-
00
01
11
000
a
011
b
101
c
Таким образом, построены коды:
a → 00000, b → 01101, c→ 10111.
Полученное кодовое расстояние d = min {dab, dac, dbc} = min {3, 4, 3} = 3 обеспечивает исправление ошибки кратности g=1.
Рассмотрим, как исправляются ошибки в данном случае. Все множество кодовых комбинаций пятиразрядного двоичного кода равно 25 = 32. Из них три кодовые комбинации – разрешенные, остальные – запрещенные. Разобьем кодовые комбинации на три подмножества, в каждое из которых будут входить: одна разрешенная и те запрещенные, которые отстоят от разрешенной на кодовое расстояние d = 1. Имеем:
для 00000 для 01101 для 10111
00001 01100 10110
00010 01111 10101
00100 01001 10011
01000 00101 11111
10000 11101 00111
Общее число кодовых комбинаций, включенных в построенные подмножества, равно 18. Оставшиеся 14 кодовых комбинаций являются следствием ошибки кратности больше 1 и в сформированные подмножества не включены.
Проверим, как выполняется исправление ошибки кратности 1. Пусть передается кодовая комбинация 01101 (символ b) и на нее накладывается ошибка кратности 1. В таблице показаны полученные кодовые комбинации и их декодирование:
Передаваемая кодовая комбинация |
Ошибка |
Принимаемая кодовая комбинация |
Результат исправления |
Результат декодирования |
01101 |
10000 |
11101 |
01101 |
b |
01101 |
01000 |
00101 |
01101 |
b |
01101 |
00100 |
01001 |
01101 |
b |
01101 |
00010 |
01111 |
01101 |
b |
01101 |
00001 |
01100 |
01101 |
b |
Пусть на ту же кодовую комбинацию накладывается ошибка кратности 2. Результирующие кодовые комбинации либо невозможно декодировать, либо декодирование неверно:
Передаваемая кодовая комбинация |
Ошибка |
Принимаемая кодовая комбинация |
Результат декодирования |
01101 |
10001 |
11100 |
Невозможно декодировать |
01101 |
01001 |
00100 |
То же |
01101 |
00101 |
01000 |
a |
01101 |
00011 |
01110 |
Невозможно декодировать |
01101 |
10010 |
11111 |
c |
01101 |
01010 |
00111 |
Невозможно декодировать |
01101 |
00110 |
01011 |
То же |
01101 |
10100 |
11001 |
"-" |
01101 |
01100 |
00001 |
a |
01101 |
11000 |
10101 |
c |
Отметим, что для обнаружения ошибки кратности v и исправления ошибки кратности s (v ≥ s) минимальное кодовое расстояние должно удовлетворять следующему соотношению: d ≥ v + s + 1
Код Хемминга. Первые работы по корректирующим кодам принадлежат Хеммингу, который ввёл понятие кодового расстояния и предложил код, позволяющий однозначно указать ту позицию в кодовой комбинации, где произошла ошибка. В коде Хемминга к информационным разрядам добавляются проверочных элементов для автоматического определения местоположения ошибочного бита.
Рассмотрим
код Хемминга, который обнаруживает
и исправляет
однократные ошибки, т.е. имеющий кодовое
расстояние
В
качестве исходного берут позиционный
двоичный код с числом информационных
символов
,
которым можно закодировать
сообщений. В исходный код добавляют
проверочных (контрольных) символов
(разрядов), так что длина закодированной
комбинации
Кодирование
сообщения.
Определение
числа контрольных разрядов.
При передаче кодовой последовательности
по КС может быть искажен любой из
разрядов или слово передано без искажений.
Таким образом, может быть
вариантов. С помощью
проверочных символов можно различить
вариантов, т.е.
. (2)
Зависимость между и , удовлетворяющую (2) можно представить в виде табл. 1
Табл. 1
n |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
m |
2 |
3 |
3 |
3 |
4 |
4 |
4 |
4 |
4 |
Размещение
контрольных разрядов.
Для удобства обнаружения искаженного
символа целесообразно размещать
проверочные разряды на позициях кодовой
комбинации (слева направо), кратных
степени 2, т.е. на местах 1, 2, 4. 8 и т.д.
Информационные разряды располагаются
на оставшихся позициях. Для кода Хемминга
,
(2а)
где
- младший и старший информационные
разряды;
- проверочные разряды.
Определение контрольных символов. Для кода Хемминга они находятся следующим образом:
составляется кодовая таблица информационных разрядов,
Информационные разряды |
Символы кода |
Информационные разряды |
Символы кода |
||||
n3 |
n2 |
n1 |
n3 |
n2 |
n1 |
||
0 |
0 |
1 |
m1 |
1 |
0 |
0 |
m3 |
0 |
1 |
0 |
m2 |
1 |
0 |
1 |
k3 |
0 |
1 |
1 |
k4 |
1 |
1 |
0 |
k2 |
|
|
|
|
1 |
1 |
1 |
k1 |
составляется проверочная таблица кода Хемминга
m1 = |
n4 |
|
n1 |
m2 = |
n4 |
n2 |
n1 |
m3= |
n3 |
n2 |
n1 |
(3)
Декодирование
кодовой комбинации.
Для проверки принятой кодовой комбинации
используется метод проверки на четность.
Для этого складывают «по модулю два»
левую и правую части (3)
.
Если
кодовая комбинация не подверглась
искажению, то проверочное двоичное
число (синдром)
,
в противном случае это свидетельствует
об искажении одного или двух разрядов
кодового слова, а число показывает номер
искаженного разряда (слева направо),
который следует исправить на обратный
при однократной ошибки.