Лекция11. Совершенные и квазисовершенные коды. Свойства совершенного кода. Код Хэмминга

Групповой (m,n)-код, исправляющий все ошибки веса, не большего  k, и никаких других, называется совершенным.

Свойства совершенного кода:

1.      Для совершенного (m,n)-кода, исправляющего все ошибки веса, не большего k , выполняется соотношение         Верно и обратное утверждение;

2.      Совершенный код, исправляющий все ошибки веса, не большего  k, в столбцах таблицы декодирования содержит все слова, отстоящие от кодовых на расстоянии, не большем k . Верно и обратное утверждение;

3.      Таблица декодирования совершенного кода, исправляющего все ошибки в не более чем  k позициях, имеет в качестве лидеров все строки, содержащие не более  k единиц. Верно и обратное утверждение.

Совершенный код (m,n)- это лучший код, обеспечивающий максимум минимального расстояния между кодовыми словами при минимуме длины кодовых слов. Совершенный код легко декодировать: каждому полученному слову однозначно ставится в соответствие ближайшее кодовое. Чисел m ,  n и   k   , удовлетворяющих условию совершенности кода очень мало. Но и при подобранных  m, n  и  k совершенный код можно построить только в исключительных случаях.

Если m ,n   и k  не удовлетворяют условию совершенности, то лучший групповой код, который им соответствует называется квазисовершенным, если он исправляет все ошибки кратности, не большей  k, и некоторые ошибки кратности  k+1. Квазисовершенных кодов также очень мало.

Двоичный блочный  (m,n)  -код называется оптимальным, если он минимизирует вероятность ошибочного декодирования. Совершенный или квазисовершенный код - оптимален. Общий способ построения оптимальных кодов пока неизвестен.

Для любого целого положительного числа r  существует совершенный (n,m)-код, исправляющий одну ошибку, называемый кодом Хэмминга (Hamming), в котором 

  и  .

Действительно,

.

Порядок построения кода Хэмминга следующий:

1.      Выбираем целое положительное число  r.

 Сообщения будут словами длины 

, а кодовые слова - длины 

2.      В каждом кодовом слове   

 бит с индексами-степенями двойки  

- являются контрольными, остальные - в естественном порядке - битами сообщения. Например, если r=4 , то биты 

- контрольные, а  

 - из исходного сообщения; 

Порядок построения кода Хэмминга следующий:

Строится матрица  M из    строк и  r столбцов. В   i-ой строке стоят цифры двоичного представления числа i . Матрицы для r=2, 3 и 4 таковы:

Записывается система уравнений bM=0 , где  M - матрица из предыдущего пункта. Система состоит из  r уравнений. Например, для 

Чтобы закодировать сообщение  a, берутся в качестве bj ,  j  не равно степени двойки, соответствующие биты сообщения и отыскиваются, используя полученную систему уравнений, те bj , для которых  j - степень двойки. В каждое уравнение входит только одно  bj,  j=2^i. В выписанной системе  b4 входит в 1-е уравнение, b2  - во второе и   b1- в третье. В рассмотренном примере сообщение   a=0111 будет закодировано кодовым словом b=0001111

Декодирование кода Хэмминга проходит по следующей схеме. Пусть принято, слово b+e  где   b- переданное кодовое слово, а  e - строка ошибок. Так как bM=0 , то (b+e)M=bM+eM=eM . Если результат нулевой, как происходит при правильной передаче, считается, что ошибок не было. Если строка ошибок имеет единицу в  i -й позиции, то результатом произведения  eM будет   i-я строка матрицы M  или двоичное представление числа  i. В этом случае следует изменить символ в   i-й позиции слова b+e , считая позиции слева, с единицы.

(4,7)-код Хэмминга имеет в качестве одного из кодовых слов  b=0001111. Матрица  M(7,3) приведена на шаге 3 хода построения кода Хэмминга. Ясно, что bM=0 . Добавим к  b строку ошибок  e=0010000. Тогда b+e=00111111  и (b+e)M=011=3 , т.е. ошибка находится в третьей позиции. Если e= 0000001, то b+e=0001110  и позиция ошибки – (b+e)M=111=7  и т.п. Если ошибка допущена в более чем в одной позиции, то декодирование даст неверный результат.

