510 likes | 654 Views
Hibajavító kódolás hangátviteli rendszerekben. Digitális hangátvitel, hangrögzítés:. Digitális jeltovábbítás digitális csatornán! Digitális csatornamodell:. Probléma:. Hangátviteli (rögzítési) rendszerek. Érzékenység a bithibára. PCM esetén nem kritikus (lehet interpolálni)
E N D
Digitális hangátvitel, hangrögzítés: Digitális jeltovábbítás digitális csatornán! Digitális csatornamodell: Probléma:
Érzékenység a bithibára • PCM esetén nem kritikus (lehet interpolálni) • Tömörített (pl. mp3, DTS, LPC) kritikus lehet (egy hiba egész blokk elromlását okozhatja)
Hibajelzés, javítás alapötlete: • Redundancia hozzáadásával a vételi oldalon jelentkező hibák észlelhetővé, esetleg javíthatóvá válnak Jelölések: k-bites blokkot (üzenethossz) kiegészítünk r bites (paritáshossz) ún. paritásbittel k+r=n bitet küldünk tehát át (kódszóhossz)
Kódolás geometriai interpretációja • Eredeti üzenet: k dimenziós vektorok (k-dimenziós térbeli vektorok) • Kódolt üzenet: n>k dimenziós térbeli vektorok
Példa • k=1 (egyetlen bitet akarunk küldeni) • n=2 (ehelyett 2 bitet küldünk, pl. 2x ugyanazt – ismétléses kód) 0,1 0,0 0,0 0 1 1,0 nem érvényes kódszavak
Kódolás alapvető korlátjai • Cél: egy kódkészleten belül az ún minimális Hamming-távolság (dmin) maximalizálása: • Belátható: dmin<=n-k+1 • Ideális esetben (MDS-kódok): dmin=n-k+1
Hibajelző, hibajavító képesség • Hibajelző képesség: Akkor tudunk hibát jelezni, ha a vételi oldalon nem legális kódszó jelenik meg. • Hibajelzés akkor garantálható, ha a kódszóban a hibás pozíciók száma <= dmin-1 • Hibajavítás: Akkor tudunk hibát javítani, ha egyértelműen el tudjuk dönteni, hogy a vett (hibás) szó melyik legális kódszóhoz van a legközelebb. (Ekkor valószínűségi alapon a hozzá legközelebbi legális kódszóra döntünk)
Kód ABC • A hibajavító kódolásokban nem mindig bináris üzeneteket feltételezünk, általában M-áris üzenetekkel foglalkozunk. • Következmény: a bináris kódok elsősorban a véletlen hibák, míg az M-áris ABC fölött működő kódok a csomós hibák javítására alkalmasak.
Matematikai háttér • Véges testek (Galois-Fields) fölötti aritmetika. Fontos: nem létezik zárt test minden elemszám esetén. Prím, vagy prímhatvány méretű testek léteznek. • Bináris test fölötti kódok: szorzás, összeadás = XOR • nembináris testben: szorzás, összeadás FIR-szűrőkkel • generálás, hibaellenőrzés: műveletek véges testek fölötti vektorokkal, mátrixokkal • ciklikus kódok esetén véges testek fölötti polinomokkal lehet dolgozni (ezek FIR-szűrőkkel realizálhatók) • ciklikus kódok mindig generálhatóak szisztematikusan
Hibajelző kódok • Paritásbit (1 v. 2 dimenziós) • 1 hiba jelzésére alkalmas (1D)
CRC (Cyclic Redundancy Check) • Bináris kód • k tipikusan nagy, pl. 32Kbit, r kicsi, pl 16 v. 32 • szabványosított generátorpolinom, amely használata esetén: • minden max 3 súlyú hiba jelezhető • minden páratlan súlyú hiba jelezhető • Előny: FIR-szűrővel generálható (HW implementáció létezik) és dekódolható • Hátrány: csak hibajelzésre alkalmas, arra is korlátozottan
Hibajavító kódok • Blokk kódok: • Bináris Hamming-kód • Reed-Solomon kód • BCH-kódok • Konvolúciós kódok • Turbo-kódok
Bináris Hamming-kód • 1-hibát javító ún. perfekt kód • csak adott k és n számpárosok esetén konstruálható pl. (4,7), (7,15) • ciklikus is, tehát mátrixszal és polinommal is generálható. • Hibajavítás: szindrómadekódolással
Szindrómadekódolás üzenet szindróma generátor mátrix paritásellenőrző mátrix csatorna üzenet tipp hibavektor szindróma dekódolási táblázat Off-line számolható a generátormátrix, paritásmátrix, dekódolási táblázat Egyszerű, gyors dekódolás!
Reed-Solomon kódok • CSAK nembináris esetben lehetséges (tipikusan GF(256) (byte) ABC esetén használatos. (Bonylultabb az öszeadás és a szorzás mávelete is) • MDS tulajdonságú • k, n szabadon választható • k, n megválasztásával dmin és a hibajavító képesség rögtön adódik • elsősorban burst-hibák javítására hatékony
RS-kódok dekódolása • PGZ-algoritmus (n^3 számítási igény) • transzformációs kódolás esetén n^2-es algoritmus Bonyolult dekódolás!
BCH-kódok • bináris kódok (véletlen hibák javítása) • tervezési kiindulás: hibajav. képesség + kódszóhossz (n), ezekből adódik k (nem látható előre) • Dekódolás: bonyolult, hasonló RS-hez
Kódkombinációk • Kódátfűzés (t hibajavító képességű kód m-szeres átfűzése esetén (k*m,n*m) paraméterű lesz a kód, de dmin nem változik. A burst hibajavító képesség viszont ugrásszerűen nő: egymás melletti hibák esetén m*dmin javítható . • Szorzatkód: (k1*k2, n1*n2, dmin1*dmin2)
Kaszkád kódok • Csomós és véletlenszerű hibák elleni együttes védekezés
Alapfogalmak • 1 időrésben k bemeneti bithez rendelünk n kimeneti bitet; • kódsebesség R=k/n; • egyszerre m+1 időrés mintái befolyásolhatják a kimenetet; • a kódoló kimenetét befolyásoló bitek száma a kényszerhossz: k(m+1) • eredmény: fa kód • ha a kényszerhossz véges: trellis-kód • konvolúciós kód: lineáris, időinvariáns trellis-kód • leírás: generátor-polinomok és generátormátrix (l. később)
Példa : mod 2 összegző : késleltető • ui: bemenő bináris információ sorozat; k=1; (egyelőre időben végtelennek tekintjük, ellentétben a blokk-kódolással) • xi: kódolt (bináris) sorozat; időrésenként 2 kimeneti bit n=2; • kódsebesség: (időegység alatt beérkező és kimenő bitek száma) R=1/2: • kényszerhossz: k(m+1)=3;
Generátorpolinomok, generátormátrix Generátorpolinom: a bemeneti üzenetkeret i. bitje és a kimeneti kódkeret j. bitje közötti összefüggés írja le. Esetünkben i=0 (1 bites „keret”, k=1 miatt) és j=0,1. A generátorpolinom a késleltető lánc (shift-regiszter) megcsapolási-struktúráját írja le: ahol D a késleltetés operátorát jelöli; Gyakran tömörebb írásmódot használnak, a generátorpolinomok oktális leírását: vagyis Generátormátrix: k xn-es mátrix, amely a megfelelő generátorpolinomokat tartalmazza:
állapot 10 11 11 01 00 01 a kódolt üzenet 11 11 00 10 01 00 00 10 10 01 11 00 10 01 00 11 01 01 00 00 00 00 00 11 10 10 11 11 01 00 10 11 00 11 00 01 01 00 00 00 01 11 bemenet 11 10 01 00 00 00 00 00 00 00 00 00 u1 u2 u3 u4=0 u5=0 A fa-reprezentáció Kódoljunk most az előbb bevezetett struktúrával egy u=[u1,u2,u3] 3 bitből álló üzenetet. A rendszer memóriarekeszeit kezdetben 0-val töltjük föl. Az üzenet 3 bitidejének eltelte után is kapunk azonban (0-tól eltérő) kimenő értékeket, hiszen a kódoló memóriája még T=2 ideig emlékezik a múltbeli értékekre. Ezért az üzenetet kiegészítjük 2 zérus bittel, hogy a kódoló a csupa nulla állapotba érjen vissza. bemeneti „1” 00 bemeneti „0”
01 11 10 10 00 10 01 01 11 0 érkezett a bemenetre, a kódoló marad a 00 állapotban, a kimeneten 00 jelenik meg 11 belső állapot (memória tartalma) 00 00 Véges automata reprezentáció A piros nyíl a bemeneten megjelenő „1”-es, a fehér nyíl pedig a bemeneten megjelenő „0” hatására létrejövő állapotátmenetet jelzi. A nyílon a kódolt kimenet látható.
Trellis reprezentáció 11 01 11 10 10 10 10 10 10 10 01 01 01 00 11 11 01 01 01 11 11 11 11 00 00 00 00 00 00 00 00 00 00 Az állapotautomata modellt átrajzolhatjuk úgy is, hogy az automata működésének időbeliségét is érzékeltetjük: az ábrán jobbra haladva múlik az idő, fölírjuk az aktuálisan lehetséges állapotátmeneteket, és a kódolt kimenetet. Az alábbi ábrán a fölfelé mutató (piros) nyíl a beérkező 1-es, míg a lefele mutató (fehér) nyíl a beérkező 0-ra utal. 00
01 10 10 10 10 01 11 11 11 11 00 00 00 00 A Dekódolás kritériuma a Hamming-távolság (BSC-re optimális). Mivel a csatorna most nem hibázik, így biztos, hogy minden bitidőben fogunk találni olyan ágat, amelyiknek a Hamming távolsága 0 a vett jeltől. Vagyis bitről bitre dönthetünk! Dekódolás hibamentes csatorna esetén 11 11 10 10 10 01 01 00 11 01 01 01 11 00 00 00 00 00 00 00 A döntésünk pedig abból olvasható ki, hogy a kiválasztott úton merre lépkedtünk, esetünkben föl-le-föl-le-le (vagy piros-fehér-piros-fehér-fehér), ami megfelel az u=[1,0,1,0,0] üzenetvektornak (u4-t és u5-t megegyezészserűen 0-nak választottuk)
Hard-Dekódolás DMC esetében Hard-dekódoláson azt értjük, hogy a dekódoláshoz a digitális csatorna(modell) kimenetén látható szimbólumokat használjuk. Esetünkben ez azt jelenti, hogy a vett vektor is bináris, hasonlóan az elküldött sorozathoz. A DMC (Discrete Memoryless Channel) modell lényege, hogy a csatorna memóriamentes, tehát a hibázás valószínűségei nem függenek a csatorna korábbi állapotától. A leggyakrabban használt ilyen csatorna a BSC, a bináris szimmetrikus csatorna, ahol a hibázás valószínűsége mindkét lehetséges típusú tévesztés esetén (01, 10) azonos p érték.
Maximum likelihood sequence estimation (MLSE) Tekintsünk egy p hibavalószínűségű BSC-t!. A csatorna bemenetét jelölje: x=[x1,x2,…,xN]; A csatorna kimenetét jelölje y=[y1,y2,…,yN]; Az ML dekódolás kritériuma az, hogy adott y esetén azt a lehetséges x kódszót kell dekódolni, amelyikre legnagyobb a P(y | x) feltételes valószínűség! Esetünkben: T.f.h. p < 0.5, azaz 0 < p / (1-p) < 1. Ekkor vagyis a vett vektortól a legkisebb Hamming-távolságú kódszóra kell dönteni.
A Hammnig-távolságnak, mint dekódolási mértéknek óriási előnye, hogy additív, azaz egy trellis-ág távolsága a vett vektortól kiszámítható úgy, hogy az egyes élek távolságát összegezzük. Általában, ha tetszőleges DMC-t föltételezünk, akkor – bár a dekódolás mértéke nem föltétlenül a Hamming-távolság – a mérték additív tulajdonsága teljesül ha a P(y|x) feltételes valószínűség logaritmusával dolgozunk (amely monoton függvény, tehát a maximalizálás szempontjából nem befolyásolja a megoldást), hiszen
Tehát azon (kezdőponttól végpontig vezető) utat kell a trellisen megtalálni, amelyhez tartozó kódszó a legkisebb Hamming-távolságra van a vett jeltől. Ebből pedig az is következik, hogy nem lehetséges a szimbólumról-szimbólumra döntés, hanem minden lehetséges útra meg kell határoznunk a vett vektortól való Hamming-távolságát, s ezek közül kell kiválasztanunk a minimális távolságút. A dekódolási feladat tehát exponenciális komplexitású, hiszen a lehetséges utak száma ahol K az üzenetbitek száma, T pedig a kódoló memóriarekeszeinek száma. A gyakorlatban K>>T, annak érdekében, hogy a hasznos bitek aránya az összes átvitt bithez képest minél nagyobb legyen. Így az összes lehetséges út Hamming-távolságának a kiszámolása az exponenciális komplexitás miatt nem lehetséges. Szerencsére erre nincs is szükség, a megoldást a Vitrebi-algoritmus jelenti.
A Viterbi-dekódoló A Viterbi algoritmus lényege az, hogy – kihasználva a dekódolási mérték additív tulajdonságát – egy egyszerű felismerés segítségével leszűkítjük azon utak számát, amelyekhez tartozó kódszavak távolságát ki kell számolnunk a vett vektortól. A Vterbi-algoritmus segítségével tetszőleges additív tulajdonságú mérték maximalizálása végezhető el. Ezért ez az algoritmus a Hamming-távolság minimalizálására közvetlenül nem alkalmas. Egy egyszerű módosítást kell bevetni: a dekódolási mérték legyen azon pozíciók száma, amelyben a vett jel egyezik az adott ághoz tartozó kóddal. (Ez pont a Hamming-távolság „inverze”. A Hamming-távolság minimalizálása ekvivalens a most bevezetett mérték maximalizálásával.
10 1 10 1 2 3 11 1 2 00 00 Most jön a Viterbi algoritmus lényege: A T+1-dik időpillanattól egy állapotba több (esetünkben 2) úton is eljuthatunk. Azt vegyük észre, hogy az az út, amelyen kisebb mértékkel jutottunk el az adott állapotba, elfelejthető, hiszen innen bárhova továbbmenve mindig ugyanazokat a mértékeket fogjuk mindkét úthoz hozzáadni: tehát előzés kizárva. Akkor viszont kár is tovább vele foglalkozni. Ez a művelet T időrés után minden állapotban elvégezhető, ezzel nagyon nagy mértékben redukáltuk azon utak számát, amelyekre a metrika kiszámítandó. A kódoló állapotát jelző dobozok fölé írjuk (pirossal) azt a mértéket, amivel az adott dobozba eljuthatunk. A vett 01 és az adott ág „okozta” 00 kimenet 1 pozícióban egyezik, tehát ezt a mértéket írjuk rá erre a dobozra. Ugyanígy járunk el a következő lépésben is. (Vegyük észre, hogy T (példánkban 2) ideig minden állapotba csak egy úton juthatunk el. A Viterbi-algoritmus 3? 2? 11 01 11 4 10 10 10 10 10 01 01 01 00 4 6 11 01 01 01 11 11 11 11 4 5 8 00 00 00 00 00 00 00 00 00 Most a végállapotból visszafejthető, hogy melyik is az az út, amelyen át a maximális 8-as mértékkel jutottunk a végpontba. Az útirányból pedig megadható a döntésünk a küldött szimbólumokra:
Soft-dekódolás Viterbi algoritmussal A hard-dekódolással szemben soft-dekódoláskor nem a diszkrét csatorna kimenetén megfigyelhető szimbólumokat használjuk a döntésünk meghatározásához, hanem közvetlenül a fizikai analóg csatorna zajos kimenetét (időbeli mintavételezést követően). Továbbra is memóriamentes csatornában gondolkodunk: a csatorna kimenetét csak az aktuális bemenet és additív fehér Gauss-zaj befolyásolja: (AWGN= Additive White Gaussian Noise csatornamodell) ahol x-szel a csatornára kerülő kódolt sorozatot értettük, y pedig a vett jel, a döntési változó.
Ha fölírjuk a Maximum likelihood döntést N-hosszú vektorokra, akkor az derül ki, hogy a vett sorozat és az egyes kódszavak közötti euklideszi távolságot kell minimalizálni, hiszen Mivel a Viterbi algoritmus maximalizál, válasszuk ezért mértéknek az euklideszi-távolság -1-szeresét!
A dekódolás az előbbihez teljesen hasonló, csak a mértékek számítása történik másként, az euklideszi-távolságot (vektorok skalárszorzatát) használjuk mértékként. Egy adott ág mértéke: Például az 1. bitidőben a piros ág mértéke: 1.12 1.00 -0.12 11 -+ 11 -0.61 +- +- 0.12 1.73 2.94 -1.12 +- +- 10 10 10 -+ -+ -+ -- 1.24 0.94 5.44 ++ ++ 01 01 01 ++ ++ ++ ++ -1.73 1.06 -0.94 1.62 7.90 -- -- -- -- -- 00 00 00 00 00 00
10 0 0 1 00 0 Megoldás: pontozás (puncturing) A kimeneten előállított biteknek egy részét kitöröljük. Pl. a korábbi R=1/2 példa esetében: minden 4. kimeneti bitet töröljük (minden második időrés 1. bitjét), így az alábbi R=2/3 trellishez jutunk: 11 01 11 1 11 10 10 0 10 10 10 10 1 01 1 01 00 0 11 01 01 01 01 11 1 11 1 11 1 00 0 00 0 00 00 00 00 00 00 00
Eredmény: • R=2/3 > 1/2, ugyanakkor a dekóder ugyanolyan egyszerű, mint az eredeti R=1/2 kódnál (legalábbis soft-dekódolás esetén, ilyenkor ugyanis a törölt pozíciókban a vételi oldalon 0-t írunk be (az eredeti értékkészlet ±1), így az euklideszi távolságot nem befolyásolják a törölt bitek).
10 0 0 1 00 0 • a trellis idővariáns lett: • dfree lecsökkent 3-ra: 11 01 11 1 11 10 10 0 10 10 10 10 1 01 1 01 00 0 11 01 01 01 01 11 1 11 1 11 1 00 0 00 0 00 00 00 00 00 00 00
Megadható időinvariáns trellis is úgy, hogy 2-2 időrés bemeneti bitjeit bitpárként értelmezve megadjuk ezen bitpárokhoz gtartozó kimeneti birhármasokat. (HF: ezen trellis fölrajzolása)
Hibajavítás a GSM-ben Fő cél: érthető beszédátvitel hangminták: fs=8 kHz, 8 bit/minta 64 kbit/s tömörítés (LPC): 20 ms blokk 260 bit 13 kbit/s pszichoakusztikus teszt eredménye: (beszédérthetőség szempontjából) 50 bit (260-ból) nagyon fontos (class 1A) 132 bit fontos (class 1B) 78 bit nem igazán fontos (ha elromlik, érthető marad a beszéd) (class 2) Megoldás class 1A biteket CRC-vel látják el, ha ez hibát jelez, az egész keretet (260) eldobjuk;g(x)=x3+x+1 class 1B biteket 4 db zero bittel egészítjük ki (dekódolási célból) az egész class 1-t R=1/2, T=5 konvolúciós kóddal kódoljuk.G=[1+D3+D4, 1+D+D3+D4] a class2 biteket kódolás nélkül visszük át, így összesen 456 bit a kódolt keret kódolt bitsebesség: 456 bit/20 ms 22.8 kbit/s.
DVB-T DVB-T: Terrestrial Digital Video Broadcast (földi digitális TV műsorszórás) Cél: SFN (Single Frequency Network – egyfrekvenciás hálózat, 700 MHz környékén) Hozzáférés: OFDM (Orthogonal Frequency Division Multiplex, sokvivős rendszer) Moduláció: QPSK,…,64QAM (több alkalmazási módus van definiálva) Továbbítot jelfolyam: MPEG-2 TS, minimum 8 Mbit/s Hibajavítás: kétszintű (kaszkád kód) Belső kód: R=1/2,…,7/8, T=7 kényszerhosszú (pontozott) konvolúciós kód Külső (opcionális) kód: GF(256)-fölötti rövidített Reed-Solomon(204,188) kód + több ponton kódátfűzés
DVB-S Outer Code-Reed Solomon A (204/188) Reed Solomon Code is applied to the data. This code is capable of correcting 8 errors. It takes the 188 bytes from the MPEG Encoder and adds 16 additional bytes of overhead. On the receive side, the RS decoder can take in data coming in at app. 10-4 BER and convert it to BER of 10-10 or better. Interleaving The data is then optionally Fornay interleaved (convolutional interleaver with depth 12) It is delimited by occasional synch packets. On the receive side, the interleaver provides a gain of app. 3 dB. It improves the ability to correct for large number of burst errors which are missed by the inner convolutional decoder. Inner Code The data is then convolutionally coded depending on the transponder size and channel quality desired. (By increasing the code rate, we are reducing the redundancy from the base rate.Increasing the code rate increases the information rate, increases error rate but reduces Eb/N0 requirements). The basic code rate is ½ with K=7. But this rate can be increased by puncturing the code at code rates 2/3, ¾, 5/6, and 7/8 and others. Each code rate is tried and then locked on using the synch data. On the receive side, the convolutional decoder can take in a service quality of 10-2 and improve it to an error rate of 10-4..