Код с проверкой четности имеет небольшую избыточность и не требует больших
затрат оборудования на реализацию контроля, поэтому широко применяется в
вычислительных машинах.
2.3.2. Код Хемминга
Этот код был предложен Р.В. Хеммингом в 1950 году. Он позволяет
обнаруживать и исправлять одну ошибку (кодовое расстояние d = 3).
Код Хемминга строится таким образом, что к имеющимся информационным
разрядам слова добавляется определенное количество контрольных разрядов, которые
формируются перед передачей информации путем подсчета четности суммы единиц
для определенных групп информационных разрядов. Контрольная аппаратура на
приемном устройстве образует из принятых информационных и контрольных разрядов
путем аналогичных подсчетов четности корректирующее число, которое равно нулю
при отсутствии ошибки, либо указывает место ошибки, например двоичный
порядковый номер ошибочного разряда в слове.
Рассмотрим его более подробно. Допустим, необходимо передать байт
информации, т.е. восемь информационных разрядов. Для того чтобы получить число,
указывающее на любой разряд этого байта, необходимы четыре двоичных разряда
(указание на старший, восьмой разряд в двоичном коде требует четыре разряда 1000).
Следовательно, к 8 информационным разрядам необходимо добавить 4 контрольных
разряда (избыточные), которые дают корректирующее число. Таким образом, общее
число разрядов в передаваемом коде Хемминга в данном случае будет равно 12.
Поскольку ошибки могут быть и в контрольных разрядах, то код строится так, чтобы
он обнаруживал ошибки в любом разряде; взятых четырех контрольных разрядов для
этого достаточно (число 12 в двоичном коде тоже требует 4 двоичных разряда).
Далее полагают, что младший контрольный разряд контролирует четность
разрядов, двоичный номер которых имеет единицу в младшем разряде, т.е. 1, 3, 5, 7,
9, 11 разряды (в двоичном коде: 0001, 0011, 0101, 0111, 1001, 1011). Следующий
контрольный разряд проверяет разряды, двоичные номера которых имеют единицу во
втором разряде, т.е. 2, 3, 6, 7, 10, 11 (в двоичном коде: 0010, 0011, 0110, 0111,
1010, 1011). Третий контрольный разряд контролирует разряды с двоичными
номерами, имеющими единицу в третьем разряде, т.е. 4, 5, 6, 7, 12 (двоичные коды:
0100, 0101, 0110, 0111, 1100). Четвертый, старший контрольный разряд
контролирует разряды номер 8, 9,10, 11, 12 (в двоичном коде: 1000, 1001, 1010,
1011, 1100).
Для упрощения кодирования в качестве контрольных разрядов берем те, которые
встречаются только в одной из перечисленных групп номеров разрядов, т.е. разряды 1,
2, 4, 8. Тогда размещение разрядов в передаваемом коде будет следующим
(контрольные разряды подчеркнуты):
D12 D11 D10 D9D 8 D7 D6 D5 D 4 D3 D 2 D 1 .
При этом разряды D12 D11 D10 D9 D7 D6 D5 D3 образуют байт
передаваемой информации, а разряды D8 D4 D2 D1 - избыточные, обеспечивают
определение и исправление ошибок. Составим таблицу формирования контрольных
разрядов (табл. 2).
Таблица 2
Номер группы Контрольный разряд Проверяемые разряды
Первый элемент
нулевой ячейки
Ячейка с адресом 2