background image

Kodowanie Hamminga
Dzięki kodowi Hamminga jesteśmy w stanie nie tylko wykryć błąd pojedynczy w ciągu zero-
jedynkowym, ale także wskazać który bit jest niepoprawny.

Jak to uzyskać?
Mamy dowolny, ale i-bitowy, ciąg zero-jedynkowy, np. 00110110, liczba bitów ‘i’ = 8.
Aby móc wskazać na którym miejscu wystąpił błąd potrzebujemy dodać do tego ciągu kilka 
dodatkowych bitów kontrolnych, które określą nam, w którym miejscu wystąpił błąd. Mamy 8 miejsc 
więc wydawało by się, że wystarczą 3 dodatkowe bity, gdyż 2

3

 = 8. Nie jest to jednak prawdą z dwóch 

powodów:
- ciąg 000 traktowany jest jako brak błędu, czyli możemy zapisać tylko 7 numerków.
- po dodaniu 3 bitów cały ciąg ma ich 11 czyli potrzebujemy aż dwunastu kombinacji (kombinacja 
000, oraz 001, 010, itd.)
Jednak nie cza się martwić bo after some algebra dochodzimy do wzorku:
2

≥ i + k + 1

Gdzie: ‘k’ – liczba bitów kontrolnych, które trzeba dodać; ‘i’ – liczba bitów informacyjnych (ile jest w 
początkowym ciągu).
W naszym przypadku k = 4, bo 16 ≥ (8 + 4 + 1 = 13).

Co z tego zapamiętać? Wzorek.

W skrócie: Krok 1: Obliczenie długości ciągu kodowego (2

≥ i + k + 1)

Co teraz?
Konstruujemy tabelkę jak poniżej.
Dla uproszczenia filozofii przyjmę, że ‘i’ = 3, czyli mamy ciąg informacyjny 3-bitowy. Wymaga to, aby 
dodać ‘k’ = 3 bitów kontrolnych, na których zapiszemy 8 różnych wartości błędów (oczywiście 000 
oznacza, że błędu nie ma). Można więc powiedzieć, że nasz ciąg wygląda tak: 
I

1

 i

2

 i

3

 k

1

 k

2

 k

3

, lecz potraktujemy go jako zwykły ciąg ‘a’ = a

1

a

2

a

3

a

4

a

5

a

6

.

Błąd na pozycji

K

1

K

2

K

3

Żadnej – brak błędu

0

0

0

1

0

0

1

2

0

1

0

3

0

1

1

4

1

0

0

5

1

0

1

6

1

1

0

Jak taką tabelkę skonstruować. Ano nazywamy kolumny jak wyżej, kolejnymi indeksami ciągu 
kontrolnego. Natomiast ciąg k

0

 k

1

 k

to po prostu wartość binarna numeru pozycji, na której wystąpił 

błąd, czyli np. 3

dec

 = 011

bin

.

Z tabelki wyznaczamy tak zwany syndrom (wektor) ‘s’ = [s

1

, s

2

, s

3

]. 

Syndrom przyjmuje wartość 0 lub 1.
0 – nie wykryto błędu, 1 – błąd wykryto, standardowo.

background image

Wyznaczamy go w poniższy sposób: 
s

1

 = k

1

 = a

4

+a

5

+a

6

.

Czemu tak? Rozpatrujemy kolumnę k

1

 tabelki. Widzimy, że jedynki są w wierszach 4, 5, 6. Tyle.

Tak samo:
s

2

 = k

2

 = a

2

+a

3

+a

6

.

s

3

 = k

3

 = a

1

+a

3

+a

5

.

Cała filozofia.
Z założenia wiemy też, że jeśli syndrom jest zerowy ([0, 0, 0]) to błąd nie wystąpił. W innym wypadku 
owszem. Zatem jeśli błąd nie wystąpił to:
s

1

 = s

2

 = s

3

 = 0.

Czyli:
a

4

+a

5

+a

6

 = 0.

a

2

+a

3

+a

6

 = 0.

a

1

+a

3

+a

5

 = 0.

Z tego układu równań wyznaczamy najdogodniejsze dla nas 3 bity (w tym wypadku 1,2,4):
a

4

=a

5

+a

6

.

a

2

=a

3

+a

6

.

a

1

=a

3

+a

5

.

I TU UWAGA BO TEGO NIE MA JASNO W KSIĄŻCE.
Pamiętamy, że mamy trzy bity informacyjne i trzy bity kontrolne. Tada! a

1

, a

2

, a

4

 to bity kontrolne, zaś 

pozostałe bity a

3

a

5

a

6

 to bity informacyjne!

Dla przykładu: Jurek podał informację 010, pamiętając, że ciąg informacyjny to bity a

3

a

5

a

wyznaczamy pozostałe bity:
a

4

=a

5

+a

6

=1+0=1.

a

2

=a

3

+a

6

=0+0=0.

a

1

=a

3

+a

5

=0+1=1.

Czyli nasz ciąg ma postać 100110. (a

1

a

2

a

3

a

4

a

5

a

6

).

Dla upewnienia się sprawdzamy czy syndrom jest zerowy.
s

1

 = k

1

 = a

4

+a

5

+a

6

=0.

s

2

 = k

2

 = a

2

+a

3

+a

6

=0.

s

3

 = k

3

 = a

1

+a

3

+a

5

=0.

Git.

Teraz namieszamy: sprawdzamy czy ciąg 101110 jest poprawny (pamiętamy, że możemy wykryć tylko 
błąd pojedynczy, tu bit a

3

 zmienia wartość 0->1).

Pamiętamy, że wektor syndromu ‘s’ = [s

1

, s

2

, s

3

], czyli jest to ciąg 01-nkowy s

1

s

2

s

3

.

s

1

 = k

1

 = a

4

+a

5

+a

6

=0.

s

2

 = k

2

 = a

2

+a

3

+a

6

=1.

s

3

 = k

3

 = a

1

+a

3

+a

5

=1.

Czyli ‘s’ = 011

bin

 = 3

dec

. Tada! Błąd wystąpił na trzeciej pozycji ciągu! Faktycznie.

W skrócie: 
Krok 1: Obliczenie długości ciągu kodowego (2

≥ i + k + 1)

Krok 2: Tabelka i wyznaczenie z niej syndromu.
Krok 3: Ustalenie bitów informacyjnych i kontrolnych.