Hamming CodeDetectarea și corectarea erorilor cu exemple

⚡ Rezumat inteligent

Codul Hamming este un cod liniar de corectare a erorilor care adaugă biți de paritate redundanți la pozițiile de tip putere a doi, permițând unui receptor să detecteze erori de până la doi biți și să corecteze automat orice eroare de un singur bit în timpul transmisiei de date.

  • 🧭 Scop: Codul Hamming detectează și corectează erorile de transmisie prin încorporarea biților de paritate care indică poziția exactă a unui bit corupt.
  • 🔢 Biți redundanți: Numărul de biți de paritate (p) satisface regula 2^p ≥ n + p + 1, unde n este numărul de biți de date.
  • 📍 De plasament: Biții de paritate ocupă pozițiile de tip putere a doi - 1, 2, 4 și 8 - în timp ce biții de date ocupă pozițiile rămase.
  • 🧮 Hamming (7,4): O formă comună codifică patru biți de date în șapte biți în total folosind trei biți de paritate.
  • 🧯 Prescripţie: Codul Hamming standard corectează doar erorile pe un singur bit; un bit suplimentar de paritate generală adaugă detectarea dublei erori (SECDED).
  • 🤖 Asistență AI: Decodoarele de învățare automată ajută la semnalarea canalelor zgomotoase și a modelelor de eroare pe care codurile fixe le-ar putea rata.

Detectarea și corectarea erorilor de cod Hamming cu biți de paritate

Ce este o eroare?

TransmitDatele comunicate pot fi corupte în timpul comunicării. Este probabil să fie afectate de zgomot extern sau de alte defecțiuni fizice. Într-o astfel de situație, datele de intrare nu pot fi identice cu datele de ieșire. Această nepotrivire este cunoscută sub numele de „Eroare”.

Erorile de date pot cauza pierderea datelor importante sau securizate. Cea mai mare parte a transferului de date în sistemele digitale ia forma „transferului de biți” și chiar și o mică modificare a unui singur bit poate afecta performanța întregului sistem. Într-o secvență de date, dacă un 1 este schimbat în 0 sau un 0 este schimbat în 1, aceasta se numește „eroare de bit”.

Tipuri de erori

Există în principal trei tipuri de erori de bit care apar atunci când datele sunt transmitde la emițător la receptor. Diagrama de mai jos ilustrează modul în care fiecare tip afectează o secvență de date:

Diagramă care compară erorile pe un singur bit, pe mai mulți biți și erorile în rafale într-o secvență de date binare

  • Erori pe un singur bit
  • Erori de biți multipli
  • Erori de explozie

Erori pe un singur bit

O modificare adusă unui bit în întreaga secvență de date este cunoscută sub numele de „eroare pe un singur bit”. Apariția unei erori pe un singur bit nu este atât de frecventă. Se întâmplă mai ales într-un sistem de comunicații paralel, deoarece datele sunt transferate pe biți pe linii separate, astfel încât există o șansă mai mare ca o linie să devină zgomotoasă în timp ce celelalte rămân curate.

Erori de biți multipli

Când doi sau mai mulți biți ai unei secvențe de date se schimbă între transmitter și receptor, aceasta este cunoscută sub numele de „eroare pe mai mulți biți”.

Acest tip de eroare apare atât în ​​rețelele de comunicații de date seriale, cât și în cele paralele.

Erori de explozie

O modificare a unui set de biți consecutivi dintr-o secvență de date este cunoscută sub numele de „eroare în rafale”. Lungimea unei erori în rafale se măsoară de la primul bit modificat până la ultimul bit modificat.

Ce este detectarea și corectarea erorilor?

Într-un sistem de comunicații digitale, pot apărea erori pe măsură ce datele se transferă de la un dispozitiv la altul. Dacă aceste erori nu sunt detectate și corectate, datele se pierd. Pentru o comunicare eficientă, datele trebuie transferate cu o precizie ridicată, ceea ce se realizează prin identificarea mai întâi a erorilor și apoi corectarea acestora.

Eroare detectata este o metodă de identificare a erorilor prezente în date transmitluat de la un transmitter către un receptor într-un comunicare de date sistemului.

Codurile de redundanță sunt folosite pentru a găsi aceste erori prin adăugarea de biți suplimentari la date atunci când acestea sunt transmitde la sursă. Acești biți suplimentari se numesc „coduri de detectare a erorilor”. Cele mai comune trei tipuri de coduri de detectare a erorilor sunt:

  • Verificarea parității
  • Controlul redundanței ciclice (CRC)
  • Verificarea redundanței longitudinale (LRC)

Verificarea parității

  • Este cunoscut și ca verificare de paritate.
  • Oferă un mecanism eficient din punct de vedere al costurilor pentru detectarea erorilor.
  • În această tehnică, bitul redundant adăugat fiecărei unități de date este cunoscut sub numele de bit de paritate. Acesta este setat astfel încât numărul total de 1-uri din unitate să devină par (paritate pară) sau impar (paritate impară).

