1 / 38

A digitális átvitel minőségének javítása kódolással

A digitális átvitel minőségének javítása kódolással. példa. A feladat, és megoldása.

haracha
Download Presentation

A digitális átvitel minőségének javítása kódolással

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A digitális átvitel minőségének javítása kódolással példa

  2. A feladat, és megoldása Adott egy 4.25dB-es jel-zaj viszonyú rádiócsatorna, amin nagy biztonsággal adatot szeretnénk átküldeni. Az információ folyamot k=10 bites blokkokban kell kódolni, BPSK modulációt használunk, és a megengedett blokk-hibavalószínűség nem lehet több 2*10–5 -nél, amit hibajavító kódolással kell biztosítanunk. Tervezzük meg az adott kódot! Vizsgáljuk meg a rendszer spektrális hatékonyságát kódolással és kódolás nélkül! Megoldás: Adott tehát: 1. A csatorna jel-zaj viszonya: SNRdB=4.25dB 2. Az adatblokkok mérete: k=10bit 3. Az elérendő bithiba-valószínűség: ~2*10–5

  3. A feladat, és megoldása Tudjuk, hogy BPSK moduláció mellett a csatorna bithiba-valószínűsége: A SNR=4.25 dB-t behelyettesítve a csatornánk bithiba-valószínűsége ~10–2. Írjuk fel, hogy miként számoljuk ki a blokk-hibavalószínűséget k=10 bites blokkok esetében (hibajavító kódolás nélkül): Behelyettesítve a blokk-hibavalószínűség kódolatlan esetben 10–1. Ezt kell följavítani 2*10–5 -re!

  4. A feladat, és megoldása Oldjuk meg a feladatot Reed-Solomon kódolással! Azt kell kiszámolnunk, hogy mennyire kell választani a kódszóhosszt, hogy a kódnak elegendő legyen a hibajavító képessége ahhoz, hogy a kívánt javulást elérjük. Következőképpen gondolkozunk: tudjuk, hogy a RS-kód MDS tulajdonságú, ami alapján egyértelmű kapcsolatot tudunk adni az üzenethossz, kódszóhossz és a hibajavítóképesség között: Ha a kód t hibát tud javítani, akkor az n hosszú blokkok hibavalószínűsége: (Kódolt esetben egy üzenetblokk akkor hibás, ha t-nél több bit romlott el)

  5. A feladat, és megoldása Tehát a megoldandó egyenlet n-re (k=10 esetén): amit nyilván csak próbálgatással tudunk megoldani. Ráadásul, mivel RS-kódokat használunk, n nem lehet akármilyen szám, csak q-1, ahol a kód GF(q) fölött értelmezett. n>k, így esetünkben GF(13), GF(17), GF(19), stb. jöhet számításba. A hatékonyság érdekében persze a legkisebb q-t kell választani. Némi számolás után kiadódik, hogy GF(17) , azaz n=16 választás esetén a kódolt blokk-hibavalószínűség 1.985*10–5, ami teljesíti az előírt feltételt.

  6. A feladat, és megoldása Tehát a kezdeti feltételek teljesítéséhez egy RS(16,10) kódra van szükségünk. Ezen RS kód alkalmazása a GF(17) feletti aritmetika ismeretét igényli, amit a következőkben ismertetünk…

  7. Reed-Solomon-kódok előállítása A (nem rövidített) Reed-Solomon kódok GF(q) ABC-fölötti, lineáris, ciklikus kódok. Ráadásul MDS-tulajdonságúak, vagyis dmin=n-k+1. Ilyen kódok generátor- ill. paritásellenőrző mátrixa: ahol a egy primitív elem GF(q)-ban. Mivel a GF(q) fölötti primitív elem (q-1)-dik hatványa 1, ezért az aq-1 hatványt már nem használhatjuk, hiszen egy ugyanolyan oszlopot eredményezne G-ben, mint amilyen már szerepelt (csupa 1-es), ezért n=q-1.

  8. RS-kód GF(17) fölött A digitális csatorna „feljavítási” feladata során meghatároztuk, hogy célunkat elérhetjük egy 3 hibát javító, C(16,10) paraméterű RS-kóddal. Most egy ilyen kódnak megmutatjuk, hogyan adható meg a generátormátrixa. Keresni kell egy primitív elemet (olyan testelem, amelynek az egymást követő hatványai kiadják az összes testelemet). A 3 egy primitív elem GF(17)-ben. Az előbbi általános képletbe helyettesítve megkapható a generátor- ill. a paritásellenörző mátrix. (A generátormátrix második sorából kiolvashatók a primitív elem különböző hatványai). Megjegyzés: Vigyázzunk arra, hogy olyan esetekben, amikor ap –ben p>q, akkor nem ap mod q -t kell venni, hanem (ap)mod q-t kell kiszámolni, ami a p-szeri összeszorzását jelenti. Mivel aq-1=1, ezért ez megfelel annak, hogy a kitevőt mod (q-1) kiszámoljuk, és ezzel hatványozunk.

  9. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 9 10 13 5 15 11 16 14 8 7 4 12 2 6 1 9 13 15 16 8 4 2 1 9 13 15 16 8 4 2 1 10 15 14 4 6 9 5 16 7 2 3 13 11 8 12 1 13 16 4 1 13 16 4 1 13 16 4 1 13 16 4 1 5 8 6 13 14 2 10 16 12 9 11 4 3 15 7 1 15 4 9 16 2 13 8 1 15 4 9 16 2 13 8 1 11 2 5 4 10 8 3 16 6 15 12 13 7 9 14 1 16 1 16 1 16 1 16 1 16 1 16 1 16 1 16 1 14 9 7 13 12 15 6 16 3 8 10 4 5 2 11 G = 1 3 9 10 13 5 15 11 16 14 8 7 4 12 2 6 1 9 13 15 16 8 4 2 1 9 13 15 16 8 4 2 1 10 15 14 4 6 9 5 16 7 2 3 13 11 8 12 1 13 16 4 1 13 16 4 1 13 16 4 1 13 16 4 1 5 8 6 13 14 2 10 16 12 9 11 4 3 15 7 1 15 4 9 16 2 13 8 1 15 4 9 16 2 13 8 H = Behelyettesítve a generátormátrix és a paritásellenőrző mátrix általános formulájába, megkapjuk a konkrét mátrixokat:

  10. Kódoljuk most az u=[1,0,0,9] üzenetvektort! (Gyakorlásként leellenőrizhetjük, hogy a kapott c kódszót a paritásmátrixszal beszorozva tényleg 0 szindrómát kapunk-e.) A c kódszót átküldjük egy (memóriamentes) zajos csatornán, amely a kód szimbólumait adott valószínűséggel (a memóriamentesség miatt egymástól függetlenül) elronthatja. A tévesztés jellegét a hibavektor mutatja meg: ahol a hibavektorban nem 0 elem áll, ott hiba volt, méghozzá a hiba értékét a nem 0 szám mutatja meg. (A valóságban persze a hibavektort nem ismerjük, most a példa kedvéért mi magunk konstruáljuk, „hasraütészserűen”, modellezve a csatorna véletlen „hibázási kedvét”). Legyen a hibavektor:

  11. RS-kód dekódolása Peterson-Zierler algoritmussal Először általánosan áttekintjük a PGZ dekódolás lépéseit, utána pedig a konkrét vett vektort fogjuk dekódolni. Feladatunk az, hogy az (n-k) dimenziós szindrómavektorból megkapjuk a legkisebb súlyú, n-dimenziós e hibavektort (majd e-t kivonva a vett vektorból megkapjuk azt a kódot, amelyik a legközelebb áll a vett vektorhoz). Nembináris esetben (márpedig az RS-kódnak csak nembináris esetben van érteleme) nem elegendő a hibahelyek meghatározása, hanem a hiba értékére is szükségünk van. További ismeretlen maga a hibák száma. Jelölések: t: a hibák száma, x-et hibahely lokátornak nevezzük, hiszen a szerinti logaritmusa a hibahely. y pedig a hiba értéke. (ij a j. hibahelyet jelenti, amely most a kódszó i. pozíciójában van)

  12. A Peterson-Zierler algoritmus lépései 1. Számítsuk ki a szindrómát, s=[s1,s2,…,sn-k] 2. Keressük meg azt a legnagyobb r-t, amelyre Ur invertálható. Ekkor t=r. 3. Oldjuk meg az egyenletrendszert. Legyen L(x)=1+L1x+…+Ltxt az ún. hibahelypolinom. 4. Keressük meg L(x) gyökeinek az inverzeit, ezek lesznek az xj hibalokátorok.

  13. 5. Számítsuk ki a hibahelyeket a lokátorokból: 6. Végül a hiba értékeket megint egy egyenletrendszer megoldással kaphatjuk meg: Az yt vektorban pedig megkaptuk a hibaértékeket. Így az e hibavektort megszerkesztettük. Ezt kivonva a vett vektorból kapjuk a döntött kódszót.

  14. Példa a dekódolásra Folytassuk az előbbi példát, a GF(17) fölötti RS-kód esetét. A vett vektort magunk konstruáltuk, önkényesen megadva egy hibavektort, hogy a dekódolás eredménye ellenőrizhető legyen. Ahogy korábban láttuk: 1. Először a szindrómát kell kiszámolni: Ebből rögtön látszik, hogy volt hiba az átvitelben, hiszen ellenkező esetben a szindróma a zérus vektor lenne.

  15. 2. A kódot úgy konstruáltuk, hogy 3 hiba javítására legyen alkalmas. Azután, hogy eldöntöttük, hogy volt hiba, először a hibák számát kell meghatározni. Ehhez meg kell keressük azt a legnagyobb r-t, melyre Ur determinánsa nem 0: Mivel U3 determinánsa sem 0, ezért t=3. (Megjegyezzük, hogy U4 kiszámítására nincs szükség – sőt nincs is elég szindrómakomponensünk a konstrukcióhoz, tehát elő sem lehet állítani – hiszen a kód úgyis csak 3 hibát képes javítani. Ennyi hiba dekódolásának van csak értelme (több hiba esetén a Hamming-távolság minimalizálásán alapuló dekódolás úgyis rossz eredményt adna).

  16. 3. Meg kell tehát oldanunk az alábbi egyenletrendszert: Megjegyzés: az eredményvektor elős komponense -st+1=-s4= -2 mod 17=15. segyenletrendszert. A megoldásnál ugyanúgy járunk el, ahogy azt a valós számoknál megszoktuk, azonban minden műveletet mod17 értelmezünk. (pl. a „mindkét oldalból kivonunk 2-t” helyett a „mindkét oldalhoz hozzáadjuk a 2 additív inverzét, azaz 15-öt” alkalmazzuk, stb. Az eredményvektor:

  17. Az eredményvektorból megalkotjuk a hibahelypolinomot: 4. Most keressük meg az L(x) polinom gyökeit. (Itt be kell a polinomba helyettesíteni minden GF(17) beli elemet, véges test fölötti polinomokra nincs jobb megoldás. A gyökök: 1,6,12, hiszen L(1)=L(3)=L(6)=0. A gyökök inverzei lesznek a hibahely lokátorok (xij). Ezek: A hibahelyeket a lokátorok logaritmálásával kapjuk: Vagyis az 1., 2., és 4., pozícióban van hiba.

  18. 5. Hátra van még a hibaértékek meghatározása: A részletek mellőzésével a megoldás: 6. És végül a döntés: Visszalapozva látható, hogy sikerült kijavítani mindhárom hibát, és visszakaptuk ugyanazt a kódszót a dekódolás során, mint amit küldtek.

  19. Mivel a kódunk nem szisztematikus, ezért az üzenetvektor megfejtése a dekódolt kódszóból nem egyszerű, nem lehet levágással megkapni. A megoldást (nagyméretű) táblázat jelentheti, vagy a véges test feletti Fourier transzformáció bevezetése oldja meg.

  20. A spektrális hatékonyság Nézzük meg, hogy az RS(16,10) kódolással kapott blokk-hibavalószínűség, milyen ekvivalens (kódolatlan esetben) bit-hibavalószínűséget eredményez. Azaz feltesszük, hogy kódolatlan esetben így tehát kaptunk egy ekvivalens bit-hibavalószínűséget. Összehasonlítva a bit-hibavalószínűséget: megjegyzés: Kiszámolható, hogy kódolással ugyanazt értük el, mintha kódolás nélkül a rádiócsatorna jel-zaj viszonyát 4.25dB-ről 10.27dB-re javítottuk volna fel!

  21. A spektrális hatékonyság Hasonlítsuk össze a spektrális hatékonyságot kódolt, illetve kódolatlan esetben. Ehhez, az SE=C/B deffiníciót alkalmazva, szükségünk lesz a csatornakapacitásra (C) és a sávszélességre (B), ami BPSK moduláció esetén közelítőleg ahol Rbit a bitsebességet jelöli. Ezen képletekbe behelyettesítve a bit-hibavalószínűségeket:

  22. Hibajavítás BCH-kódokkal Az alábbiakban azt fogjuk megvizsgálni, hogy milyen bit-hibavalószínűség javulás érhető el csatornánk esetében t=2 hibát javító n=31 szóhosszúságú bináris BCH-kóddal! Adjuk meg a kód generátorpolinomját! Megjegyzés: Az itt szereplő tárgyalásmód – a gyakorlati szempontból legfontosabb – bináris BCH-kódokra vonatkozik. A teljesen általános tárgyalás a tankönyvben található meg.

  23. Mi is a BCH-kód: definíció A GF(q) fölötti n=qm-1 hosszúságú kódot t hibát javító BCH kódnak nevezzük, ha a g(x) generátorpolinomjának (melyet most a GF(qm) testben értelmezünk) a gyökei az testelemek.

  24. A generátorpolinom megalkotása Első ránézésre az előbbi definíció alapján nagyon egyszerűnek tűnhet a BCH kódok generátorpolinomjának megalkotása: keresni kell egy (primitív) elemet GF(qm)-ben, ennek elő kell állítani az i=1,2,…,2t hatványait, majd a képlet alapján adódik a generátorpolinom. A nehézséget az okozza, hogy olyan g(x) polinomot kell kapnunk a konstrukció során, amelynek együtthatói GF(q)-ban is értelmezhetőek, hiszen a kódunk GF(q) fölötti!

  25. Ezt úgy érhetjük el, hogy a szükéséges gyökökön túl (esetleg) más gyököket is fölhasználunk a konstrukció során úgy, hogy az eredményül kapott g(x) polinom együtthatói GF(q)-ban is értelmes értékek legyenek. Ennek technikája a következő: Föl kell bontani a GF(qm) testelemeket ún. konjugált halmazokra, ami azt jelenti, hogy egy halmzaba a b testelemen kívül minden olyan elem beletartozik, amelyre igaz, hogy előáll a alakban úgy, hogy Megmutatható, hogy a konjugált halmazban levő gyökökből alkotott polinom együtthatói értelmezhetőek a GF(q) testben is. Tehát a g(x) generátorpolinomot úgy konstruáljuk, hogy a szükséges ai,…,a2t gyökökön túl minden olyan gyököt is beleveszünk a polinomba, amely az előbb felsoroltakkal közös konjugált halmazokban van benne.

  26. A generátorpolinom meghatározása Először is szükségünk lesz a GF(32) szorzótáblájára, hiszen primitív elemet kell keresnünk, majd később a gyöktényezős alakot össze kell szoroznunk.

  27. GF(32) szorzótáblája A testelemeket a 0-31 decimális számokkal ábrázoljuk, a szorzások elvégzéséhez viszont a bináris alakot, mint polinomot értelmezzük a következő (önkényes) összerendelés alapján: decimális ábr. bináris ábr. polinom ábr. 0 00000 0 1 00001 1 2 00010 x … 31 11111 x4+x3+x2+x+1 A primitív polinom: x5+x2+1

  28. Ezután keresni kell egy primitív elemet GF(32)-ben. A továbbiakban a 2 primitív elemet használjuk !!! Megjegyzés: a hatványok a szorzótáblából gyorsan kiolvashatók: a2=a*a; an=an-1*a rekurzió segítségével.

  29. Most a konjugált halmazok megkeresése a feladat: A korábban megadott szabály szerint a konjugált halmazokat úgy kapjuk meg, hogy kiválasztva egy b testelemet elkezdjük a 2., 4., stb. hatványaira emelni (bináris BCH esetében) és ezt addig folytatjuk, míg vissza nem kapjuk a testelemet. (Esetünkben ez a 32. hatványnál mindenképpen bekövetkezik).

  30. A generátorpolinom összeállítása: Tudjuk, hogy a generátorpolinomnak gyöke kell legyen az a1, …,a2t azaz a,…,a4GF(32) testelemek, azaz esetünkben a 2, 4, 8, 16. Ahhoz, hogy a gyöktényezős alak összeszorzása után olyan polinomot kapjunk, ami binárisan is értelmezhető (azaz együtthatói 0 vagy 1 értékűek), a fentieken kívül minden olyan gyököt be kell vennünk a generátorpolinomba, amelyek a 2,4,8,16 elemekkel közös konjugált halmazban vannak, azaz az A2 és A6 halmazokban szereplő összes testelemet. Már most látszik, hogy a g(x) n-k-ad fokú polinom most 10-ed fokú lesz, így a kapott kód (31,21) paraméterű lesz.

  31. A gyöktényezős tagok összeszorzása: Látható, hogy a g(x) első 5 és második 5 tagja (első sor) egy-egy konjugált-halmazhoz tartozó összes testelemből áll, ezért ezek összeszorzásakor (4. sor) már csak 0 ill. 1 együtthatójú polinomok szerepelnek. Vigyázzunk, hogy a szorzások (és összeadások) mind GF(32) fölött értelmezendők !!!

  32. BCH-kódok generálása A kód generálás történhet: w nem szisztematiukusan a c(x)=u(x)g(x) szabály használatával. Pl. legyen az üzenetpolinom u(x)=1+x6. Ekkor c(x)=(1+x6)(x10+x9+x8+x6+x5+x3+1)= =x16+x15+x14+x12+ x11+ x10+x8+x7+x6+x5+x3+ 1 Vigyázat! u(x), c(x) bináris polinomok!!! (g(x)-et eredetileg GF(32) fölött értelmeztük, itt persze g(x)-et is binárisként értelmezzük) w vagy nem szisztematikusan a jegyzet 220. oldalán található szabály szerint.

  33. BCH-kódok dekódolása A BCH-kódok dekódolására léteznek a PGZ algoritmushoz hasonló eljárások, ebben a témában viszont még mindig nagyon élénk a kutatás, mert nem létezik minden szempontból kifogástalan algoritmus. Ezek ismertetése meghaladja a Kódelmélet tárgy kereteit.

  34. Feladatunk megoldása BCH kód esetében Nézzük meg miként alakul a spektrális hatékonyság a BCH kódolás esetében. Az előzőekben meghatározott BCH(31,21) kód t=2 hibát tud javítani. A már ismert szükséges képlet: Az előzőekhez hasonlóan, most is megkeressük azt a hibajavitás nélküli „ekvivalens” csatornát, amelyik ugyanazt a blokkhibavalószínűséget eredményezné: összevetve a két bit-hibavalószínűséget:

  35. Feladatunk megoldása BCH kód esetében Ezen képletekbe behelyettesítve a bit-hibavalószínűségeket látható, hogy a kódolással közel kétszeresére növeltük a spektrális hatékonyságot:

  36. RS(16,10) BCH(31,21) blokkhossz növ. (n-k)/k 60% 47.6% feljavított blokk-hibavalószínűség 1.985*10-5 3.65 *10-3 ekvivalens bit-hibavalószínűség 1.985 *10-6 1.74 *10-4 feljavított csatornakapacitás 0.99996 0.998 spektrális hatékonyság 0.667 bit/sHz 0.665 bit/sHz RS(16,10) és BCH(31,21) kódok összevetése

  37. RS és BCH kódok összevetése

More Related