Hammingův kód - Hamming code
| Binární Hammingovy kódy | |
|---|---|
|
Hammingův (7,4) kód (s r = 3 )
| |
| Pojmenoval podle | Richard W. Hamming |
| Klasifikace | |
| Typ | Lineární blokový kód |
| Délka bloku | 2 r - 1, kde r ≥ 2 |
| Délka zprávy | 2 r - r - 1 |
| Hodnotit | 1 - r/(2 r - 1) |
| Vzdálenost | 3 |
| Velikost abecedy | 2 |
| Zápis | [2 r - 1, 2 r - r - 1, 3] 2 Co de |
| Vlastnosti | |
| perfektní kód | |
Ve výpočetní technice a telekomunikaci jsou Hammingovy kódy rodinou lineárních kódů opravujících chyby . Hammingovy kódy mohou detekovat jednobitové a dvoubitové chyby nebo opravit jednobitové chyby bez detekce neopravených chyb. Naproti tomu jednoduchý paritní kód nemůže opravit chyby a může detekovat pouze lichý počet bitů v chybě. Hammingovy kódy jsou dokonalé kódy , to znamená, že dosahují nejvyšší možné rychlosti pro kódy s jejich délkou bloku a minimální vzdáleností tři. Richard W. Hamming vynalezl Hammingovy kódy v roce 1950 jako způsob automatické opravy chyb zavedených čtečkami děrných karet . Ve svém původním článku Hamming rozpracoval svou obecnou myšlenku, ale konkrétně se zaměřil na Hammingův (7,4) kód, který přidává tři paritní bity ke čtyřem bitům dat.
Z matematického hlediska jsou Hammingovy kódy třídou binárních lineárních kódů. Pro každé celé číslo r ≥ 2 existuje kód s délkou bloku n = 2 r - 1 a délkou zprávy k = 2 r - r - 1 . Míra Hammingových kódů je tedy R = k / n = 1 - r / (2 r - 1) , což je nejvyšší možná hodnota pro kódy s minimální vzdáleností tři (tj. Minimální počet bitových změn potřebných pro přechod z libovolného kódové slovo pro jakékoli jiné kódové slovo jsou tři) a délka bloku 2 r - 1 . Matice kontroly parity kodexu Hammingova je vytvořen tím, že uvádí všechny sloupce o délce r , které jsou jiné než nula, což znamená, že duální kód kódu Hammingova je zkrácena Hadamardova kód . Matice kontroly parity má tu vlastnost, že jakékoli dva sloupce jsou párově lineárně nezávislé .
Vzhledem k omezené redundanci, kterou Hammingovy kódy přidávají k datům, mohou chyby detekovat a opravovat pouze v případě, že je chybovost nízká. To je případ paměti počítače (obvykle RAM), kde jsou bitové chyby extrémně vzácné a Hammingovy kódy jsou široce používány, a RAM s tímto korekčním systémem je ECC RAM ( paměť ECC ). V této souvislosti se často používá rozšířený Hammingův kód mající jeden paritní bit navíc. Rozšířené Hammingovy kódy dosahují Hammingovy vzdálenosti čtyř, což umožňuje dekodéru rozlišovat mezi tím, kdy dojde maximálně k jedné jednobitové chybě a kdy dojde k jakýmkoli dvoubitovým chybám. V tomto smyslu jsou rozšířené Hammingovy kódy opravou jedné chyby a detekcí dvojité chyby, zkráceně SECEDED .
Dějiny
Richard Hamming , vynálezce Hammingových kódů, pracoval v Bell Labs na konci čtyřicátých let na počítači Bell Model V , elektromechanickém reléovém stroji s dobou cyklu v sekundách. Vstup byl přiváděn na děrovanou papírovou pásku širokou sedm osmin palce, která měla až šest otvorů v řadě. Ve všední dny, kdy byly detekovány chyby v relé, se stroj zastavil a začal blikat, aby obsluha mohla problém vyřešit. V době mimo pracovní dobu a o víkendech, kdy nebyli žádní operátoři, se stroj jednoduše přesunul k další práci.
Hamming pracoval o víkendech a byl stále více frustrován z nutnosti restartovat své programy od nuly kvůli zjištěným chybám. V nahraném rozhovoru Hamming řekl: „A tak jsem řekl:„ Sakra, když stroj dokáže detekovat chybu, proč nedokáže najít polohu chyby a opravit ji? ““. Během několika příštích let pracoval na problému opravy chyb a vyvíjel stále výkonnější řadu algoritmů. V roce 1950 vydal to, co je nyní známé jako Hammingův kód, který se dodnes používá v aplikacích, jako je paměť ECC .
Kódy před Hammingem
Před Hammingovými kódy byla použita řada jednoduchých kódů pro detekci chyb, ale žádný nebyl ve stejné režii vesmíru tak účinný jako Hammingovy kódy.
Parita
Parita přidá jeden bit, který udává, zda počet jednotek (bitových pozic s hodnotami jedné) v předchozích datech byl sudý nebo lichý . Pokud se při přenosu změní lichý počet bitů, zpráva změní paritu a v tomto okamžiku lze detekovat chybu; bit, který se změnil, však mohl být samotný paritní bit. Nejběžnější konvencí je, že paritní hodnota jedna znamená, že v datech je lichý počet jedniček, a nulová paritní hodnota znamená, že existuje sudý počet jedniček. Pokud je počet změněných bitů sudý, kontrolní bit bude platný a chyba nebude detekována.
Parita navíc neindikuje, který bit obsahoval chybu, i když ji dokáže detekovat. Data musí být zcela zlikvidována a znovu přenesena od začátku. Na hlučném přenosovém médiu může úspěšný přenos trvat dlouho nebo se nemusí nikdy objevit. Přestože je kvalita kontroly parity špatná, protože používá pouze jeden bit, výsledkem této metody je minimální režie.
Kód dva z pěti
Kód dva z pěti je kódovací schéma, které používá pět bitů skládajících se přesně ze tří 0 a dvou 1 s. To poskytuje deset možných kombinací, které dostačují k reprezentaci číslic 0–9. Toto schéma může detekovat všechny jednotlivé bitové chyby, všechny liché bitové chyby a některé sudé bitové chyby (například převrácení obou 1 bitů). Stále však nemůže opravit žádnou z těchto chyb.
Opakování
Jiný kód používaný v té době opakoval každý datový bit několikrát, aby se zajistilo, že byl odeslán správně. Pokud je například datovým bitem, který má být odeslán, 1, opakovací kód n = 3 pošle 111. Pokud tři přijaté bity nejsou identické, došlo během přenosu k chybě. Pokud je kanál dostatečně čistý, většinou se v každém triple změní pouze jeden bit. 001, 010 a 100 tedy odpovídá 0 bitům, zatímco 110, 101 a 011 odpovídá 1 bitu, přičemž větší počet číslic, které jsou stejné ('0' nebo '1') udává, co datový bit by měl být. Kód s touto schopností rekonstruovat původní zprávu za přítomnosti chyb se nazývá kód opravující chyby. Tento trojitý opakovací kód je Hammingův kód s m = 2, protože existují dva paritní bity a 2 2 - 2 - 1 = 1 datový bit.
Takové kódy však nemohou správně opravit všechny chyby. V našem případě, pokud kanál převrátí dva bity a přijímač získá 001, systém detekuje chybu, ale dojde k závěru, že původní bit je 0, což je nesprávné. Pokud zvětšíme velikost bitového řetězce na čtyři, můžeme detekovat všechny dvoubitové chyby, ale nemůžeme je opravit (množství paritních bitů je sudé); na pět bitů dokážeme detekovat a opravit všechny dvoubitové chyby, ale ne všechny tříbitové chyby.
Navíc zvětšení velikosti řetězce paritních bitů je neefektivní, v našem původním případě se snižuje propustnost třikrát a účinnost se drasticky snižuje, protože zvyšujeme počet duplikací každého bitu za účelem detekce a opravy více chyb.
Popis
Pokud je ve zprávě zahrnuto více bitů opravujících chyby a pokud tyto bity mohou být uspořádány tak, že různé nesprávné bity vytvářejí různé výsledky chyb, pak by mohly být identifikovány špatné bity. V sedmibitové zprávě existuje sedm možných jednobitových chyb, takže tři bity pro řízení chyb by mohly potenciálně specifikovat nejen to, že došlo k chybě, ale také který bit chybu způsobil.
Hamming studoval stávající kódovací schémata, včetně dvou z pěti, a zobecnil jejich koncepty. Nejprve vyvinul nomenklaturu pro popis systému, včetně počtu datových bitů a bitů pro opravu chyb v bloku. Například parita zahrnuje jeden bit pro jakékoli datové slovo, takže za předpokladu, že ASCII slova se sedmi bity, Hamming to popsal jako (8,7) kód, s celkem osmi bity, z nichž sedm je dat. Příklad opakování by byl (3,1) podle stejné logiky. Rychlost kódu je druhé číslo děleno prvním, pro náš příklad opakování 1/3.
Hamming si také všiml problémů s převrácením dvou a více bitů a popsal to jako „vzdálenost“ (nyní se mu říká Hammingova vzdálenost ). Parita má vzdálenost 2, takže jedno bitové překlopení lze detekovat, ale ne opravit a jakékoli dvoubitové převrácení bude neviditelné. Opakování (3,1) má vzdálenost 3, protože tři bity je třeba převrátit ve stejné trojici, aby se získalo další kódové slovo bez viditelných chyb. Může opravit jednobitové chyby nebo může detekovat - ale ne správné - dvoubitové chyby. Opakování A (4,1) (každý bit se opakuje čtyřikrát) má vzdálenost 4, takže převrácení tří bitů lze detekovat, ale ne opravit. Když se tři bity překlopí do stejné skupiny, mohou nastat situace, kdy při pokusu o opravu vznikne chybné kódové slovo. Obecně kód se vzdáleností k může detekovat, ale ne opravit chyby k - 1 .
Hamminga zajímaly dva problémy najednou: co největší zvětšení vzdálenosti, a zároveň co největší zvýšení rychlosti kódu. Během čtyřicátých let vyvinul několik kódovacích schémat, která byla dramatickým vylepšením stávajících kódů. Klíčem všech jeho systémů bylo, aby se paritní bity překrývaly, takže se dokázaly kontrolovat navzájem i data.
Obecný algoritmus
Následující obecný algoritmus generuje kód opravy jedné chyby (SEC) pro libovolný počet bitů. Hlavní myšlenkou je vybrat bity opravující chyby tak, aby index-XOR ( XOR všech bitových pozic obsahujících 1) byl 0. Jako chybu používáme pozice 1, 10, 100 atd. (Binárně) -oprava bitů, což zaručuje, že je možné nastavit bity opravující chyby tak, aby index-XOR celé zprávy byl 0. Pokud přijímač obdrží řetězec s indexem-XOR 0, může dojít k závěru, že nedošlo k žádnému poškození, a jinak index-XOR označuje index poškozeného bitu.
Algoritmus lze odvodit z následujícího popisu:
- Číslování bitů od 1: bit 1, 2, 3, 4, 5, 6, 7 atd.
- Napište čísla bitů binárně: 1, 10, 11, 100, 101, 110, 111 atd.
- Všechny bitové pozice, které jsou mocninami dvou (mají jeden 1 bit v binární formě jejich pozice) jsou paritní bity: 1, 2, 4, 8 atd. (1, 10, 100, 1000)
- Všechny ostatní bitové pozice, se dvěma nebo více 1 bity v binární formě jejich pozice, jsou datové bity.
- Každý datový bit je zahrnut v jedinečné sadě 2 nebo více paritních bitů, jak je určeno binární formou jeho bitové pozice.
- Paritní bit 1 pokrývá všechny bitové pozice, které mají nejméně významnou sadu bitů: bit 1 (samotný paritní bit), 3, 5, 7, 9 atd.
- Paritní bit 2 pokrývá všechny bitové pozice, které mají druhou nejméně významnou sadu bitů: bity 2-3, 6-7, 10-11 atd.
- Paritní bit 4 pokrývá všechny bitové pozice, které mají třetí nejméně významnou sadu bitů: bity 4–7, 12–15, 20–23 atd.
- Paritní bit 8 pokrývá všechny bitové pozice, které mají čtvrtou nejméně významnou sadu bitů: bity 8–15, 24–31, 40–47 atd.
- Obecně platí, že každý paritní bit pokrývá všechny bity, kde bitový AND paritní pozice a bitová pozice je nenulový.
Pokud je bajt dat, který má být kódován, 10011010, pak by datové slovo (pomocí _ reprezentující paritní bity) bylo __1_001_1010 a kódové slovo je 011100101010.
Volba parity, sudá nebo lichá, není relevantní, ale pro kódování i dekódování musí být použita stejná volba.
Toto obecné pravidlo lze zobrazit vizuálně:
Bitová pozice 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 … Kódované datové bity p1 p2 d1 p4 d2 d3 d4 p8 d5 d6 d7 d8 d9 d10 d11 p16 d12 d13 d14 d15 Paritní
bitové
pokrytíp1 









