Hamming CodeVirheiden havaitseminen ja korjaaminen esimerkkien avulla

⚡ Älykäs yhteenveto

Hamming-koodi on lineaarinen virheenkorjauskoodi, joka lisää redundantteja pariteettibittejä kahden potenssiin, jolloin vastaanotin voi havaita jopa kahden bitin virheet ja korjata automaattisesti kaikki yhden bitin virheet tiedonsiirron aikana.

  • 🧭 Tarkoitus: Hamming-koodi havaitsee ja korjaa lähetysvirheet upottamalla pariteettibittejä, jotka paikantavat vioittuneen bitin tarkan sijainnin.
  • 🔢 Redundantit bitit: Pariteettibittien lukumäärä (p) täyttää säännön 2^p ≥ n + p + 1, jossa n on databittien lukumäärä.
  • 📍 Sijoitus: Pariteettibitit miehittävät kahden potenssi -paikat – 1, 2, 4 ja 8 – kun taas databitit täyttävät loput paikat.
  • 🧮 Hamming(7,4): Yleinen muoto koodaa neljä databittiä seitsemäksi kokonaisbitiksi käyttämällä kolmea pariteettibittiä.
  • 🧯 rajoitus: Hamming-koodin standardi korjaa vain yhden bitin virheet; ylimääräinen pariteettibitti lisää kaksoisvirheiden tunnistuksen (SECDED).
  • 🤖 AI-apu: Koneoppivat dekooderit auttavat merkitsemään kohinaisia ​​kanavia ja virhekuvioita, jotka pelkät kiinteät koodit saattavat jäädä huomaamatta.

Hamming-koodin virheiden havaitseminen ja korjaus pariteettibittien avulla

Mikä on virhe?

TransmitSyötetty data voi vioittua tiedonsiirron aikana. Ulkoinen kohina tai muut fyysiset viat voivat vaikuttaa siihen. Tällaisessa tilanteessa syöttödata ei voi olla sama kuin lähtödata. Tätä ristiriitaa kutsutaan virheeksi.

Datavirheet voivat aiheuttaa tärkeiden tai suojattujen tietojen menetyksen. Suurin osa digitaalisten järjestelmien tiedonsiirrosta tapahtuu "bittisiirtona", ja pienikin yhden bitin muutos voi vaikuttaa koko järjestelmän suorituskykyyn. Jos datasekvenssissä 1 muuttuu arvoksi 0 tai 0 arvoksi 1, sitä kutsutaan "bittivirheeksi".

Virhetyypit

Dataa siirrettäessä esiintyy pääasiassa kolmenlaisia ​​bittivirheitä transmitlähettäjältä vastaanottajalle. Alla oleva kaavio havainnollistaa, miten kukin tyyppi vaikuttaa datasekvenssiin:

Kaavio, joka vertaa yksibittisiä, monibittisiä ja purskevirheitä binääridatasekvenssissä

  • Yhden bitin virheitä
  • Useita bittivirheitä
  • Pursotusvirheet

Yhden bitin virheet

Yhden bitin muutosta koko datasekvenssissä kutsutaan "yksibittiseksi virheeksi". Yksibittisen virheen esiintyminen ei ole kovin yleinen. Se tapahtuu enimmäkseen rinnakkaistietoliikennejärjestelmissä, koska data siirretään bitti kerrallaan erillisillä riveillä, joten on suurempi todennäköisyys, että yksi rivi muuttuu kohinaiseksi, kun taas muut pysyvät puhtaina.

Useita bittivirheitä

Kun kaksi tai useampi datajonon bitti muuttuu niiden välillä transmitja vastaanottimen välillä sitä kutsutaan "monibittiseksi virheeksi".

Tämän tyyppistä virhettä esiintyy sekä sarja- että rinnakkaistietoverkoissa.

Pursotusvirheet

Muutos joukkoon peräkkäisiä bittejä datajonossa tunnetaan nimellä "purskevirhe". Purskevirheen pituus mitataan ensimmäisestä muutetusta bitistä viimeiseen muuttuneeseen bittiin.

Mitä on virheiden havaitseminen ja virheenkorjaus?

