Załóżmy, że kolejne błędy przybliżająjeden wyraz do drugiego (znów najgorszy przypadek). Poprawianie kodu polega na przydzielaniu wyrazowi niedozwolonemu (zabronionemu) wyrazu poprawnego w oparciu o zasadę najmniejszej możliwej ilości przekłamań fzasada ufności1). Jeśli więc przyjdzie jeden lub dwa błędy, to nadal będziemy bliżej wyrazu właściwego niż jakiegokolwiek innego. Ale gdy przyjdątrzy błędy to wyraz przekłamany S3 będzie już bliższy S2, bo d(Si, S3) = 3 a d(S3, S2) = 2. Czyli:
Podamy teraz przykład jednego z bardziej bezpiecznych kodów, tzw. kodu Graya:
dziesiętnie |
kod |
dziesiętnie |
kod |
0 |
0000 |
5 |
0111 |
1 |
0001 |
6 |
0101 |
2 |
0011 |
7 |
0100 |
3 |
0010 |
8 |
1100 |
4 |
0110 |
9 |
1000 |
Jest to kod o odległości Hamminga 1, czyli raczej podatny na zakłócenia, ale tak chytrze pomyślany, że każdy wyraz kodowy różni się od drugiego dokładnie w 1 bicie.
Rozpatrzmy teraz zakodowanie linijki w kodzie binarnym i Graya:
kod Graya
Rozpatrzmy położenie głowicy odczytu, która stanęła pomiędzy 3 a 4. W zależności od położenia głowicy i czułości przetwornika możliwy odczyt to od 0 do 7 (zarejestrowano 0 jedynek aż po 3 jedynki, na różnych pozycjach). W takim samym położeniu dla kodu Graya możliwe jest odczytanie jednej jedynki na 3-ej pozycji (3) lub 2 na (2-ej i 3-ej) czyli 4. Zatem odczyt 3 lub 4 (tak, jak przy odczycie analogowym).