p2 









p4 







p8 







p16 



Zobrazeno je pouze 20 kódovaných bitů (5 parit, 15 dat), ale vzor pokračuje neomezeně dlouho. Klíčovou věcí na Hammingových kódech, kterou lze vidět z vizuální kontroly, je, že jakýkoli daný bit je zahrnut v jedinečné sadě paritních bitů. Chcete -li zkontrolovat chyby, zkontrolujte všechny paritní bity. Vzorec chyb, nazývaný chybový syndrom , identifikuje chybný bit. Pokud jsou všechny paritní bity správné, nedojde k žádné chybě. Jinak součet pozic chybných paritních bitů identifikuje chybný bit. Pokud například paritní bity na pozicích 1, 2 a 8 indikují chybu, pak bit 1+2+8 = 11 je chybný. Pokud pouze jeden paritní bit indikuje chybu, samotný paritní bit je chybný.
S m paritními bity lze pokrýt bity od 1 do . Po diskontování paritních bitů zbývají bity pro použití jako data. Jak se m mění, dostáváme všechny možné Hammingovy kódy:
| Paritní bity | Celkem bitů | Datové bity | název | Hodnotit |
|---|---|---|---|---|
| 2 | 3 | 1 | Hamming (3,1) (trojitý opakovací kód ) |
1/3 ≈ 0,333 |
| 3 | 7 | 4 | Hamming (7,4) | 4/7 ≈ 0,571 |
| 4 | 15 | 11 | Hamming (15,11) | 11/15 ≈ 0,733 |
| 5 | 31 | 26 | Hamming (31,26) | 26/31 ≈ 0,839 |
| 6 | 63 | 57 | Hamming (63,57) | 57/63 ≈ 0,905 |
| 7 | 127 | 120 | Hamming (127 120) | 120/127 ≈ 0,945 |
| 8 | 255 | 247 | Hamming (255 247) | 247/255 ≈ 0,969 |
| … | ||||
| m | Hamming | |||
Hammingovy kódy s další paritou (SECDED)
Hammingovy kódy mají minimální vzdálenost 3, což znamená, že dekodér může detekovat a opravit jedinou chybu, ale nedokáže odlišit dvojbitovou chybu některého kódového slova od jediné bitové chyby jiného kódového slova. Některé dvojbitové chyby tedy budou nesprávně dekódovány, jako by šlo o jednobitové chyby, a proto zůstanou nezjištěny, pokud se nepokusí o opravu.
K nápravě tohoto nedostatku lze Hammingovy kódy rozšířit o další paritní bit. Tímto způsobem je možné zvětšit minimální vzdálenost Hammingova kódu na 4, což umožňuje dekodéru rozlišovat mezi jednobitovými chybami a dvoubitovými chybami. Dekodér tak může detekovat a opravit jedinou chybu a současně detekovat (ale ne správně) dvojitou chybu.
Pokud se dekodér nepokouší opravit chyby, může spolehlivě detekovat chyby tří bitů. Pokud dekodér opravuje chyby, některé trojité chyby budou zaměněny za jednotlivé chyby a „opraveny“ na špatnou hodnotu. Oprava chyb je tedy kompromisem mezi jistotou (schopnost spolehlivě detekovat trojité bitové chyby) a odolností (schopnost nadále fungovat tváří v tvář jednobitovým chybám).
Tento rozšířený Hammingův kód je populární v počítačových paměťových systémech, kde je znám jako SECDED (zkráceně z jedné opravy chyb, detekce dvojité chyby ). Obzvláště populární je kód (72,64), zkrácený (127,120) Hammingův kód plus další paritní bit, který má stejnou režii prostoru jako paritní kód (9,8).
[7,4] Hammingův kód
V roce 1950 Hamming představil [7,4] Hammingův kód. Kóduje čtyři datové bity do sedmi bitů přidáním tří paritních bitů. Dokáže detekovat a opravit jednobitové chyby. S přidáním celkového paritního bitu může také detekovat (ale ne správné) dvoubitové chyby.
Konstrukce G a H
Matice se nazývá (kanonická) generátorová matice lineárního ( n , k ) kódu,
a nazývá se matice kontroly parity .
Jedná se o konstrukci G a H ve standardní (nebo systematické) formě. Bez ohledu na formu musí G a H pro lineární blokové kódy splňovat
, matice se všemi nulami.
Protože [7, 4, 3] = [ n , k , d ] = [2 m - 1, 2 m −1− m , 3]. Matice kontroly parity H kodexu Hammingova je vytvořen tím, že uvádí všechny sloupce o délce m , které jsou po dvojicích nezávislé.
Tak H je matice, jejíž levá strana všech nenulových n-tic, kde pořadí n-tic ve sloupcích matice nezáleží. Na pravé straně je právě ( n - k ) - jednotková matice .
Takže G mohou být získány z H tím, že přemístit na levé straně H s identitou K- matice identity na levé straně G .
Matice generátoru kódu a matice kontroly parity jsou:
a
Nakonec lze tyto matice mutovat do ekvivalentních nesystematických kódů následujícími operacemi:
- Proměny sloupců (prohození sloupců)
- Základní řádkové operace (nahrazení řádku lineární kombinací řádků)
Kódování
- Příklad
Z výše uvedené matice máme 2 k = 2 4 = 16 kódových slov. Nechť být řádkový vektor binárních datových bitů . Kódové slovo pro jakýkoli ze 16 možných datových vektorů je dáno standardním maticovým produktem, kde je operace sčítání prováděna modulo-2.
Například, řekněme . Pomocí matice generátoru shora máme (po použití modulo 2 na součet),
[7,4] Hammingův kód s přídavným paritním bitem
[7,4] Hammingův kód lze snadno rozšířit na [8,4] kód přidáním dalšího paritního bitu k nad kódovaným slovem (7,4) (viz Hamming (7,4) ). To lze shrnout pomocí revidovaných matic:
a
Všimněte si, že H není ve standardní formě. K získání G lze použít elementární řádkové operace k získání ekvivalentní matice H v systematické formě:
Například první řádek v této matici je součtem druhého a třetího řádku H v nesystémové formě. Pomocí systematické konstrukce pro Hammingovy kódy shora je matice A zřejmá a systematická forma G je zapsána jako
Nesystematickou formu G lze redukovat řádky (pomocí elementárních řádkových operací), aby odpovídala této matici.
Přidání čtvrtého řádku efektivně vypočítá součet všech bitů kódového slova (data a parita) jako čtvrtý paritní bit.
Například 1011 je kódován (pomocí nesystémové formy G na začátku této části) do 01 1 0 011 0, kde modré číslice jsou data; červené číslice jsou paritní bity z [7,4] Hammingova kódu; a zelená číslice je paritní bit přidaný kódem [8,4]. Zelená číslice vyrovná paritu [7,4] kódových slov.
Nakonec lze ukázat, že minimální vzdálenost se zvýšila z 3 v kódu [7,4] na 4 v kódu [8,4]. Kód lze tedy definovat jako [8,4] Hammingův kód.
Chcete -li dekódovat Hammingův kód [8,4], nejprve zkontrolujte paritní bit. Pokud paritní bit indikuje chybu, oprava jediné chyby ([7,4] Hammingův kód) indikuje umístění chyby, přičemž „žádná chyba“ označuje paritní bit. Pokud je paritní bit správný, pak oprava jedné chyby bude indikovat (bitové) výlučné-nebo dvě chybová místa. Pokud jsou umístění stejná („žádná chyba“), pak dvojitá bitová chyba buď nenastala, nebo se sama zrušila. V opačném případě došlo k dvojité chybě.
Viz také
Poznámky
Reference
- Hamming, Richard Wesley (1950). „Kódy zjišťování chyb a opravy chyb“ (PDF) . Technický časopis Bell System . 29 (2): 147–160. doi : 10,1002/j.1538-7305.1950.tb00463.x .
- Moon, Todd K. (2005). Kódování opravy chyb . New Jersey : John Wiley & Sons . ISBN 978-0-471-64800-0.
- MacKay, David JC (září 2003). Informační teorie, odvození a učební algoritmy . Cambridge : Cambridge University Press . ISBN 0-521-64298-1.
- DK Bhattacharryya, S. Nandi. „Efektivní třída kódů SEC-DED-AUED“. 1997 Mezinárodní sympozium o paralelních architekturách, algoritmech a sítích (ISPAN '97) . s. 410–415. doi : 10.1109/ISPAN.1997.645128 .
- „Matematická výzva duben 2013 Kódy opravující chyby“ (PDF) . Vedoucí tým skupiny swissQuant . Duben 2013.