Hamming kode

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 2. marts 2021; checks kræver 12 redigeringer .
Binær Hamming-kode

Hamming kode med
Opkaldt efter Richard Hamming
Type lineær blokkode
Blok længde
Beskedens længde
Del
Afstand 3
Alfabet størrelse 2
Betegnelse
 Mediefiler på Wikimedia Commons

Hamming-koden  er en selvkontrollerende og selvkorrigerende kode . Bygget med reference til det binære talsystem .

Giver dig mulighed for at rette en enkelt fejl (en fejl i en bit af et ord) og finde en dobbelt [1] .

Opkaldt efter den amerikanske matematiker Richard Hamming , der foreslog koden.

Historie

I midten af ​​1940'erne blev Bell Model V - regnemaskinen skabt på Bell Laboratories . Det var en elektromekanisk maskine, der brugte relæblokke, hvis hastighed var meget lav: en operation på få sekunder. Data blev indtastet i maskinen ved hjælp af hulkort med upålidelige læseenheder, så der opstod ofte fejl under læseprocessen. På arbejdsdage blev der brugt specielle koder til at opdage og rette fundne fejl, mens operatøren lærte om fejlen ved lysets skær, rettede og genstartede maskinen. I weekender, hvor der ikke var nogen operatører, ville maskinen, hvis der opstod en fejl, automatisk afslutte programmet og starte et nyt.

Hamming arbejdede ofte i weekenden og blev mere og mere irriteret, da han måtte genindlæse sit program på grund af hulkortlæserens upålidelighed. I flere år ledte han efter en effektiv fejlkorrektionsalgoritme. I 1950 udgav han en kodningsmetode kendt som Hamming-koden.

Systematiske koder

Systematiske koder danner en stor gruppe af blokke, adskillelige koder (hvor alle symboler i et ord kan opdeles i verifikation og information). Et træk ved systematiske koder er, at kontrolsymboler dannes som et resultat af lineære logiske operationer på informationssymboler. Derudover kan ethvert tilladt kodeord opnås som et resultat af lineære operationer på et sæt lineært uafhængige kodeord.

Selvkontrollerende koder

Hamming-koder er selvovervågningskoder, det vil sige koder, der automatisk opdager fejl i datatransmission. For at bygge dem er det nok at tildele et ekstra (kontrol) binært ciffer til hvert ord og vælge cifferet for dette ciffer, så det samlede antal enheder i billedet af ethvert tal er for eksempel ulige. En enkelt fejl i et hvilket som helst ciffer i det transmitterede ord (herunder måske i kontrolcifferet) vil ændre pariteten af ​​det samlede antal enheder. Modulo 2-tællere, der tæller antallet af dem, der er indeholdt blandt de binære cifre i et tal, giver et signal om tilstedeværelsen af ​​fejl. I dette tilfælde er det umuligt at vide, i hvilken position af ordet fejlen opstod, og derfor er der ingen måde at rette den på. Fejl, der opstår samtidigt i to, fire osv. - i et lige antal cifre forbliver også ubemærket. Det antages, at dobbelte og endnu mere flere fejl er usandsynlige.

Selvkorrigerende koder

Koder, hvor automatisk fejlretning er mulig, kaldes selvkorrigerende. For at bygge en selvkorrigerende kode designet til at rette enkelte fejl, er et kontrolciffer ikke nok. Som det fremgår af det følgende, skal antallet af kontrolbits vælges således, at uligheden eller er opfyldt , hvor  er antallet af informationsbinære bits af kodeordet. Minimumsværdierne af k for givne værdier af m, fundet i overensstemmelse med denne ulighed, er angivet i tabellen.

Rækkevidde m kmin _
en 2
2-4 3
5-11 fire
12-26 5
27-57 6

Af størst interesse er binære blokkorrektionskoder . Ved brug af sådanne koder transmitteres information i form af blokke af samme længde, og hver blok kodes og afkodes uafhængigt af den anden. I næsten alle blokkoder kan symboler opdeles i information og kontrol eller kontrol. Således er alle ord opdelt i tilladte (hvor forholdet mellem information og kontroltegn er muligt) og forbudte.