Digitaalisessa viestintäjärjestelmässä virheitä voi syntyä datan siirtyessä laitteesta toiseen. Jos näitä virheitä ei havaita ja korjata, data menetetään. Tehokkaan viestinnän edellytyksenä on datan siirto suurella tarkkuudella, mikä saavutetaan tunnistamalla virheet ensin ja korjaamalla ne sitten.

Virheiden havaitseminen on menetelmä datassa olevien virheiden löytämiseksi transmitted jostakin transmitter vastaanottimelle a:ssa tietoliikenne järjestelmään.

Redundanssikoodeja käytetään näiden virheiden löytämiseen lisäämällä dataan ylimääräisiä bittejä, kun se on transmitlähteestä. Näitä ylimääräisiä bittejä kutsutaan "virheentunnistuskoodeiksi". Kolme yleisintä virheentunnistuskoodityyppiä ovat:

  • Pariteetin tarkistus
  • Cyclic Redundancy Check (CRC)
  • Pituussuuntainen redundanssitarkistus (LRC)

Pariteetin tarkistus

  • Se tunnetaan myös pariteettitarkistuksena.
  • Se tarjoaa kustannustehokkaan mekanismin virheiden havaitsemiseen.
  • Tässä tekniikassa jokaiseen datayksikköön lisättävää redundanttia bittiä kutsutaan pariteettibitiksi. Se asetetaan siten, että yksikön ykkösten kokonaismäärästä tulee parillinen (parillinen pariteetti) tai pariton (pariton pariteetti).

Pituussuuntainen redundanssin tarkistus

Tässä virheentunnistustekniikassa bittilohko järjestetään taulukkoon. LRC-menetelmä laskee pariteettibitin jokaiselle sarakkeelle, ja tämä pariteettibittijoukko lähetetään alkuperäisen datan mukana. Pariteettibittilohko auttaa vastaanottajaa tarkistamaan redundanssin ja havaitsemaan virheitä.

Syklinen redundanssitarkistus

Syklinen redundanssitarkistus liittää datayksikön loppuun sarjan redundantteja bittejä siten, että tuloksena oleva datayksikkö on täsmälleen jaollinen toisella, ennalta määrätyllä binääriluvulla.

Määränpäässä saapuva data jaetaan samalla luvulla. Jos jakojäännöstä ei ole, datayksikön oletetaan olevan oikea ja se hyväksytään. Muussa tapauksessa se osoittaa, että datayksikkö on vaurioitunut lähetyksessä, ja se on hylättävä.

Mikä on Hamming Code?

Hamming-koodi on lineaarinen koodi, joka on hyödyllinen jopa kahden välittömän bittivirheen havaitsemiseen ja yksittäisten bittien virheiden korjaamiseen. Tällainen virheenkorjaus toimii tyypillisesti tiedonsiirtokerroksella, jossa dataa kehystetään ja tarkistetaan sen eheys vierekkäisten solmujen välillä.

Hamming-koodissa lähde koodaa viestin lisäämällä redundantteja bittejä. Nämä redundanttiset bitit lisätään ja luodaan tiettyihin kohtiin viestissä virheiden havaitsemis- ja korjausprosessin suorittamiseksi.

Hammingin historia Code

  • Hamming-koodi on RW Hammingin kehittämä tekniikka virheiden havaitsemiseksi ja korjaamiseksi.
  • Sitä voidaan soveltaa minkä tahansa pituisiin datayksiköihin ja se hyödyntää databittien ja redundanssibittien välistä suhdetta.
  • Hamming työskenteli virheenkorjauksen ongelman parissa ja kehitti yhä tehokkaamman joukon algoritmeja.
  • Vuonna 1950 hän julkaisi Hamming-koodin, jota käytetään edelleen laajalti sovelluksissa, kuten ECC-muistissa.

Hammingin sovellukset Code

Tässä on joitakin Hamming-koodin yleisiä sovelluksia:

  • satelliitit
  • Tietokoneen muisti (ECC RAM)
  • modeemit
  • PlasmaCAM
  • Avaa liittimet
  • Suojattu lanka
  • Sulautetut prosessorit

Hammingin edut Code

  • Hamming-koodi on tehokas verkoissa, joissa datavirrat altistuvat yhden bitin virheille.
  • Se ei ainoastaan ​​havaitse bittivirhettä, vaan auttaa myös tunnistamaan virheen sisältävän bitin, jotta se voidaan korjata.
  • Hamming-koodien helppokäyttöisyys tekee niistä sopivia tietokoneen muistiin ja yksittäisten virheiden korjaukseen.

