Detekcja i korekcja błędów w transmisji cyfrowej
Błędy w transmisji cyfrowej pojedyncze wielokrotne. całkowita niepewność względem miejsca zakłóconych bitów oraz czy w ogóle występują paczkowe (grupowe) (burst error) długość paczki błędów wymazanie danych (erasure) całkowita niepewność względem wartości zakłóconych bitów, ale miejsca tych bitów są znane
CRC (Cyclic Redundancy Check) metoda najbardziej popularna i skuteczna
Przykład CRC w systemie dziesiętnym Liczba (informacja) nadawana 745 wybieramy dzielnik np. 7 przesuwamy liczbę w lewo 745 dzielimy przez 7 otrzymujemy resztę 2. Należałoby tę resztę odjąć od 745, aby uzyskać liczbę podzielną przez 7, ale wtedy zmieniłaby się liczba informacyjna Można dodać dopełnienie do 7, czyli dodać 5 Ostatecznie liczba 745 zostaje zakodowana do postaci 7455, która dzieli się przez 7. Jeżeli odebrana liczba będzie zawierać jeden błąd np. 7465 7555 7355 nie dzielą się bez reszty przez 7 błąd można wykryć 8455 6455 8555 8456 dzieli się przez 7!! Zmieniona liczba różni się o od oryginału, a jest podzielne przez 7.
Słowa i liczby binarne są reprezentowane przez wielomiany zmiennej Każda potęga w tym wielomianie reprezentuje odpowiednią pozycję cyfry binarnej 2 4 5 7 2 3 4 5 6 7 ma wartość nieoznaczoną, dlatego nie można obliczać wartości tego wielomianu W systemie dwójkowym
Arytmetyka wielomianów Dodawanie modulo 2 bez przeniesień z uwzględnieniem właściwych potęg zmiennej ( 7 6 ) ( 6 5 ) 7 ( ) 6 5 ( ) 7 5 Odejmowanie to dodawanie elementu przeciwnego element przeciwny Element przeciwny do a taki, że a + (-a) =, b a b ( a) W arytmetyce mod 2 + = i + = W arytmetyce modulo 2 odejmowanie jest równoważne dodawaniu!
Mnożenie ( )( 2 ) 3 2 2 3 ( ) 2 ( ) 3 Dzielenie iloraz : dzielnik reszta 3 + 2 + 6 + 5 : 3 + + 6 + 4 + 3 5 + 4 + 3 5 + 3 + 2 4 + 2 4 + 2 + reszta
Metoda CRC polega na dodawaniu bitów będących resztą z dzielenia wielomian generujący Traktując bity reszty jako najmniej znaczące, należy bity wiadomości przesunąć odpowiednio w lewo, czyli zwiększyć ich wagę n-k razy, aby zrobić miejsce dla bitów reszty n - k = liczba bitów reszty = liczba bitów dodatkowych
Procedura CRC ) przyjmujemy wielomian generujący g() stopnia g = n k; 2) słowo wiadomości (binarne) przedstawiamy w postaci wielomianu m(); 3) wielomian m() przesuwamy w lewo o g pozycji, tj. zwiększamy wagę jego wszystkich wyrazów g razy, a puste miejsca w wielomianie uzupełniamy zerami; 4) otrzymujemy wielomian m() g ; 5) wielomian ten dzielimy przez g(); 6) resztę z dzielenia dopisujemy do wielomianu m() g, 7) otrzymujemy wielomian m() g + r(); 8) zamieniamy go na liczbę binarną otrzymujemy końcowe słowo kodowe. m( ) nk m()
Po stronie odbiorczej odbieramy całe słowo łącznie z bitami reszty i dzielimy je przez ten sam wielomian generujący Dlaczego? słowo powinno podzielić się bez reszty! Jak można zapisać wielomian całego słowa kodowego? nk c( ) m( ) r( ) gdzie n = długość słowa kodowego, k = długość wiadomości m( ) nk m()
) ( ) ( ) ( ) ( r q g m k n ) ( ) ( ) ( r m c k n ale podstawiając ) ( ) ( ) ( ) ( ) ( r r q g c k n m ) (... w stosowanej arytmetyce Prawidłowe słowo kodowe dzieli się bez reszty przez wielomian generujący... i to jest sprawdzane po stronie odbiorczej bo w ten sposób została wyznaczona r()
słowo kodowe poprawne c() słowo niepoprawne (błędne) c () przy czym c' ( ) c( ) e( ) dodawanie mod 2! e() = wektor błędów - słowo zawierające i ; jedynka oznacza, że na danym miejscu wystąpił błąd np. e() = - na 5. bicie wystąpił błąd e() = - błąd paczkowy o długości 6 bitów sprawdzana jest podzielność c () przez g() c' ( ) g( ) q( ) e( ) to jest na pewno podzielne czy to jest podzielne przez g()?
Wybór wielomianu g() e() nie powinno być podzielne przez g() w przeciwnym razie nie wykryje się błędu! Dla błędów pojedynczych e() =... albo... albo 2... albo 3... albo 4... itd.. Dlatego Wielomian generujący g() nie powinien mieć postaci m - nie może być jednomianem m[, n-]
Wybór wielomianu g() Dla błędów podwójnych e() = +... albo 2 +... albo 3 +... albo 2 +... albo 3 +... itd.. ogólnie e() = i + j = i (+ j-i ) j, i numery = < i < j < n- błędnych bitów Wiadomo już, że g() nie dzieli bez reszty i czy może podzielić bez reszty (+ j-i )?
Wybór wielomianu g() Jeżeli g() jest primitive (nierozkładalny) to nie dzieli dwumianu ( + j-i ) dla j - i < 2 n - k - n - k = stopień wielomianu g() Przykład n = 7 k = 3 wielomian g() = 3 + + nie dzieli (+ n ) dla n < 5 n taki błąd podwójny oraz krótsze będą wykryte
Wybór wielomianu g() niektóre stosowane wielomiany generujące CRC-8 8 + 2 + + reszta 8-bitowa nagłówek ATM CRC- + 9 + 5 + 4 + 2 + reszta -bitowa ATM AAL CRC-2 2 + + 3 + + itd. CRC-6 6 + 5 + 2 + IBM Bisync ITU-6 6 + 2 + 5 + HDLC, XMODEM, V.4 CCITT-32 ITU-32 32 + 26 + 23 + 22 + 6 + 2 + + + + 8 + 7 + 5 + 4 + 2 + + LAN, IEEE 82, V.42 Przykładowo, wielomian CRC-2 wykrywa wszystkie błędy paczkowe o długości 2 b, 99,95% błędów o długości 3 b i 99,976% jeszcze dłuższych!
Najlepsze wielomiany generujące wg S. Jackowskiego (Telekomunikacja - Pol. Radomska) n = 3 n = 7 n = 5 n = 3 n = 63 n = 27 n = 255 2 + + 3 + + 4 + + 5 + 3 + 6 + + 7 + 3 + 8 + 4 + 3 + 2 + długość całego słowa
Dotychczas było tylko wykrywanie błędów lepiej błędy wykrywać i korygować do tego celu potrzebny jest znaczny nadmiar informacji kodowanie nadmiarowe - - przekształcanie k-pozycyjnych binarnych ciągów informacyjnych w n-pozycyjne ciągi kodowe, gdzie n > k
Rodzaje kodów korekcyjnych (protekcyjnych)
Kodowanie blokowe - proces kodowania w i-tym takcie nie zależy od przebiegu kodowania w poprzednich taktach. oznaczenie kodu nadmiarowego kod (n,k) bity informacyjne bity nadmiarowe bity informacyjne wydzielone od bitów nadmiarowych kod systematyczny bity informacyjne i bity nadmiarowe pomieszane kod niesystematyczny
Zdolność korekcyjna kodu zależy od odległości Hamminga między słowami kodowymi Odległość Hamminga - liczba pozycji bitów, na których dwa słowa kodowe się różnią d H inaczej miara niepodobieństwa słów kodowych Minimalna odległość Hamminga dla kodu - najmniejsza odległość dla dowolnej pary słów z danej przestrzeni kodowej 2 3 2 d Hmin
Detekcja błędów Największa krotność błędów wykrywanych przez blokowy kod nadmiarowy (n,k) o odległości d Hmin wynosi d H min Korekcja błędów Szukamy takiego słowa kodowego, które jest najbardziej podobne do znanych słów kodowych (ma najmniejszą odległość H. od słowa odebranego). Ilość błędów korygowalnych d E H min 2 część całkowita
Błąd typu wymazanie danych (erasure) całkowita niepewność względem zakłóconych bitów, ale miejsca tych bitów są znane liczba korygowalnych błędów wymazania d H min liczba korygowalnych zwykłych błędów d E H min 2 korekcja błędów wymazania jest łatwiejsza!
Przykład z jednowymiarową przestrzenią kodową d H = d H = 2 d H = 3 d H = 4 d H = 5 poprawne słowo kodowe niepoprawne słowo kodowe skutek zakłócenia
Formalne przedstawienie kodowania nadmiarowego Słowo informacyjne m m 2 m 3 m 4 m 5 m 6 m 7 m 8 m(, k) Macierz generująca G (k n) Słowo kodowe c c 2 c 3 c 4 c 5 c 6 c 7 c 8 c 9 c c c 2 c(, n)
słowo informacyjne macierz generująca = słowo kodowe m G = c m [m m 2 m 3 m 4 ] G = [m m 2 m 3 m 4 m m 2 m 4 m m 3 m 4 m 2 m 3 m 4 ] = c Macierz G zawiera podmacierz jednostkową stopnia k oraz podmacierz zadającą kod (do obliczania bitów dodatkowych). Wiersze i kolumny G można przestawić wtedy otrzyma się kod niesystematyczny.
Po stronie odbiorczej Kod odebrany c c 2 c 3 c 4 c 5 c 6 c 7 c 8 c 9 c c c 2 Macierz kontroli parzystości H syndrom s s s 2 s 3 s 4 odbiór bez błędów syndrom = macierz odbiór błędny - syndrom wskazuje pozycję błędu
Dokładniejsza postać macierzy G i H Na pewno istnieje ścisły związek między macierzami G i H c = m G oraz s = c H uwaga tradycyjnie przyjmuje się, że przy kontroli parzystości korzysta się z macierzy transponowanej, tzn. s = c H T i tak będzie to stosowane postulat: c H T = dla słowa poprawnego ale c = m G m G H T = dla dowolnego słowa informacyjnego G H T G H T = związek między macierzami
Dokładniejsza postać macierzy G i H W przypadku słowa błędnego ma być s c H T dla słowa błędnego, ale c = c + e (c + e) H T = c H T + e H T = s = e H T Dla odpowiednio skonstruowanej macierzy H wartość syndromu nie zależy od słowa informacyjnego, a tylko od rozkładu błędów. G H T =
Dokładniejsza postać macierzy G i H G = [ P ] podmacierz jednostkowa n k podmacierz zadająca kod aby G H T =, macierz H T powinna być postaci przy mnożeniu macierzy każdy składnik będzie postaci p r,m p r,m, a to jest zawsze =.
Dokładniejsza postać macierzy G i H zatem nietransponowana macierz H będzie równa n H = [ P T ] n-k
Liczba m bitów korekcyjnych niezbędnych do skorygowania t błędnych bitów. liczba ta musi spełniać nierówność 2 m t i k i m wzór uniwersalny, niezależny od zastosowanego kodu korekcyjnego a b a! b!( a b)!
Kodowanie za pomocą wielomianu generującego wyznaczane są bity reszty z dzielenia i one stanowią bity nadmiarowe; jeżeli będzie ich dostatecznie dużo można skorygować błędy Kodery wielomianowe są proste do realizacji sprzętowej
Układowa realizacja kodowania wielomianowego dane wej przerzutniki MS
Układowa realizacja kodowania wielomianowego dane wej. po pierwszym takcie zegara najpierw bity bardziej znaczące
Układowa realizacja kodowania wielomianowego dane wej. słowo informacyjne najpierw bity bardziej znaczące + + + + + + koder koder2 bity reszty
Przykład kodera IBM Bisync (z systemu IBM36) g()= 6 + 5 + 2 +
Kody cykliczne największe zastosowanie praktyczne (prosta realizacja układowa) specyficzne kody wielomianowe cykliczność = wektory kodowe po przesunięciu symboli ( w kółko ) też należą do prawidłowych słów kodowych c c 2 c 3 c 4 c 5 c 6... to są słowa kodowe (łącznie z bitami nadmiarowymi)!
Kodowanie Reeda-Solomona szczególnie do korekcji błędów paczkowych Podstawowa jednostka w kodzie RS = grupa bitów (symbol), a nie bit Aby skorygować t symboli potrzeba 2t symboli dodatkowych (np. bajtów) symbol s-bitowy (np. s = 8) wtedy maksymalna długość całego słowa n = 2 s
Przykład kodowania korekcyjnego dotyczącego grup bitów, np. bajtów A B C X Y 5 5 34 54 27 A+B+C A+2B+3C Jeżeli odebrano 5 5 3 54 27 (jeden bajt błędny) A B C X Y Oblicza się A+B+C = 5; wartość błędu = X-(A+B+C) = 54-5 = 4 Ale gdzie ten błąd wystąpił? Oblicza się A+2B+3C = 5; (Y 5) / 4 = 3 Miejsce błędu = Y X Y X miejsce błędu Kod koryguje jeden bajt kosztem 2 bajtów dodatkowych
Kody splotowe (P. Elias 955) dane wejściowe kodowane są na bieżąco (jak dochodzą do wejścia) nie ma potrzeby zapamiętywania bloków danych w celu ich zakodowania dane wejściowe dane zakodowane przykład prostego kodera splotowego elementy pamięciowe multiplekser na każdy bit wejściowy przypada aż 3 bity wyjściowe! sprawność kodera =/3 bit informacji i 2 nadmiarowe
poz. funkcja przejścia = poz.2 funkcja przejścia = + D 2 poz.3 funkcja przejścia = + D + D 2 D = operator opóźnienia D = opóźnienie o takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu impulsem, tzn. wejściowy ciąg bitów = na. wyjściu + na 2. wyjściu + na 3. wyjściu
poz. funkcja przejścia = poz.2 funkcja przejścia = + D 2 poz.3 funkcja przejścia = + D + D 2 D = operator opóźnienia D = opóźnienie o takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu impulsem, tzn. wejściowy ciąg bitów = na. wyjściu + na 2. wyjściu + na 3. wyjściu odpowiedź impulsowa kodera =
poz. funkcja przejścia = poz.2 funkcja przejścia = + D 2 poz.3 funkcja przejścia = + D + D 2 D = operator opóźnienia D = opóźnienie o takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu impulsem, tzn. wejściowy ciąg bitów = na. wyjściu + na 2. wyjściu + na 3. wyjściu odpowiedź impulsowa kodera =
poz. funkcja przejścia = poz.2 funkcja przejścia = + D 2 poz.3 funkcja przejścia = + D + D 2 D = operator opóźnienia D = opóźnienie o takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu impulsem, tzn. wejściowy ciąg bitów = na. wyjściu + na 2. wyjściu + na 3. wyjściu odpowiedź impulsowa kodera =
poz. funkcja przejścia = poz.2 funkcja przejścia = + D 2 poz.3 funkcja przejścia = + D + D 2 D = operator opóźnienia D = opóźnienie o takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu impulsem, tzn. wejściowy ciąg bitów = na. wyjściu + na 2. wyjściu + na 3. wyjściu odpowiedź impulsowa kodera =
poz. funkcja przejścia = poz.2 funkcja przejścia = + D 2 poz.3 funkcja przejścia = + D + D 2 D = operator opóźnienia D = opóźnienie o takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu impulsem, tzn. wejściowy ciąg bitów = na. wyjściu + na 2. wyjściu + na 3. wyjściu odpowiedź impulsowa kodera =...
krata (trellis) stany kodera wyrażone przez stany przerzutników generowane stany na wyjściu pewne przejścia są niedozwolone!
stany kodera przy danej sekwencji bitów wejściowych dla kodów splotowych nie można określić odległości Hamminga, bo słowa kodowe jako takie nie isstnieją!
dekodowanie kodów splotowych algorytm Viterbiego przykład A. Viterbi poszukiwanie takiego ciągu bitów, aby był on najmniej odległy (np. w sensie Hamminga) od ciągu odebranego współczesne dekodery Viterbiego specjalizowane układy scalone GSM, DVB, UMTS, WLAN
koder splotowy z systemu radiofonii DAB