Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дрейзин В.Э., Кочура А.В. - Управление качество...doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
3.62 Mб
Скачать

8.3.2. Коды Хэмминга

Более мощной корректирующей способностью обладают коды Хэмминга, в основе которых тоже лежат проверки на чётность. Имеется два кода Хэмминга: с минимальным кодовым расстоянием dmin = 3, позволяющий обнаруживать и исправлять однократные ошибки, и с dmin = 4, позволяющий обнаруживать двойные и исправлять однократные ошибки. Рассмотрим первый из них.

Вообще возможность исправления ошибок в принятых кодовых словах базируется на допущении, что вероятность ошибок меньшей кратности превышает вероятность ошибок большей кратности. То есть наиболее вероятными являются однократные ошибки, далее следуют двукратные и т.д. В этом случае для исправления ошибки кратности t необходимо, чтобы запрещённое слово, образовавшееся при такой ошибке, по кодовому расстоянию оставалось бы ближе всего к тому разрешённому слову, из которого оно образовалось, а для этого и должно выполняться соотношение (7.3). При t = 1, dmin  2+1 = 3.

Теперь необходимо определить, сколько надо минимально иметь дополнительных контрольных разрядов, чтобы обеспечить заданное минимальное кодовое расстояние dmin при заданном числе информационных разрядов n0, то есть определить функцию

kmin = f(n0,dmin) . (8.4)

Точного решения этой задачи для любых значений n0 и dmin не найдено. Однако для конкретных значений n = 1…60 и dmin = 2…21 значения этой функции получены. В частности для dmin = 3 величина k определяется из соотношения:

(8.5)

Код Хэмминга с исправлением однократной ошибки может быть построен для любого заданного числа информационных разрядов n0, которое определяет максимальное количество разрешённых кодовых комбинаций .

Задача исправления однократной ошибки сводится к определению номера двоичного разряда в принятом слове, в котором произошла ошибка. Тогда для исправления этой ошибки принятый символ заменяется на противоположный (0 на 1, а 1 на 0). Для получения номера ошибочного разряда с помощью проверок на чётность необходимо получить столько независимых проверок на чётность, чтобы составленное из их результатов двоичное число имело разрядность, достаточную для нумерации n = n0+k разрядов данного кода. Исходя из этого, количество проверок  должно находиться из соотношения

2 –1 n0+k , (8.6)

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

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

  k . (8.7)

Теперь необходимо определить, какие разряды кодовых слов должны участвовать в каждой из  проверок. Напомним, что каждая проверка представляет собой сложение по модулю 2 значений входящих в неё разрядов кодового слова, а результат её еi может давать ноль или единицу. Составив из этих результатов двоичное число

E = ee3e2e1 , (8.8)

мы должны в двоичном виде получить номер разряда, в котором произошла ошибка.

Если принятое кодовое слово не содержит ошибок, то есть является разрешённым, то контрольное число Е должно состоять из нулей. Если в младшем разряде контрольного числа (е1) стоит единица, то это означает ошибку в одном из тех разрядов принятого слова, номера которых в двоичной системе счисления имеют единицу в последнем (младшем) разряде. А это все нечётные номера. Значит, первая проверка должна охватывать все нечётные номера разрядов:

. (8.9)

Единица во втором разряде контрольного числа (е2) означает ошибку в одном из тех разрядов принятого слова, номера которых имеют единицу во втором разряде. Например, для четырёхразрядных двоичных чисел

1

2

3

4

5

6

7

8

9

10

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

11

12

13

14

15

1011

1100

1101

1110

1111

будем иметь следующие номера:

2, 3, 6, 7, 10, 11, 14, 15 (0010, 0011, 0110, 0111, 1010, 1011, 1110, 1111)

Значит, во вторую проверку должны войти разряды

(8.10)

Соответственно, в третью проверку войдут разряды, номера которых содержат единицу в третьем разряде: 4, 5, 6, 7, 12, 13, 14, 15 (0100, 0101, 0110, 0111, 1100, 1101, 1110 и 1111)

, (8.11)

а в четвёртую – разряды 8, 9, 10, 11, 12, 13, 14 и 15:

. (8.12)

Таким образом,  = 4 позволит получить код Хэмминга с исправлением однократной ошибки при общем числе разрядов n0+k = 15. При этом согласно (8.7) мы должны иметь не менее k = = 4 контрольных разрядов. Следовательно, n0 = 15 – 4 = 11, а N = 211 = 2048.

Теперь необходимо таким образом выбрать позиции контрольных разрядов в кодовых словах, чтобы все проверки были независимы, а для этого в каждую проверку должен входить хотя бы один контрольный разряд, который входил бы только в эту проверку.

Поэтому достаточно определить номера разрядов, которые входят только в одну проверку и именно на этих местах разместить контрольные разряды. В данном примере (для 15 разрядного кода) это будут разряды: 1, 2, 4 и 8. Нетрудно заметить, что они представляют собой ряд 2n, где n – целые натуральные числа (0, 1, 2, 3, …). Таким образом, в нашем примере контрольными разрядами будут 1, 2, 4 и 8. При кодировании контрольных разрядов их значения определяются из соотношений (8.9), (8.10), (8.11) и (8.12) при условии, что е1, е2, е3 и е4 равны нулю, т.е.:

(8.13)

При декодировании мы должны выполнить все эти проверки, составить из них проверочное слово Е= е4е3е2е1 и, если оно равно нулю, то значит кодовое слово принято правильно. Если же оно не равно нулю, то в двоичном виде оно даёт нам номер разряда, в котором произошла ошибка и следует лишь исправить значение этого разряда на противоположное.

В качестве примера рассмотрим кодирование и декодирование произвольного кодового слова, все информационные разряды которого заполнены произвольно:

k

k

k

k

Разряды

№ п/п

Значения

инф. разр.

1

1

0

1

0

1

1

0

1

1

0

Значения контр.

разрядов

1

1

0

1

,

,

,

.

Пусть теперь будет совершена ошибка в одном из информационных разрядов, например, в 12-м; т.е. принятое слово будет: 110001110111001. Проведём его декодирование:

,

,

,

.

Е= е4е3е2е1=1100=12.

Как видим, номер разряда, в котором произошла ошибка, получен правильно.

Теперь пусть ошибка произойдёт в одном из контрольных разрядов, например, в 4-м. Тогда в результате декодирования получим:

,

,

,

.

Е = 0100 = 4.

И в этом случае декодирование дало верный результат.

Благодаря простоте процессов кодирования и декодирования, коды Хэмминга получили широкое применение не только при передаче цифровой информации внутри ЭВМ и между частями распределённых информационных систем, но и при записи и считывании информации в ОЗУ. В частности, выпускаются БИСы ОЗУ с встроенными аппаратными средствами кодирования и декодирования с использованием кода Хэмминга.