Hovedkarakteristika ved selvkorrigerende koder:

  1. Antallet af tilladte og forbudte kombinationer. Hvis  - antallet af tegn i blokken  - antallet af kontroltegn i blokken  - antallet af informationstegn, så  - antallet af mulige kodekombinationer  - antallet af tilladte kodekombinationer  - antallet af forbudte kombinationer .
  2. Kode redundans. Værdien kaldes redundansen af ​​korrektionskoden.
  3. Minimum kodeafstand. Den mindste kodeafstand er det mindste antal forvrængede symboler, der kræves for at skifte fra en tilladt kombination til en anden.
  4. Antallet af fejl opdaget og rettet. Hvis  er antallet af fejl, som koden er i stand til at rette, så er det nødvendigt og tilstrækkeligt
  5. Korrigerende koder.

Plotkin -grænsen giver en øvre grænse for kodeafstanden:

eller:

Hamming-grænsen indstiller det maksimalt mulige antal tilladte kodekombinationer:

hvor  er antallet af kombinationer af elementer for elementer. Herfra kan du få et udtryk for at estimere antallet af tjeksymboler:

For værdier er forskellen mellem Hamming-bundet og Plotkin-bundet lille.

Varshamov-Gilbert-grænsen for stort n definerer en nedre grænse for antallet af check-symboler:

Alle ovenstående estimater giver en idé om den øvre grænse ved faste og eller et lavere estimat af antallet af check-symboler.

Hamming kode

Konstruktionen af ​​Hamming-koder er baseret på princippet om at kontrollere antallet af enkelttegn for paritet: et sådant element føjes til sekvensen, så antallet af enkelttegn i den resulterende sekvens er lige:

Tegnet her betyder modulo 2 addition :

Hvis  - så er der ingen fejl, hvis  - så en enkelt fejl.

En sådan kode kaldes eller . Det første tal er antallet af sekvenselementer, det andet er antallet af informationstegn.

For hvert antal afkrydsningssymboler er der en klassisk Hamming-kode med markeringer:

altså - .

Med andre værdier fås den såkaldte trunkerede kode, for eksempel den internationale telegrafkode MTK-2, som har . Det kræver en Hamming-kode, som er en trunkeret version af klassikeren

Overvej for eksempel den klassiske Hamming-kode . Lad os gruppere afkrydsningssymbolerne som følger:

At få kodeordet ser sådan ud:

= .

Dekoderens input modtager et kodeord , hvor symboler er markeret med et streg, som kan blive forvrænget som følge af interferens. I dekoderen i fejlkorrektionstilstanden bygges en sekvens af syndromer:

kaldet sekvenssyndromet.

At få syndromet ser sådan ud:

= .
0 0 0 0 0 0 0 en 0 0 0 en 0 en
0 0 0 en 0 en en en 0 0 en en en 0
0 0 en 0 en en 0 en 0 en 0 0 en en
0 0 en en en 0 en en 0 en en 0 0 0
0 en 0 0 en en en en en 0 0 0 en 0
0 en 0 en en 0 0 en en 0 en 0 0 en
0 en en 0 0 0 en en en en 0 en 0 0
0 en en en 0 en 0 en en en en en en en

Kodeordene for Hamming-koden er angivet i tabellen.

Syndromet indikerer, at der ikke er nogen forvrængning i sekvensen. Hvert ikke-nul syndrom svarer til et bestemt fejlmønster, som korrigeres på afkodningsstadiet.

Syndrom 001 010 011 100 101 110 111
Fejlkonfiguration
_
0000001 0000010 0001000 0000100 1000000 0010000 0100000

Symbol fejl

For koden i tabellen til højre er ikke-nul syndromer og deres tilsvarende fejlkonfigurationer angivet (for formen: ).

Kodningsalgoritme

