.:Борьба с динамическими отказами с помощью проверочного бита (М2) и кодов Хемминга:.
Коды Хемминга являются самоконтролирующимися кодами, т.е кодами, позволяющими автоматически обнаруживать наиболее вероятные ошибки при передаче
данных. Для их построения достаточно приписать к каждому слову один добавочный (контрольный) двоичный разряд и выбрать цифру этого разряда так, чтобы
общее количество единиц в изображении любого числа было, например, четным. Одиночная ошибка в каком-либо разряде передаваемого слова (в том числе,
может быть, и в контрольном разряде) изменит четность общего количества единиц. Счетчики по модулю 2, подсчитывающие количество единиц, которые
содержатся среди двоичных цифр числа, могут давать сигнал о наличии ошибок.
При этом, разумеется, мы не получаем никаких указаний о том, в каком именно разряде произошла ошибка, и, следовательно, не имеем возможности исправить её.
Остаются незамеченными также ошибки, возникающие одновременно в двух, в четырёх или вообще в четном количестве разрядов. Впрочем, двойные, а тем более
четырёхкратные ошибки полагаются маловероятными.
Самокорректирующиеся коды.
Коды, в которых возможно автоматическое исправление ошибок, называются самокорректирующимися. Для построения самокорректирующегося кода,
рассчитанного на исправление одиночных ошибок, одного контрольного разряда недостаточно. Количество контрольных разрядов k должно быть выбрано так,
тобы удовлетворялось неравенству 2^k >= k+m+1 или k >= log2(k+m+1), где m - количество основных двоичных разрядов кодового слова. Минимальные значения k
при заданных значениях m, найденные в соответствии с этим неравенством, приведены в следующей таблице:
Диапазон m kmin
1 ---->2
2-4 --->3
5-11 --->4
12-26 ---->5
27-57 ------>6
Имея m+k разрядов, самокорректирующийся код можно построить следующим образом.
Будем считать, что нумерация разрядов начинается с единицы.
Предположим далее, что все m+k разрядов кода разбиты на контрольные группы, которые частично перекрываются, причем так, что единицы в двоичном
представлении номера разряда указывают на его принадлежность к определённым контрольным группам. Например: разряд № 5 принадлежит к 1-й и 3-й
контрольным группам, потому что в двоичном представлении его номера 5 = …000101 - 1-й и 3-й разряды содержат единицы.
Среди m+k разрядов кода при этом имеется k разрядов, каждый из которых принадлежит только к одной контрольной группе:
Разряд № 2^(k ? 1) принадлежит только к k-й контрольной группе.
Эти k разрядов мы и будем считать контрольными. Остальные m разрядов, каждый из которых принадлежит, по меньшей мере, к двум контрольным группам,
будут информационными разрядами.
В каждой из k контрольных групп будем иметь по одному контрольному разряду. В каждый из контрольных разрядов поместим такую цифру (0 или 1),
чтобы общее количество единиц в его контрольной группе было четным.
С помощью это кода возможно выполнять исправление одинарных ошибок, но не способен исправлять двойные.
Можно построить и такой код, который обнаруживал бы двойные ошибки и исправлял одиночные. Для этого к самокорректирующемуся коду, рассчитанному на
исправление одиночных ошибок, нужно приписать ещё один контрольный разряд (разряд двойного контроля). Полное количество разрядов кода при этом будет
m+k+1. Цифра в разряде двойного контроля устанавливается такой, чтобы общее количество единиц во всех m + k + 1 разрядах кода было четным. Этот разряд не
включается в общую нумерацию и не входит ни в одну контрольную группу.
|