Verificarea redundanței longitudinale

În această tehnică de detectare a erorilor, un bloc de biți este organizat într-un tabel. Metoda LRC calculează un bit de paritate pentru fiecare coloană, iar acest set de biți de paritate este trimis împreună cu datele originale. Blocul de biți de paritate ajută receptorul să verifice redundanța și să detecteze erorile.

Verificare redundanță ciclică

Verificarea redundanței ciclice adaugă o secvență de biți redundanți la sfârșitul unității de date, astfel încât unitatea de date rezultată să devină exact divizibilă cu un al doilea număr binar predeterminat.

La destinație, datele primite sunt împărțite la același număr. Dacă nu există rest, unitatea de date este considerată corectă și este acceptată. În caz contrar, indică faptul că unitatea de date a fost deteriorată în timpul transmisiei și trebuie respinsă.

Ce este un Hamming Code?

Codul Hamming este un cod liniar util pentru detectarea a până la două erori imediate pe bit și corectarea erorilor pe un singur bit. Corecția erorilor de acest tip operează de obicei la nivelul legăturii de date, încadrând datele și verificând integritatea acestora între nodurile adiacente.

În codul Hamming, sursa codifică mesajul prin adăugarea de biți redundanți. Acești biți redundanți sunt inserați și generați în poziții specifice din mesaj pentru a efectua procesul de detectare și corectare a erorilor.

Istoria lui Hamming Code

  • Codul Hamming este o tehnică dezvoltată de RW Hamming pentru detectarea și corectarea erorilor.
  • Poate fi aplicat unităților de date de orice lungime și utilizează relația dintre biții de date și biții de redundanță.
  • Hamming a lucrat la problema corecției erorilor și a dezvoltat o gamă din ce în ce mai puternică de algoritmi.
  • În 1950, a publicat codul Hamming, care este încă utilizat pe scară largă astăzi în aplicații precum memoria ECC.

Aplicații ale lui Hamming Code

Iată câteva aplicații comune ale codului Hamming:

  • Sateliții
  • Memoria computerului (ECC RAM)
  • modemurile
  • PlasmaCAM
  • Deschideți conectori
  • Sârmă ecranată
  • Procesoare încorporate

Avantajele Hamming Code

  • Codul Hamming este eficient în rețelele în care fluxurile de date sunt expuse la erori pe un singur bit.
  • Nu numai că detectează o eroare de bit, dar vă ajută și să identificați bitul care conține eroarea, astfel încât aceasta să poată fi corectată.
  • Ușurința în utilizare a codurilor Hamming le face potrivite pentru memoria computerului și corectarea erorilor singulare.

Dezavantaje ale lui Hamming Code

  • Este un cod de detectare și corectare a erorilor pe un singur bit. Dacă se constată că mai mulți biți sunt eronați, rezultatul poate inversa un alt bit care era de fapt corect, corupând și mai mult datele.
  • Algoritmul codului Hamming poate rezolva doar probleme pe un singur bit.

Cum se codifică un mesaj în Hamming Code

Procesul pe care expeditorul îl folosește pentru a codifica mesajul implică următorii trei pași:

  • Calculați numărul total de biți redundanți.
  • Determinați poziția biților redundanți.
  • Calculați valoarea fiecărui bit redundant.

Când biții redundanți sunt încorporați în mesaj, cuvântul de cod complet este trimis receptorului.

Pasul 1) Calculați numărul total de biți redundanți.

Presupunem că mesajul conține n biți de date și p biți redundanți, adăugați astfel încât 2p poate indica cel puțin (n + p + 1) stări diferite.

Aici, (n + p) reprezintă locația unei erori în fiecare dintre pozițiile biților (n + p), iar o stare suplimentară indică lipsa unei erori. Deoarece p biți de paritate pot indica 2p state, 2p trebuie să fie cel puțin egal cu (n + p + 1).

Pasul 2) Plasați biții redundanți în pozițiile lor corecte.

Cei p biți redundanți sunt plasați la poziții de biți care sunt puteri ale lui 2 - de exemplu, 1, 2, 4, 8 și 16. Aceștia sunt denumiți p1 (la poziția 1), p2 (la poziția 2), p3 (la poziția 4) și așa mai departe.

Pasul 3) Calculați valoarea fiecărui bit redundant.

Fiecare bit redundant este un bit de paritate care face ca numărul de 1-uri din grupul său să fie par sau impar. Cele două tipuri de paritate sunt:

  • Paritate uniformă: Numărul total de 1-uri din pozițiile acoperite este par.
  • Paritate impară: Numărul total de 1-uri din pozițiile acoperite este făcut impar.

Fiecare bit de paritate acoperă un set specific de poziții, determinat de reprezentarea binară a numerelor de poziție:

  • p1 verifică fiecare poziție a cărei valoare binară are un 1 în bitul cel mai puțin semnificativ - pozițiile 1, 3, 5, 7, 9, 11 și așa mai departe.
  • p2 verifică fiecare poziție a cărei valoare binară are un 1 în al doilea bit de la dreapta — pozițiile 2, 3, 6, 7, 10, 11 și așa mai departe.
  • p3 verifică fiecare poziție a cărei valoare binară are un 1 în al treilea bit de la dreapta — pozițiile 4 la 7, 12 la 15 și așa mai departe.