Antag, at vi skal generere en Hamming-kode for et eller andet informationskodeord. Lad os tage et 15-bit kodeord som eksempel, selvom algoritmen er velegnet til kodeord af enhver længde. I tabellen nedenfor giver den første linje positionsnumrene i kodeordet, den anden linje giver bitbetegnelsen, og den tredje linje giver bitværdierne.

en 2 3 fire 5 6 7 otte 9 ti elleve 12 13 fjorten femten
x 1 x2 _ x 3 x4 _ x5 _ x6 _ x 7 x 8 x9 _ x 10 x 11 x 12 x 13 x 14 x 15
en 0 0 en 0 0 en 0 en en en 0 0 0 en

Lad os indsætte kontrolbits i informationsordet på en sådan måde, at deres positionsnumre er heltalspotenser af to: 1, 2, 4, 8, 16 ... Vi får et 20-bit ord med 15 informationer og 5 kontrolbits. Indledningsvis sættes kontrolbittene til nul. På figuren er kontrolbits fremhævet med pink.

en 2 3 fire 5 6 7 otte 9 ti elleve 12 13 fjorten femten 16 17 atten 19 tyve
r0 _ r1 _ x 1 r2 _ x2 _ x 3 x4 _ r3 _ x5 _ x6 _ x 7 x 8 x9 _ x 10 x 11 r4 _ x 12 x 13 x 14 x 15
0 0 en 0 0 0 en 0 0 0 en 0 en en en 0 0 0 0 en

Generelt er antallet af kontrolbits i et kodeord lig med den binære logaritme af et tal, der er en større end antallet af bits i kodeordet (inklusive kontrolbits); logaritmen rundes op. For eksempel kræver et 1-bit informationsord to kontrolbit, et 2-, 3- eller 4-bit informationsord kræver tre, et 5...11-bit informationsord kræver fire, et 12...26- bit information ord kræver fem, og så videre.

Lad os tilføje 5 rækker til tabellen (i henhold til antallet af kontrolbits), hvori vi vil placere transformationsmatrixen. Hver række vil svare til en kontrolbit (nul kontrolbit er den øverste linje, den fjerde er den nederste), hver kolonne vil svare til en bit af det kodede ord. I hver kolonne i transformationsmatricen placerer vi det binære tal for denne kolonne, og rækkefølgen af ​​bits vil blive omvendt - den mindst signifikante bit vil blive placeret i den øverste linje, den mest signifikante - i bunden. For eksempel vil den tredje kolonne i matrixen indeholde tallene 11000, som svarer til den binære repræsentation af tallet tre: 00011.

en 2 3 fire 5 6 7 otte 9 ti elleve 12 13 fjorten femten 16 17 atten 19 tyve
r0 _ r1 _ x 1 r2 _ x2 _ x 3 x4 _ r3 _ x5 _ x6 _ x 7 x 8 x9 _ x 10 x 11 r4 _ x 12 x 13 x 14 x 15
0 0 en 0 0 0 en 0 0 0 en 0 en en en 0 0 0 0 en
en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 r0 _
0 en en 0 0 en en 0 0 en en 0 0 en en 0 0 en en 0 r1 _
0 0 0 en en en en 0 0 0 0 en en en en 0 0 0 0 en r2 _
0 0 0 0 0 0 0 en en en en en en en en 0 0 0 0 0 r3 _
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 en en en en en r4 _

I højre del af tabellen blev en kolonne efterladt tom, hvori vi placerer resultaterne af beregningen af ​​kontrolbittene. Vi beregner kontrolbittene som følger: vi tager en af ​​rækkerne i transformationsmatricen (for eksempel ) og finder dens skalarprodukt med kodeordet, det vil sige, vi multiplicerer de tilsvarende bits i begge rækker og finder summen af Produkter. Hvis summen viste sig at være større end én, finder vi resten af ​​dens division med 2. Med andre ord tæller vi, hvor mange gange der er enheder på de samme positioner i kodeordet og den tilsvarende række i matricen, og tag dette tal modulo 2.

Hvis vi beskriver denne proces i form af matrixalgebra, så er operationen en multiplikation af transformationsmatrixen med matrixkolonnen i kodeordet, hvilket resulterer i en matrixkolonne af kontrolbits, som skal tages modulo 2.