Код Хэмминга - это групповой код.

Это следует из того, что (m,n)  -код Хэмминга можно получить матричным кодированием, при помощи  m x n -матрицы, в которой столбцы с номерами не степенями 2 образуют единичную подматрицу. Остальные столбцы соответствуют уравнениям шага 4 построения кода Хэмминга, т.е. 1-му столбцу соответствует уравнение для вычисления 1-го контрольного разряда, 2-му - для 2-го, 4-му - для 4-го и т.д. Такая матрица будет при кодировании копировать биты сообщения в позиции не степени 2 кода и заполнять другие позиции кода согласно схеме кодирования Хэмминга.

Кодирующая матрица для  (4,7) -кода Хэмминга

Ее столбцы с номерами 3, 5, 6 и 7 образуют единичную подматрицу. Столбцы с номерами 1, 2 и 4 соответствуют уравнениям для вычисления контрольных бит, например, уравнению b1=b3+b5+b7  соответствует столбец 1101, т.е. для вычисления первого контрольного разряда берутся 1, 2 и 4 биты исходного сообщения или биты 3, 5 и 7 кода.

 

К (m,n)  -коду Хэмминга можно добавить проверку четности. Получится  (m,n+1) -код с наименьшим весом ненулевого кодового слова 4, способный исправлять одну и обнаруживать две ошибки.

Коды Хэмминга накладывают ограничения на длину слов сообщения: эта длина может быть только числами вида    : 1, 4, 11, 26, 57,   Но в реальных системах информация передается байтам или машинными словами, т.е. порциями по 8, 16, 32 или 64 бита, что делает использование совершенных кодов не всегда подходящим. Поэтому в таких случаях часто используются квазисовершенные коды.

Квазисовершенные коды

Квазисовершенные  (m,n) -коды, исправляющие одну ошибку, строятся следующим образом. Выбирается минимальное   n так, чтобы

Каждое кодовое слово такого кода будет содержать  k=m-n контрольных разрядов. Из предыдущих соотношений следует, что

Каждому из  n разрядов присваивается слева-направо номер от 1 до n . Для заданного слова сообщения составляются k  контрольных сумм  S1, S2, …,Sk. по модулю 2 значений специально выбранных разрядов кодового слова, которые помещаются в позиции-степени 2 в нем: 

для  Si (1≤ Ik)    выбираются разряды, содержащие биты исходного сообщения, двоичные числа-номера которых имеют в   i-м разряде единицу. Для суммы   S1 это будут, например, разряды 3, 5, 7 и т.д., для суммы S2  - 3, 6, 7 и т.д. Таким образом, для слова сообщения  a=a1a2a3…am будет построено кодовое слово  b=S1S2a1S3a2a3a4S4a5…am. Обозначим

сумму по модулю 2 разрядов получено слова, соответствующих

контрольной сумме           и самой этой контрольной суммы. Если

=0, то считается, что передача прошла без ошибок. В случае одинарной ошибки   будет равно двоичному числу-номеру сбойного бита. В случае ошибки, кратности большей 1, когда  >n, ее можно обнаружить. Подобная схема декодирования не позволяет исправлять некоторые двойные ошибки, чего можно было бы достичь, используя схему декодирования с лидерами, но последняя значительно сложнее в реализации и дает незначительное улучшение качества кода.

Пример построения кодового слова квазисовершенного   (9,n)-кода, исправляющего все однократные ошибки, для сообщения 100011010.

Искомое кодовое слово имеет вид  

 . Далее нужно вычислить контрольные суммы.

Таким образом, искомый код - 0011000111010. Если в процессе передачи этого кода будет испорчен его пятый бит, то приемник получит код 0011100111010. Для его декодирования опять вычисляются контрольные суммы:

Приемник преобразует изменением пятого бита полученное сообщение в отправленное передатчиком, из которого затем отбрасыванием контрольных разрядов восстанавливает исходное сообщение

Совершенный код Хэмминга также можно строить по рассмотренной схеме, т.к. для него 

 

Для исправление одинарной ошибки к 8-разрядному коду достаточно приписать 4 разряда

 

к 16-разрядному - 5, к 32-разрядному - 6, к 64-разрядному - 7.