Hvordan beregne et Hamming Code Software

Hvordan beregne et Hamming Code Software


Richard Hamming utviklet Hamming kode ved Bell Labs i 1940 for bruk i telekommunikasjon, men senere det funnet anvendelser i informatikk. Hamming er den mest kjente, og mest brukte, av "feilkorrigerende" koder. Disse kodene legge noen biter til en binær streng. Når strengen overføres - og eventuelt ødelagt i overgangen - ekstra biter tillater mottakeren å fortelle hvorvidt det sendte strengen ble ødelagt. Hamming koden forteller også som litt endret. Sjansen for at mer enn én bit ble endret er vanligvis ansett for liten til å bekymre seg for.

Bruksanvisning

1 Sett opp en matrise der du vil legge til kontrollbitene til de databiter for å gjøre strengen som skal overføres. For å få avstanden riktig, er det nyttig å definere liten funksjon som viser hvor kontrollbitene gå. Den "place_bit" -funksjonen er definert slik: "int place_bit (int k) {int i; for (i = 1; jeg gt k; i = 2 * i) {if (i == k) avkastning 1;} return 0;} "Denne funksjonen returnerer 1 hvis inngangen er en potens av 2, og 0 ellers. Med denne funksjonen kan du sette databitene i en rekke med "place_data" funksjon som er definert slik: "int place_data (string data_string) {int j, k; for (j = k = 0; data_string (k) = '\ 0'; j ++, k ++) hvis place_bit (k) så j ++ annet data_ray (j) = data_string (k)} Dette setter databiter i data_ray, forlater områder for kontrollbitene vil du legge for feilkorrigerende.

2 Beregn sjekk biter og legg dem til data_array. Funksjonen som gjør dette er "add_check_bits" og det ser ut som dette: "int add_check_bits () {int m, n, p; for (m = 0; m LT data_ray_max; m ++) hvis place_bit (m) og deretter til (n = 0, n LT m; n ++) p = p XOR data

stråle (m + n); data (m + n) = p}}. "Dette beregner kontrollbiter og setter bitene på riktig sted.

3 Overføre datastrengen.

4 Recompute sjekk biter når dataene er mottatt. Hvis alle kontrollbiter er korrekte, ble det ikke biter forandret under overføringen. Hvis bare én sjekk bit er feil, ble det litt korrigert under overføring. Hvis mer enn ett av kontrollbitene er feil, legger posisjonene til de uriktige biter å finne den biten som ble ødelagt. Koden for å finne feilen er: "int find_error () {int k, m, n, p; for (k = 1; k LT data_ray_max; k * = 2) {for (m = 0; m LT data_ray_max; m ++) hvis place_bit (m) og deretter til (n = 0, n LT m; n ++) p = p XOR data ray (m + n); ! data (m + n) = p} if (p = data_ray (m + n) avkastning 1;} return 0;} ".

Hint

  • Hvis posisjonen k i data_ray er funnet å være feil, måten å fikse det er med fix_ray funksjon, som er definert slik: "int fix_ray (int k) {data_ray (k) = data_ray (k) XOR 1;} . "
  • Hamming koden kan bli utvidet for å se etter mer enn en bit av korrupsjon, men hvis du sjekker for mange biter, kan de kontrollbiter tallmessig databitene. Hvis kanalen er denne støyende, kan det være bedre å bare videresende ødelagte signaler.