Exemplu lucrat (7,4): Luați în considerare cei patru biți de date 1011Sunt necesari trei biți de paritate (23 = 8 ≥ 4 + 3 + 1), rezultând un cuvânt de cod pe șapte biți, prezentat ca p1 p2 d1 p3 d2 d3 d4Plasarea datelor plasează pozițiile 3, 5, 6, 7 = 1, 0, 1, 1. Folosind paritatea pară: p1 acoperă pozițiile 1, 3, 5, 7 (biții 1, 0, 1 → p1 = 0); p2 acoperă 2, 3, 6, 7 (biții 1, 1, 1 → p2 = 1); p3 acoperă 4, 5, 6, 7 (biții 0, 1, 1 → p3 = 0). Cel/Cea/Cei/Cele transmitPrin urmare, cuvântul de cod Ted este 0110011.

Cum să decodezi un mesaj în Hamming Code

Destinatarul preia mesajul primit și efectuează recalculări pentru a găsi și corecta erorile. Procesul de recalculare utilizează următorii pași:

  • Numărați numărul de biți redundanți.
  • Poziționați corect toți biții redundanți.
  • Efectuați verificarea parității.

Pasul 1) Numărați numărul de biți redundanți. Folosește aceeași formulă ca pentru codificare: 2p ≥ n + p + 1, unde n este numărul de biți de date, iar p este numărul de biți redundanți.

Pasul 2) Poziționați corect toți biții redundanți. Fiecare bit redundant se află la o poziție de bit care este o putere a lui 2 - de exemplu, 1, 2, 4 și 8.

Pasul 3) Efectuați verificarea parității. Biții de paritate sunt recalculați din biții de date și biții redundanți recepționați:

  • p1 = paritate(1, 3, 5, 7, 9, 11, …)
  • p2 = paritate(2, 3, 6, 7, 10, 11, …)
  • p3 = paritate(4–7, 12–15, 20–23, …)

Biții de paritate recalculați formează împreună un număr binar. Dacă acel număr este zero, nu există nicio eroare; în caz contrar, valoarea sa indică poziția exactă a bitului unic corupt, care este apoi inversat pentru a corecta mesajul.

Întrebări frecvente

Distanța Hamming este numărul de poziții de biți în care diferă două șiruri binare de lungime egală. În codurile de corectare a erorilor, distanța Hamming minimă dintre cuvintele de cod valide determină câte erori pot fi detectate sau corectate. Codul Hamming standard are o distanță minimă de trei.

Hamming(7,4) codifică patru biți de date într-un cuvânt de cod pe șapte biți prin adăugarea a trei biți de paritate. Corectează orice eroare de un singur bit și detectează erorile de doi biți. Notația (n, k) indică lungimea totală a cuvântului de cod n și numărul de biți de date k.

Un singur bit de paritate detectează doar un număr impar de erori de biți și nu le poate localiza sau corecta. Codul Hamming folosește mai mulți biți de paritate la poziții de tip putere a doi, astfel încât identifică exact bitul defect și îl corectează automat.

Codul Hamming de bază corectează erorile de un bit, dar poate corecta greșit erorile de doi biți. Adăugarea unui bit de paritate generală care acoperă întregul cuvânt de cod creează SECDED (corecție de eroare unică, detectare de eroare dublă), ridicând distanța minimă la patru și detectând în mod fiabil erorile de doi biți.

Detectarea și corectarea erorilor au loc în principal la nivelul legăturii de date al Modelul OSI, care încadrează datele și le verifică integritatea între nodurile adiacente. Protocoalele de nivel de transport adaugă verificări end-to-end, în timp ce mediul fizic introduce zgomotul împotriva căruia aceste coduri se protejează.

Codul Hamming este un cod bloc liniar. Acesta procesează simultan un bloc de biți de date de dimensiune fixă ​​și adaugă biți de paritate, spre deosebire de codurile convoluționale care codifică un flux continuu de biți folosind memoria biților anteriori. Acest lucru face ca codul Hamming să fie simplu și rapid.

Modelele de învățare automată învață tiparele de zgomot ale unui canal și prezic probabilele erori de biți, îmbunătățind precizia decodării dincolo de schemele fixe. Decodoarele bazate pe inteligență artificială pentru coduri LDPC și polare ajută acum sistemele moderne de stocare și 5G, acolo unde codul Hamming clasic este insuficient.

Copilotul GitHub poate structura funcțiile de codificare și decodificare, poate genera măști de biți de paritate și poate elabora teste unitare dintr-un comentariu scurt. Verificați matematica poziției bitului și grupul de paritatepingcu atenție, deoarece indexarea off-by-one este o sursă frecventă de erori în codul generat.

Rezumați această postare cu: