Задание
Составить и отладить программу для кодирования и декодирования двоичных чисел кодом Хемминга с коррекцией.
Теоретические сведения
Коды Хемминга являются наиболее эффективными для коррекции одиночных ошибок (dmin=3) и для обнаружения двойной и коррекции одиночной (dmin=4).
В кодах Хемминга по определенным правилам производится разбиение на подмножества, и в соответствие контрольному разряду записывается дополнение до четности. При декодировании проверяется четность по подмножествам и, на основании полученной информации определяется номер искаженных разрядов.
В кодах Хемминга с dmin=4 выделяется еще один дополнительный контрольный разряд, куда записывается дополнение до четности всего кодового слова в целом. При декодировании проверяется четность как по основным подмножествам, так и всего слова в целом.
Для построения Кодов Хемминга достаточно приписать к каждому слову один добавочный (контрольный) двоичный разряд и выбрать цифру такого разряда так, чтобы общее количество единиц в изображении любого числа было, например, четным. Одиночная ошибка в каком-либо разряде передаваемого слова (в том числе, может быть, и в контрольном разряде) изменит четность общего количества единиц. Счетчики по модулю 2, подсчитывающие количество единиц, которые содержатся среди двоичных цифр числа, могут давать сигнал о наличии ошибок.
Можно построить и такой код, который обнаруживал бы двойные ошибки и исправлял одиночные. Для этого к коду, рассчитанному на исправление одиночных ошибок, нужно приписать еще один контрольный разряд (разряд двойного контроля). Полное количество разрядов кода при этом будет m+k+1. Цифра в разряде двойного контроля устанавливается такой, чтобы общее количество единиц во всех m + k + 1 разрядах кода было четным. Этот разряд не включается в общую нумерацию и не входит ни в одну контрольную группу.
При этом могут быть следующие случаи:
1. В принятом коде в целом и по всем контрольным группам количество единиц четно. Если тройные ошибки и ошибки в большем количестве разрядов исключаются, то первый случай соответствует безошибочному приему кода.
2. В принятом коде в целом количество единиц нечетно, но во всех контрольных группах количество единиц четно. Второй случай - ошибки только в разряде двойного контроля.
|