Hammingin haitat Code

  • Se on yksibittinen virheentunnistus- ja korjauskoodi. Jos useissa biteissä havaitaan virheitä, tulos voi kääntää toisen, oikean bitin, mikä voi vääristää dataa entisestään.
  • Hamming-koodin algoritmi pystyy ratkaisemaan vain yhden bitin ongelmia.

Kuinka koodata viesti Hammingissa Code

Lähettäjän viestin koodaamiseen käyttämä prosessi sisältää seuraavat kolme vaihetta:

  • Laske redundanttien bittien kokonaismäärä.
  • Määritä redundanttien bittien sijainti.
  • Laske jokaisen redundantin bitin arvo.

Kun redundantit bitit on upotettu viestiin, koko koodisana lähetetään vastaanottajalle.

Vaihe 1) Laske redundanttien bittien kokonaismäärä.

Oletetaan, että viesti sisältää n databittejä ja p redundantit bitit, lisätty siten, että 2p voi osoittaa ainakin (n + p + 1) eri tilaa.

Tässä (n + p) kuvaa virheen sijaintia kussakin (n + p) bittipaikassa, ja yksi ylimääräinen tila tarkoittaa, ettei virhettä ole. Koska p pariteettibittiä voi ilmaista 2p osavaltiot, 2p on oltava vähintään yhtä suuri kuin (n + p + 1).

Vaihe 2) Aseta ylimääräiset osat oikeille paikoilleen.

P redundanttia bittiä sijoitetaan bittipaikoille, jotka ovat luvun 2 potensseja – esimerkiksi 1, 2, 4, 8 ja 16. Niitä kutsutaan p:ksi1 (paikassa 1), s2 (paikassa 2), s3 (sijalla 4) ja niin edelleen.

Vaihe 3) Laske kunkin redundantin bitin arvo.

Jokainen redundantti bitti on pariteettibitti, joka tekee sen ryhmässä olevien ykkösten lukumäärästä joko parillisen tai parittoman. Pariteettityyppejä on kaksi:

  • Parillinen pariteetti: Peitettyjen positioiden ykkösten kokonaismäärästä tehdään parillinen.
  • Pariton pariteetti: Peitettyjen paikkojen ykkösten kokonaismäärästä tehdään pariton.

Jokainen pariteettibitti kattaa tietyn joukon positioita, jotka määräytyvät positionumeroiden binääriesityksen perusteella:

  • p1 tarkistaa kaikki paikat, joiden binääriarvon vähiten merkitsevässä bitissä on 1 – paikat 1, 3, 5, 7, 9, 11 ja niin edelleen.
  • p2 tarkistaa kaikki paikat, joiden binääriarvon toisessa bitissä oikealta on 1 – paikat 2, 3, 6, 7, 10, 11 ja niin edelleen.
  • p3 tarkistaa kaikki paikat, joiden binääriarvon kolmannessa bitissä oikealta on luku 1 – paikat 4–7, 12–15 ja niin edelleen.

Työesimerkki (7,4): Tarkastellaan neljää databittiä 1011Kolme pariteettibittiä vaaditaan (23 = 8 ≥ 4 + 3 + 1), jolloin saadaan seitsemänbittinen koodisana, joka on esitetty muodossa p1 p2 d1 p3 d2 d3 d4Datan sijoittelu asettaa paikat 3, 5, 6, 7 = 1, 0, 1, 1. Käyttämällä parillista pariteettia: p1 kattaa paikat 1, 3, 5, 7 (bitit 1, 0, 1 → p1 = 0); s2 kattaa bitit 2, 3, 6, 7 (bitit 1, 1, 1 → p2 = 1); s3 kattaa bitit 4, 5, 6, 7 (bitit 0, 1, 1 → p3 = 0). transmitted-koodisana on siis 0110011.

Kuinka dekoodata viesti Hammingissa Code

