A hibajavító kódolás alapvet ˝o módszereit a 2.1. ábrán látható egyszer˝u hírközlési struktúra kapcsán vizsgáljuk.
Az u és u0vektorok koordinátái egy F halmazból veszik értékeiket, mely hal-mazt forrásábécének nevezzük. A kódoló a k hosszú u vektort (az üzenetet) egy n hosszú c vektorba (a kódszóba) képezi le. A c koordinátái egy Q halmazból veszik értékeiket. A Q-t kódábécének vagy csatorna bemeneti ábécének fogjuk hívni.
forrás u kódoló c csatorna v dekódoló u0 nyel˝o 2.1. ábra. Hírközlési rendszer blokkdiagramja
A csatorna kimenete v, szintén egy n hosszú vektor, melynek koordinátái szintén Q-beliek.
Egy
c= (c1, . . . ,cn) bemeneti és
v= (v1, . . . ,vn)
kimeneti sorozat esetén azt mondjuk, hogy az m-edik id ˝opontban a csatorna hibá-zott, ha cm6=vm. Jelölje d(c,v)azon i pozíciók számát, ahol ci6=vi.
d(c,v) neve a c,v sorozatok Hamming-távolsága, és azt mondjuk, hogy a c sorozat küldésekor és a v sorozat vételekor a hibák száma t=d(c,v). Ezt az esetet nevezzük egyszer ˝u hibázásnak, amikor a hiba helye és értéke egyaránt ismeretlen.
d(c,v)valóban távolság, hiszen
d(c,v)≥0, d(c,v) =d(v,c), és igaz a háromszög-egyenl ˝otlenség:
d(c,v)≤d(c,w) +d(w,v).
Kód (blokk-kód) alatt a Qnhalmaz egy C részhalmazát értjük, azaz C minden eleme egy n hosszú vektor, melynek koordinátái Q-beliek. C elemeit kódszavak-nak nevezzük. A továbbiakban a C(n,k,d), illetve rövidítettebb formában C(n,k) jelölést alkalmazzuk, kiemelve a kód paramétereit. A kódolás egy invertálható függvény, mely k hosszú F-beli sorozatot — üzenetet — képez le egy kódszóba, formalizálva:
f : Fk→C,
és minden különböz ˝o u, u0-re f(u), f(u0)is különböz ˝o.
Dekódolás alatt két függvény egymásutánját értjük. Az egyik a csatorna ki-menetének n hosszú szegmensét képezi le C-be, azaz igyekszik eltalálni a küldött kódszót, a másik pedig az f függvény inverze, tehát
g : Qn→C, f−1: C→Fk.
Mivel f egyértelm˝uen meghatározza f−1-et, ezért dekódolás alatt a kés ˝obbiek-ben csak a g függvényt értjük. A g dekódoló függvényként az algebrai hibajavító kódok elméletében speciális függvényt választunk, nevezetesen a v vektorhoz meg-keressük azt a c0∈C kódszót, mely Hamming-távolság szerint hozzá a legközelebb van, vagy ha több ilyen van, akkor az egyiket, tehát teljesül, hogy ha c0=g(v), ak-kor
d(c0,v) =min
c∈Cd(c,v).
A dekódolás feladata ezek után arra a messze nem triviális feladatra sz˝ukül, hogy egy v vett szóhoz hogyan keressük meg a hozzá legközelebbi c0kódszót anél-kül, hogy minden d(c,v)-t kiszámítanánk. Ha mégis kiszámítjuk ezeket a távolsá-gokat, és minden v-hez megkeressük a hozzá legközelebbi c kódszót, majd a neki megfelel ˝o üzenetet, akkor elvben azt eltárolhatjuk, és így egy táblázathoz jutunk, melynek címét v adja, tartalma pedig a v-nek megfelel ˝o dekódolt üzenet. Ez a táb-lázatos dekódolásnak a legegyszer˝ubb, de legpazarlóbb esete, hiszen a táblázat qn darab üzenetb ˝ol áll, ahol q a Q kódábécé elemszáma.
2.1. példa (ismétléses kód). Tekintsük azt a nagyon egyszer˝u kódolást, amikor bi-náris forrásunk egyes bitjeit tekintjük üzenetnek, s háromszor megismételve küld-jük a kommunikációs csatornába a következ ˝o leképezés szerint:
u c1c2c3 0→ 0 0 0 c1
1→ 1 1 1 c2
A kód egy hibát képes javítani, mivel 1 hiba esetén a vett szó az átküldött kódszótól egy, míg a másik kódszótól kett ˝o Hamming-távolságra van. A kód egy illetve kett ˝o hibát képes jelezni, mivel ezen esetekben a vett szó nem lehet kódszó. A konstrukció általánosítható: legyen az ismétlések száma n, n≥3 páratlan szám.
Könnyen látható, hogy a kód(n−1)/2 hibát képes javítani, valamint n−1 hibát jelezni.
2.2. példa (egyszer ˝u paritáskód). Tekintsük azt a feladatot, amikor a forrás a kö-vetkez ˝o négy lehetséges üzenetet bocsátja ki, a 00, 01, 10, 11 üzeneteket, amelyek-hez a kódoló a következ ˝o, 3 hosszú kódszavakat rendeli hozzá:
u1u2 c1c2c3 0 0 → 0 0 0 c1 0 1 → 0 1 1 c2
1 0 → 1 0 1 c3 1 1 → 1 1 0 c4
azaz az u1u2 bitet kiegészítjük egy paritásbittel. A kód egy hibát képes jelezni. A kód nem képes hibát javítani: pl. ha c1 kód továbbításakor a második bit meg-hibásodik, akkor a v= (0,1,0) vett szó azonos, egy távolságra lesz a c1 és c2 kódszavakhoz.
2.3. példa. A 2.2 példában szerepl ˝o üzenetekhez rendeljünk 5 hosszú kódszava-kat:
u1u2 c1c2c3c4c5
0 0 → 0 0 0 0 0 c1
0 1 → 0 1 1 0 1 c2 1 0 → 1 0 1 1 0 c3
1 1 → 1 1 0 1 1 c4
A g és az f−1függvényt a következ ˝o táblázat foglalja össze:
Az els ˝o 24 kimeneti szó dekódolásakor nincs probléma, hiszen minden 6 szó-ból álló csoport minden szava olyan, hogy vagy kódszó (az els ˝o helyen álló), vagy a kódszó egy bitjének megváltoztatásával (egy hibával) képz ˝odött. A 25–28. szavak mindegyike c1-t ˝ol és c4-t ˝ol 2, míg c2-t˝ol és c3-tól 3 távolságra van. Itt önkényesen
a dekódolás eredménye c1 (jobb érvünk nincs, mint az, hogy jobban szeretjük az almát, mint a cseresznyét). A 29–32. szavak mindegyike c1-t ˝ol és c4-t˝ol 3, míg c2-t ˝ol és c3-tól 2 távolságra van. Itt (szintén önkényesen) a dekódolás eredménye c2.
A kés ˝obbiekben kiderül, hogy a kódoló f függvény leglényegesebb tulajdon-sága a C kód egy paramétere, amit kódtávolságnak nevezünk, és dmin-nel jelölünk:
dmin= min
c6=c0 c,c0∈C
d(c,c0).
A 2.1. és a 2.3. példákban dmin=3, míg a 2.2. példában dmin=2.
A hibajelzés a hibakorlátozó kódolás azon feladata, amikor a vev ˝oben csupán detektálni akarjuk a hibázás tényét, azaz azt kérdezzük, hogy van-e hiba. Nyilván egy v vett szó esetén akkor tudjuk a hibázást észrevenni, ha v nem kódszó, amire garancia, hogy ha c küldött kódszó esetén
dmin>d(v,c), azaz a hibák számára
dmin>t,
tehát egy dminkódtávolságú kód minden, legfeljebb dmin−1 számú hibát jelezni tud.
Mivel a 2.1. és a 2.3. példákban dmin=3, ezért ez a kód 2 hibát tud jelezni, míg a 2.2. példa kódja dmin=2 miatt 1-et.
Hibajavítás esetén azt kérdezzük, hogy ha t a hibák száma, akkor mi biztosítja, hogy a v vett szóból a c küldött kódszó egyértelm˝uen visszaállítható legyen, azaz minden más c0kódszóra
d(v,c0)>d(v,c) (2.1)
legyen. Mivel a Hamming-távolság valóban távolság, ezért teljesíti a háromszög-egyenl ˝otlenséget, azaz
d(v,c0)≥d(c,c0)−d(v,c), (2.2) tehát (2.1) úgy biztosítható, hogy
d(c,c0)−d(v,c)>d(v,c),
ugyanis, ha ez utóbbi teljesül, akkor (2.1) is teljesül, azaz minden c06=c-re d(c,c0)>2d(v,c),
vagyis
dmin
2 >d(v,c).
Összefoglalva: egyszer ˝u hibázás eseténj
dmin−1 2
k
hiba javítható.
A 2.1. és a 2.3. példa kódja 1 hibát tud javítani, míg a 2.2. példa kódjának hibajavító képessége 0.
Gyakran fordul el ˝o olyan hibázás, amikor tudjuk, hogy egy pozícióban hiba lehet, vagyis tudjuk, hogy más pozíciókban nincs hiba, tehát a hiba helyét ismer-jük, csak a hiba értékét nem. Az ilyen hibát törléses hibának nevezzük. Egysze-r˝uen belátható, hogy minden dmin−1 törléses hiba javítható, ugyanis a legrosszabb esetben sem fordulhat el ˝o, hogy két c,c0kódszó ugyanazon, de legfeljebb dmin−1 pozíciójának törlésével ugyanazt a szót kapnánk.
A 2.1. és a 2.3. példa kódja 2 törléses hibát tud javítani, míg a 2.2. példa kódja 1-et.
Nyilván adott n kódszóhosszúság és dmin kódtávolság esetén nem lehet akár-milyen nagy méret˝u kódot konstruálni:
2.1. tétel (Singleton-korlát). Egy M kódszóból álló, n hosszú és dmin kódtávol-ságú kódra
M≤qn−dmin+1. BIZONYÍTÁS: Legyen k egy természetes szám, melyre
qk−1<M≤qk.
Mivel a k−1 hosszú különböz ˝o sorozatok száma qk−1, ezért qk−1<M miatt létezik két kódszó c és c0, melyek az els ˝o k−1 koordinátában megegyeznek. Ezekre
d(c,c0)≤n−k+1, következésképpen
dmin≤n−k+1, azaz
M≤qk≤qn−dmin+1.
Jellegzetes esetben M=qk, vagyis a kódoló k hosszú forrásszegmensekhez ren-del n hosszú vektorokat. Azt mondjuk ilyenkor, hogy a kódunk(n,k)paraméter˝u.
Ebben az esetben a Singleton-korlát alakja dmin≤n−k+1.
2.1. definíció. Azon kódot, melyre a Singleton-korlátban egyenl ˝oség áll, maximá-lis távolságú vagy MDS (maximum distance separable) kódnak nevezzük.
A 2.1. példában k=1, n=3, dmin=3, tehát ez a kód MDS kód. Ugyanakkor a 2.3. példában k=2, n=5, dmin=3, így ez a kód nem MDS.
A 2.1. és a 2.3. példák kódjai egy hibát képesek javítani. Ehhez a következ ˝o szemléletes geometriai képet rendelhetjük. A kódszavak mint középpontok kö-rül képzeljünk el 1 Hamming-sugarú gömböket, azaz a gömb felületén olyan —
kódszóhossz hosszúságú — bináris szavak találhatók, amelyeknek a középpontban lev ˝o szótól való Hamming-távolsága 1. Ha egy hiba keletkezik, akkor a vett szó a leadott kódszó körüli gömbön helyezkedik el. Más szavakkal ezen gömbök a dekó-dolási tartományok. Tekintsük el ˝oször a 2.1. példa kódját. A két gömb a következ ˝o szavakat tartalmazza:
(0,0,0):(1,0,0),(0,1,0),(0,0,1) (1,1,1):(0,1,1),(1,0,1),(1,1,0)
A két gömb tartalmazza az összes 3 bit hosszúságú bináris szót, teljesen kitölti 3 bit hosszúságú bináris szavak terét. A 2.3. példák kódja esetén a négy 1 Hamming-sugarú gömb nem tölti ki az 5 bit hosszúságú bináris szavak terét. Ugyanakkor nem is tudjuk növelni 2 Hamming-sugárra a gömbök méretét anélkül, hogy azok átlapo-lódnának. Abban az esetben, ha gömbi dekódolási tartományokkal hézagmentesen képesek vagyunk lefedni a teret perfekt kódokról beszélünk. Ennek megfelel ˝oen a 2.1. példa kódja perfekt, míg a 2.3. példa kódja nem az. Nagyon egyszer˝u össze-függés adódik az 1 hibát javító bináris perfekt kódok paraméterei közötti összefüg-gésre. A tér elemeinek száma 2n, a kódszavak száma 2k, így egy gömb elemeinek száma ezek hányadosa, azaz 2n−k. Másfel ˝ol, egy 1 Hamming sugarú gömbben 1+n elem van, így adódik, hogy 1 hibát javító bináris perfekt kódok esetén
1+n=2n−k. (2.3)
A következ ˝o szakaszban mutatunk egy az ismétléses kódnál hatékonyabb perfekt kódot, a bináris Hamming-kódot. A (2.3) összefüggés könnyen általánosítható tet-sz˝oleges t≥1 hiba javítás esetére: a képlet bal oldalán a gömb elemeinek száma, a középpontól 0,1,2, . . . ,t Hamming-távolságra lev ˝o szavak számának összege, azaz
V(n,t) =1+n+ n
2
+···+ n
t
áll. A fenti gondolatmenet alapján adódó Hamming-korlát bináris esetben az alábbi V(n,t)≤2n−k.
A Hamming-korlát nembináris esetben a következ ˝o alakot ölti:
∑
t i=0n i
(q−1)i≤qn−k