Come calcolare un software codice di Hamming

July 24

Come calcolare un software codice di Hamming


Richard Hamming ha sviluppato il codice di Hamming ai Bell Labs nel 1940 per l'uso nel settore delle telecomunicazioni, ma in seguito ha trovato applicazioni in informatica. Il Hamming è il più famoso, e più frequentemente utilizzato, della "correzione di errore" codici. Questi codici aggiungono un paio di bit in una stringa binaria. Quando viene trasmessa la stringa - e forse corrotto in transizione - i bit extra permettono al ricevitore di dire se la stringa trasmessa è stato danneggiato. Il codice di Hamming dice anche che po 'è stato cambiato. La possibilità che più di un bit è stato cambiato è di solito considerato troppo piccolo per preoccuparsi.

istruzione

1 Impostare una matrice in cui si aggiungere i bit di controllo per i bit di dati per rendere la stringa che verrà trasmesso. Per ottenere la corretta spaziatura, è utile definire la piccola funzione che mostra dove i bit di controllo vanno. La funzione "place_bit" è definita in questo modo: "int place_bit (int k) {int i; for (i = 1; i gt k; i = 2 * i) {if (i == k) return 1;} return 0;} "Questa funzione restituisce 1 se l'ingresso è una potenza di 2, e 0 altrimenti. Con questa funzione è possibile inserire i bit di dati in un array con la funzione "place_data" che si definisce in questo modo: "int place_data (string data_string) {int j, k; for (j = k = 0; data_string (k) = '\ 0';! j ++, k ++) se place_bit (k), allora j ++ altro data_ray (j) = data_string (k)} Questo mette bit di dati in data_ray, lasciando spazi per i bit di controllo si aggiungerà per la correzione degli errori.

2 Calcolare i bit di controllo e di aggiungerli alla data_array. La funzione che fa questo è "add_check_bits" e sembra che questo: "add_check_bits int () {int m, n, p; for (m = 0; m LT data_ray_max; m ++) se place_bit (m) per poi (n = 0; n LT m; n ++) p =

ray dati p XOR (m + n); dati (m + n) = P}}. "Questo calcola i bit di controllo e mette i bit nella posizione corretta.

3 Trasmettere la stringa di dati.

4 Ricalcolare i bit di controllo quando i dati vengono ricevuti. Se tutti i bit di controllo sono corretti, nessun bit sono stati modificati durante la trasmissione. Se un solo bit di controllo non è corretto, che è stato corretto bit durante la trasmissione. Se più di uno dei bit di controllo non è corretto, aggiungere le posizioni dei bit errati per trovare il bit che è stato danneggiato. Il codice per trovare l'errore è: "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 ++) se place_bit (m) poi per (n = 0; n LT m; n ++) p = p XOR ray dati (m + n); ! Dati (m + n) = p} if (p = data_ray (m + n) return 1;} return 0;} ".

Consigli e avvertenze

  • Se la posizione k in data_ray si trova ad essere in errore, il modo per risolvere il problema è con la funzione fix_ray, che è definita in questo modo: "int fix_ray (int k) {data_ray (k) = data_ray (k) XOR 1;} ".
  • Il codice di Hamming può essere esteso a verificare la presenza di più di un po 'di corruzione, ma se si controlla per troppi bit, i bit di controllo può superano i bit di dati. Se il canale è questo rumoroso, potrebbe essere meglio per ritrasmettere i segnali semplicemente danneggiati.