For eksempel for linjen :

= (1 0+0 0+1 1+0 0+1 0+0 0+1 1+0 0+1 0+0 0+1 1+0 0+ 1 1+0 1+1 1+0 0+ 1 0+0 0+1 0+0 1) mod 2 = 5 mod 2 = 1.

De resulterende kontrolbits indsættes i kodeordet i stedet for de nuller, der var der tidligere. Analogt finder vi kontrolbittene i de resterende linjer. Hamming-kodning er færdig. Det modtagne kodeord er 11110010001011110001.

en 2 3 fire 5 6 7 otte 9 ti elleve 12 13 fjorten femten 16 17 atten 19 tyve
r0 _ r1 _ x 1 r2 _ x2 _ x 3 x4 _ r3 _ x5 _ x6 _ x 7 x 8 x9 _ x 10 x 11 r4 _ x 12 x 13 x 14 x 15
en en en en 0 0 en 0 0 0 en 0 en en en en 0 0 0 en
en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 r0 _ en
0 en en 0 0 en en 0 0 en en 0 0 en en 0 0 en en 0 r1 _ en
0 0 0 en en en en 0 0 0 0 en en en en 0 0 0 0 en r2 _ en
0 0 0 0 0 0 0 en en en en en en en en 0 0 0 0 0 r3 _ 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 en en en en en r4 _ en

Afkodningsalgoritme

Hamming-afkodningsalgoritmen er fuldstændig identisk med indkodningsalgoritmen. Transformationsmatrixen for den tilsvarende dimension multipliceres med kodeordskolonnematrixen, og hvert element i den resulterende kolonnematrix tages modulo 2. Den resulterende kolonnematrix kaldes "syndrommatrixen". Det er let at verificere, at et kodeord, der er genereret i overensstemmelse med algoritmen beskrevet i det foregående afsnit, altid giver en nul-syndrom-matrix.

Syndrommatricen bliver ikke-nul, hvis en af ​​bits i det oprindelige ord har ændret sin værdi som følge af en fejl (f.eks. ved overførsel af et ord over en støjende kommunikationslinje). Antag for eksempel, at i kodeordet opnået i det foregående afsnit, har den sjette bit ændret sin værdi fra nul til én (angivet med rødt i figuren). Så får vi følgende matrix af syndromer.

en 2 3 fire 5 6 7 otte 9 ti elleve 12 13 fjorten femten 16 17 atten 19 tyve
r0 _ r1 _ x 1 r2 _ x2 _ x 3 x4 _ r3 _ x5 _ x6 _ x 7 x 8 x9 _ x 10 x 11 r4 _ x 12 x 13 x 14 x 15
en en en en 0 en en 0 0 0 en 0 en en en en 0 0 0 en
en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 en 0 s0 _ 0
0 en en 0 0 en en 0 0 en en 0 0 en en 0 0 en en 0 s 1 en
0 0 0 en en en en 0 0 0 0 en en en en 0 0 0 0 en s2 _ en
0 0 0 0 0 0 0 en en en en en en en en 0 0 0 0 0 s3 _ 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 en en en en en s4 _ 0

Bemærk, at med en enkelt fejl er syndrommatrixen altid en binær post (det mindst signifikante ciffer i den øverste række) af det positionsnummer, hvor fejlen opstod. I eksemplet ovenfor svarer syndrommatrixen (01100) til det binære tal 00110 eller decimal 6, hvilket betyder, at fejlen opstod i den sjette bit.

Ansøgning

Hamming-kode bruges i nogle lagringsapplikationer, især RAID 2 . Derudover har Hamming-metoden længe været brugt i ECC -hukommelsen og giver dig mulighed for at rette enkeltfejl og opdage dobbeltfejl i farten.

Se også

Noter

  1. Hamming-koder - "Alt om højteknologi" . all-ht.ru. Dato for adgang: 20. januar 2016. Arkiveret fra originalen 15. januar 2016.

Litteratur