Vastaanottaja ottaa vastaan ​​saapuvan viestin ja suorittaa uudelleenlaskentoja virheiden löytämiseksi ja korjaamiseksi. Uudelleenlaskentaprosessissa käytetään seuraavia vaiheita:

  • Laske redundanttien bittien lukumäärä.
  • Sijoita kaikki tarpeettomat osat oikein.
  • Suorita pariteettitarkistus.

Vaihe 1) Laske redundanttien bittien lukumäärä. Käytä samaa kaavaa kuin koodauksessa: 2p ≥ n + p + 1, jossa n on databittien lukumäärä ja p on redundanttien bittien lukumäärä.

Vaihe 2) Aseta kaikki tarpeettomat osat oikein. Jokainen redundantti bitti sijaitsee bittiasemassa, joka on kahden potenssi – esimerkiksi 1, 2, 4 ja 8.

Vaihe 3) Suorita pariteettitarkistus. Pariteettibitit lasketaan uudelleen databiteistä ja vastaanotetuista redundanteista biteistä:

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

Uudelleenlasketut pariteettibitit muodostavat yhdessä binääriluvun. Jos luku on nolla, virhettä ei ole; muussa tapauksessa sen arvo antaa yksittäisen vioittuneen bitin tarkan sijainnin, joka sitten käännetään ympäri viestin korjaamiseksi.

UKK

Hamming-etäisyys on bittipositioiden lukumäärä, jossa kaksi samanpituista binäärijonoa eroavat toisistaan. Virheenkorjauskoodeissa kelvollisten koodisanojen välinen pienin Hamming-etäisyys määrittää, kuinka monta virhettä voidaan havaita tai korjata. Tavallisessa Hamming-koodissa pienin etäisyys on kolme.

Hamming(7,4) koodaa neljä databittiä seitsemänbittiseksi koodisanaksi lisäämällä kolme pariteettibittiä. Se korjaa kaikki yhden bitin virheet ja havaitsee kahden bitin virheet. Merkintätapa (n, k) ilmaisee koodisanan kokonaispituuden n ja databittien lukumäärän k.

Yksi pariteettibitti havaitsee vain parittoman määrän bittivirheitä eikä pysty paikantamaan tai korjaamaan niitä. Hamming-koodi käyttää useita pariteettibittejä kahden potenssissa, joten se paikantaa tarkalleen virheellisen bitin ja korjaa sen automaattisesti.

Hamming-koodin perusversio korjaa yhden bitin virheet, mutta se voi korjata kaksibittiset virheet väärin. Yhden pariteettibitin lisääminen koko koodisanaan luo SECDED:n (single error correction, double error detection), mikä nostaa minimietäisyyden neljään ja havaitsee kaksibittiset virheet luotettavasti.

Virheiden havaitseminen ja korjaaminen tapahtuu pääasiassa tiedonsiirtoyhteyden tasolla. OSI-malli, joka kehystää dataa ja tarkistaa sen eheyden vierekkäisten solmujen välillä. Siirtokerroksen protokollat ​​lisäävät päästä päähän -tarkistuksia, kun taas fyysinen väliaine tuo kohinan, jolta nämä koodit suojaavat.

Hamming-koodi on lineaarinen lohkokoodi. Se käsittelee kerrallaan kiinteän kokoisen databittilohkon ja lisää siihen pariteettibittejä, toisin kuin konvoluutiokoodit, jotka koodaavat jatkuvan bittivirran käyttämällä aiempien bittien muistia. Tämä tekee Hamming-koodista yksinkertaisen ja nopean.

Koneoppimismallit oppivat kanavan kohinakuviot ja ennustavat todennäköisiä bittivirheitä, mikä parantaa dekoodauksen tarkkuutta kiinteiden menetelmien lisäksi. Tekoälypohjaiset LDPC- ja polaarikoodien dekooderit auttavat nyt moderneja 5G- ja tallennusjärjestelmiä, joissa klassinen Hamming-koodi yksinään ei riitä.

GitHub Copilot osaa scaffolding-kooderi- ja dekooderifunktioita, luoda pariteettibittimaskeja ja luonnostella yksikkötestejä lyhyen kommentin pohjalta. Tarkistaa bittipaikan matematiikan ja pariteettiryhmittelynpings huolellisesti, koska epätarkka indeksointi on yleinen virheiden lähde luodussa koodissa.

Tiivistä tämä viesti seuraavasti: