Wykład 11: Kody i metody korekcji błędów PG – Katedra Systemów Mikroelektronicznych ZASTOSOWANIE PROCESORÓW SYGNAŁOWYCH Marek Wroński Wykład 11: Kody i metody korekcji błędów
Korekcja błędów w kodzie powtórzeniowym
Przesyłanie prostego repetycyjnego kodu 3-bitowego dowa: Prawidłowa transmisja dla (a), (b), (e) i (f). W innych przyp. dekoder kryterium większościowego popełnia błędy. Występuje to gdy jest więcej niż t=1 błędów bit
Odległość Hamminga Jeśli jest d bł. bitów to przekazywane słowo będzie zamienione na inne i błąd nie może być wykryty Przy klasyfikacji kodu stosuje się triplet z łożony z długości słowa kodowego n, liczby bitów informacyjnych k iminimalnej odległości Hamminga d. Taki triplet oznacza się jako (n,k,d). Nasz kod powtórzeniowy zapiszemy jako (3, 1, 3). Liczba bitów parzystości (nadmiarowych) =n-k. Według odl. Hamminga możemy stwierdzić ile błędnych bitów t (na słowo kodowe) może obsłużyć dany kod. Jeśli w słowie kodowym jest więcej niż t błędnych bitów, to wyżej opisane kodowanie może nawet zwiększyć liczbę bitów i pogorszyć sytuację. W takim przypadku trzeba zastosować lepszy kod, lub nawet może być korzystna rezygnacja Z zastosowania jakiegokolwiek kodu korekcji błędów.
Liniowe kody korekcji błędów, np. LC(6,3,3) To takie kody w których suma składowych (binarna tj. modulo2) dwóch słów kodowych xi i xj musi być też słowem kodowym. Mają właściwość, że sąsiedztwo wszystkich słów kodowych w n-miernej „przestrzeni kodowej” wygląda jednakowo. Kodowanie polega na mnożeniu słowa informacji u=[0 1 0] przez macierz generującą kodu G=[I:P] (mac. I (k*k) rozszerzona o macierz P (k*n-k) określającą bity parzystości) x=[u1u2 u3 p1 p2 p3 ], np. p1= u1+u2 ; p2 = u2+u3; p3 = u1+u2+u3; Przesyłane słowo kodowe: x=u*G=u*[I:P]=[0 1 0]* =[0 1 0 1 1 1] Macierz parzystości: H=[PT:I] W dekoderze najpierw obliczamy syndrom błędu jako: (gdy brak błędów y=x) s=y*HT= [0 1 0 1 1 1]* =[0 0 0]=0; Jeżeli powstanie błąd, np.e=[0 0 1 0 0 0] tj. odebrano y=x+e=[0 1 0 1 1 1]+[0 0 1 0 0 0]=[0 1 1 1 1 1] wtedy: Wyodrębnienie inform. z odebranego słowa: s=y*HT= [0 1 1 1 1 1] =[0 1 1] u=x*[I:0]= [0 1 0 1 1 1]* =[0 1 0];
Tablica dekodowania Zawiera ona wektory błędów, które mogą generować specyficzny wektor syndromu błędu. Syndrom użyjemy jako indeks w tablicy dekodowania stosując zasadę maksymalnej wiarygodności (najbardziej prawdopodobny błąd 1 bitu) dlatego z 1kol odczytujemy: e=[0 0 1 0 0 0] więc: skorygowane słowo kodowe x=y+e=[0 1 1 1 1 1]+[0 0 1 0 0 0]=[0 1 0 1 1 1] stąd przesłana inf. u=x*[I:0]=[0 1 0] (odl.Hamminga=3->wykryje (3-1) bł. koryguje [(3-1)/2] błędów Nie skoryguje np. podwójnego błędu bitów e=[0 1 0 1 0 0]+x=[0 0 1 0 1 1]=[0 1 1 1 1 1]=y po „skorygowaniu” (jak wyżej) u’=[010]<>u
Kody cykliczne, np. CC(7,4,3) Oprócz liniowości cechują się również przesunięciem cyklicznym („rotacja” też daje inne słowo kodowe, np.. 111001 i 110011) Dla nich używa się zapisu wielomianowego: c(x)=c0+ c1*x + c2*x2+.. + cn-1*xn-1; c=[c0 c1 c2 ...cn-1] m-bit rotacja: xm *c(x) modulo(xn-1). Kodowanie to mnożenie przez wielomian generujący g(x) lub przesuwanie i dzielenie wyniku przez g(x) -> c(x)= xn-ku(x)-r(x); xn-ku(x)/g(x)=q(x)+r(x)/g(x) Przy dekodowaniu odebran. słowa v(x)=c(x)+e(x) obl. wielomian syndromu jako reszta v(x)/g(x) jest on jednocześnie resztą z dzielenia e(x) przez g(x), dlatego m.b. użyty do identyfikacji bł. e(x) Np. g(x)= 1+x+x3; informacja: 0010, tj.u(x)=x2; wielomian kodu: c(x)=u(x)*g(x)= x2+ x3+ x5; tzn. przesyłana sekwencja bitów: 0011010 przy braku bł. e(x)=0 c(x)/g(x)= x2+ 0/g(x), tj. s(x)=0 gdy jest bł. e(x)= x5, więc: v(x)=c(x)+e(x)= x2+ x3; dlatego: v(x)/g(x)=1+(x2+x+1)/g(x) stąd dla c(x)=0 obl. lub znajdujemy e(x)= x5 Korekcja błędu daje: v(x)+e(x)= x2+ x3+ x5; skąd u(x)=x2 Syndrom po 7krokach.
Tabela dekodowania i implementacja algorytmu Do implementacji mnożenie i dzielenie wielomianów zamieniamy filtracją’ bo C(z)=U(z)*G(z) gdy: g0=1 i gn-k=1 tj. G(z)=1+G’(z) SOI G’(z) w pętli „-”sprz. da NOI:
Kody splotowe , np. (2,1,2) – kodowanie Działają na zasadzie ciągłego „strumienia” wtrącając bity parzystości między bity informacyjne zgodnie z pewnymi regułami. Kodowanie to n binarnych filtrów SOI, mających wspólną linię opóźniającą (o dł.m). Każdy filtr j ma swą własną binarną odpowiedź impulsową gi(J),dlatego na wyjściu j-filtru: gdzie u1, u2,... uL bity informacyjne, gi(J) j-ty generator Bity przesyłanego słowa kodowego: c=(c1(1), c1(2),... c1(n), c1( 1), c2(2),... c2(n), cL+m(1), cL+m(2),... cL+m(n)) Na początku wszystkie m elementów w linii opóźniającej jest zerowanych. Potem wprowadzamy po kolei symbole informacyjne i obl. syg. wy. wszystkich filtrów i przesyłamy do wyjścia i tak do uL.W dalszych m krokach wchodzą zera (końcówka kodu tail). Np. g(1)=(1,0,1) i g(2)=(1,1,1) sekw. informac. ul=(0,1,0,1) daje cl(j)=(00,11,01,00,01,11)
Dekodowanie Viterbiego – wykres przejść całych sekwencji (c1 c2 ... cL+m ) maksymalizuje wiarygodność odebrania sekwencji bitów c jako sumy odległości Hamminga m.odebraną sekwencją a przesyłaną Nie znamy ostatniej ale z wiedzy o działaniu kodera tworzymy estymatę tzw. wykres przejść między stanami w koderze lub kratowy wykres kodu możliwych przejść (zaczynając od stanu początkowego 00 i kończąc po L+m krokach tworzących końcówkę na 00) Wykres przejść między stanami zaczynając od stanu 00 (wszystkie elementy pamięc. 0). Cyfry w węzłach są nr. stanów, czyli zawartościami elementów pamięciowych, a cyfry nad gałęziami są symbolami informacji wejściowej ul (w nawiasach) i bitami kodu wyjściowego cl(1) i cl(2) .
Wykres kratowy. Stany na osi y, kroki na osi x, liczby pisane kursywą są są skumulowanymi ujemnymi odległościami Hamminga, liczby w nawiasach są estymowanymi symbolami informacyjnymi, liczby przy gałęziach są spodziewanymi blokami kodu. We.sekw.ul=(0,1,0,1) brak bł.cl(j)=(00,11,01,00,01,11) Przy bł. e=(01,10,00,10,11) -> v=(01,01,01,10,01,11) W 1-kr.(od 00) odbierany blok (słowo) v1=(0,1). Były 2 możliw: ul=(1) tj. przejście do 10 i wygen. c1=(1,1) (ale odebraliśmy v1=(0,1)więc obl. odl. Hamminga –1) lub pozostać w 00 i wygenerować c1=(0,0). W 2-kr.odebr.v2=(0,1) obl.skumul.odl.Hamminga dla wszystkich możliw.przejść itd..Wybieramy „najtańszą” Śledząc wstecznie uzysk.estymow.(zdekod) inf. u (dół)
Częściej stosowane kody CRC (redundancy check codes), BCH, RS i splotowe. CRC-4: g(x)=1+x+x4 CRC-5: g(x)=1+x2+x4+x5 CRC-6: g(x)=1+x+x6 CRC-12: g(x)=1+x+x2+x3+x11+x12 CRC-16: g(x)=1+x2 +x15+x16 CRC-CCITT: g(x)=1+x5 +x12+x16 BCH: n=2m-1; k>=n-mt; d>=2t+1; m=3,4,5..(Bose, Chaudhuri, Hocquenghem dla tel.komórkow.) Kody Reeda-Solomona (RS) to kody BCH działające z grupą bitów (z m-narnymi symbolami). Mają one największą możliwą minimalną odległość Hamminga przy danej liczbie bitów kontrolnych I danej długości bloku. Stosuje się je w systemach kombinacyjnych. Jet PropulisionLab (NASA do Voyagera na Marsa) kod splotowy (2,1,6) g(1)=(1,1,0,1,1,0,1) g(2)=(1,1,0,1,1,0,1) Linkabit kod splotowy (3,1,6) g(1)=(1,1,0,1,1,0,1) g(2)=(1,0,0,1,1,1,1) g(3)=(1,0,1,0,1,1,1)
Przeplot <= t korygowanych Przeplot stosuje się, np. w kanałach radiowych, tam gdzie błędy pojawiają się w paczkach (seryjne) Jest to metoda rozproszenia błędów bitowych w serii na większą liczbę bloków kodowych tak aby liczba błędów bitowych na blok (dł. n mający k bitów inf.) mb.skorygowana przez dość krótki kod. Przychodzące symb.inf. są kodowane i zapamiętywane wiersz po wierszu (l wierszy=głębok.przepl) Po zgromadzeniu l słów matryca jest pełna. ui(j) bit inf. i w słowie j, pm(j) bit parzystości m w słowie j Wyjściem kanału jest nl bitów, lecz tym razem kolumna po kolumnie u1(1) ,u1(2) ,.. u1(l) ... P(n-m)(l) Po stronie dekodera działanie odwrotne – rozplot bity są rejestrowane, kolumna po kolumnie i potem odczytywane do dekodera wiersz po wierszu Rozproszenie serii N kolejnych błędnych bitów na L słów kodowych. Każde słowo kodowe zawiera <= t korygowanych
Kodowanie w modemie V.32 z 32(.) modulacją kratową (Trellis mod.) Dane wejściowe są dzielone w grupy 4-bitowe. Pierwsze dwa bity każdej grupy są kodowane różnicowo, później następuje kodowanie złożone tak, aby uzyskać zestaw 3 bitów. Pozostałe dwa bity nie są kodowane, a jedynie przesyłane dalej. W wyniku takiego działania każda grupa zawiera pięć bitów. Następnie te pięć bitów jest mapowane na rozkładzie 32-punktowym. Po stronie odbiornika dane są dekodowane algorytmem największego prawdopodobieństwa (Viterbi) w celu oszacowania otrzymanych danych.
Koder c.d Kodowanie 2-etapowe: koder różnicowy + koder splotowy. Koder różnicowy zabezpiecza przed 180o niejednoznacznością.Tylko 2 z 4 bitów jest kodowanych Koder splotowy wprowadza ograniczenia -nie pozwala na sąsiedztwo kolejnych wyjść (dla zadanych stanów (S0,S1,S2), np.(0,0,1) dop. 4 z 8 dróg (Y0,Y1,Y2):000,010,100,110) Funkcjonalnie to 3-bit.rejestr przesuwny połączony układami logiki AND i XOR. Stanem opóźnienia nazywane są trzy bity pamięci kodera (S0, S1, S2), a bity wyjścia (Y0, Y1, Y2) nazywane są stanem ścieżki. Dając określony stan opóźnienia (S0, S1, S2) nie wszystkie stany ścieżki są możliwe w tym czasie. Np. mając stan opóźnienia (0, 0, 1) możemy w następnym interwale czasu otrzymać tylko 4 ścieżki stanu (0, 0, 0), (0, 1, 0), (1, 0, 0) i (1, 1, 0). W ten sposób otrzymujemy strukturę siatki. Koder jest maszyną o skończonej odpowiedzi, a więc można go przedstawić za pomocą schematu o skończonej odpowiedzi. Koder ma osiem możliwym stanów opóźnienia. W dowolnym czasie koder może przyjąć tylko jeden stan opóźnienia (S0, S1, S2). W następnej iteracji koder może przyjąć już tylko cztery stany opóźnienia.
V.32 konstelacja Modulacja 32-punktowa charakteryzuje się większym bit-error rate (BER) w porównaniu do rozkładu 16-bit. Dzieje się tak dlatego, że minimalna odl. Euklidesowa między dowolnymi dwoma punktami na 32-punktowym rozkładzie jest bardzo mała, co zmniejsza margines szumu. Jednakże kodowanie złożone nie pozwala dwóm następu- jącym po sobie symbolach być w ośmiu sąsiednich pozycjach od siebie. Dzięki temu minimalny dystans miedzy dwoma punktami jest zwiększony i uzyskujemy wzrost wydajności o 3 dB.
Wykres kratowy (V.32 Modem Trellis Diagram) Ukazuje on zależność pomiędzy stanami opóżnionymi i bieżącymi (delay and path states). Zauważ, że nie wszystkie stany mogą być osiągnięte ze stanów poprzednich. Wybór właściwej drogi (w czasie) zależy od bieżącego stanu (path state) i od historii stanów wraz z ich rzetel- nością (tzw.miękka decyzja wg.funkcji kosztu: sum.Euclides.odległości zamiast odległości Hamminga bo dla szumu białego czym odleglejszy (.) na konstelacji tym jest on mniej prawdopodobny )
Dekodowania Viterbi’ego Z 4 możliwych dróg (path states) ta która ma min.koszt jest wybierana (reszta jest dezaktywowana) Określony stan (delay state) m.b. osiągnięty tylko z 4 stanów poprzednich. Dekoder wybiera tylko jeden tak aby uzyskać połączenie pomiędzy poprzednim i bieżącym odcinkiem czasowym. To połączenie jest identyfikowane jako path state.Każda droga (path state) związana z 3 bit z 5-ciu Dlatego1 droga identyfikuje 4(.) na konstelacji symetrycznie umieszczone i jednakowo max.odległe
Implementacja dekodowania Viterbi’ego w modemie V.32 Na początku każdego interwału czasowego wybiera najbliższy(.) na konstel.i selekcjonuje 8 dróg. Jest to rozwinięcie wykresu kratowego (x czas, y 8 możliw.) Koder m. osiągać tylko 1, ale dekoder zapamiętuje wszystkie 8 aż do zdecydowania który. Funkcje kosztu są uaktualniane jako sumy odległości dla drogi i wybierana z min.kosztem. Wybrana droga prześledzona z powrotem daje poszukiwany stan (Y0,Y1,Y2). Ten 3-bit. rezultat nie identyfik. jednoznacznie 5-bit. wy.sygn. 4 (.) na konstelacji odpowiadaj tym 3 bitom są porównywane z korespondującymi w danym czasie i wybierana 5-bit. wartość najbliższa (ciągnie całą historię z 16 interwałów czasowych)