• Nem Talált Eredményt

Kódolási alapfogalmak

In document Hibajavító kódolás (Pldal 8-15)

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 : FkC,

é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 : QnC, f1: CFk.

Mivel f egyértelm˝uen meghatározza f1-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 c0C 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

cCd(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 f1fü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,c0C

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

dmin1 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

Mqndmin+1. BIZONYÍTÁS: Legyen k egy természetes szám, melyre

qk1<Mqk.

Mivel a k1 hosszú különböz ˝o sorozatok száma qk1, ezért qk1<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)≤nk+1, következésképpen

dminnk+1, azaz

Mqkqndmin+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 dminnk+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 2nk. 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=2nk. (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)≤2nk.

A Hamming-korlát nembináris esetben a következ ˝o alakot ölti:

t i=0

n i

(q−1)iqnk

In document Hibajavító kódolás (Pldal 8-15)