1 Detekcja i korekcja błędów w transmisji cyfrowej
2 pojedyncze wielokrotne. paczkowe (grupowe) (burst error) wymazanie danych (erasure) długość paczki błędów całkowita niepewność względem zakłóconych bitów, ale miejsca tych bitów są znane całkowita niepewność względem miejsca zakłóconych bitów oraz ich wartości Błędy w transmisji cyfrowej
3 metoda najbardziej popularna i skuteczna CRC (Cyclic Redundancy Check)
4 Przykład CRC w systemie dziesiętnym Liczba (informacja) nadawana 745 wybieramy dzielnik – np. 7 „przesuwamy” liczbę w lewo 7450 dzielimy przez 7 – otrzymujemy resztę 2. Należałoby tę resztę odjąć od 7450, 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 1001 od oryginału, a 1001 jest podzielne przez 7.
5 Słowa i liczby binarne są reprezentowane przez wielomiany zmiennej x Każda potęga w tym wielomianie reprezentuje odpowiednią pozycję cyfry binarnej x ma wartość nieoznaczoną, dlatego nie można obliczać wartości tego wielomianu W systemie dwójkowym…
6 Dodawanie modulo 2 bez przeniesień z uwzględnieniem właściwych potęg zmiennej x Arytmetyka wielomianów W arytmetyce modulo 2 odejmowanie jest równoważne dodawaniu ! Element przeciwny do a taki, że a + (-a) = 0, element przeciwny W arytmetyce mod 2 0 + 0 = 0 i 1 + 1 = 0 Odejmowanie to dodawanie elementu przeciwnego
7 Mnożenie Dzielenie x 6 + x 5 : x 3 + x + 1 x 3 + x 2 + x x 6 + x 4 + x 3 x 5 + x 4 + x 3 x 5 + x 3 + x 2 x 4 + x 2 x 4 + x 2 + x x reszta 1 1 0 0 0 0 0 : 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 1 iloraz dzielnik 1 1 1 0 1 0 1 0 1 1 1 0 reszta
8 CRC polega na dodawaniu do słowa bitów będących resztą z dzielenia Traktując bity reszty jako najmniej znaczące, należy bity wiadomości przesunąć odpowiednio w lewo, czyli zwiększyć ich wagę x n-k razy, aby zrobić „miejsce” dla bitów reszty n - k = liczba bitów reszty = liczba bitów dodatkowych
9 Dzielnik = wielomian generujący; jego wybór – bardzo ważny Po stronie odbiorczej odbieramy całe słowo łącznie z bitami „reszty” i dzielimy je przez ten sam wielomian generujący słowo powinno podzielić się bez reszty ! Dlaczego? Jak można zapisać wielomian całego słowa kodowego? gdzie n = długość słowa kodowego, k = długość wiadomości
10 ale podstawiając 000... 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(x)
11 słowo kodowe poprawne c(x) słowo niepoprawne (błędne) c’(x) przy czym e(x) = wektor błędów - słowo zawierające 0 i 1; jedynka oznacza, że na danym miejscu wystąpił błąd np. e(x) = 00001000 - na 5. bicie wystąpił błąd e(x) = 00111011 - błąd paczkowy o długości 6 bitów sprawdzana jest podzielność c’(x) przez g(x) to jest na pewno podzielne czy to jest podzielne przez g(x)? dodawanie mod 2 !
12 e(x) nie powinno być podzielne przez g(x) – w przeciwnym razie nie wykryje się błędu! Wybór wielomianu g(x) Dla błędów pojedynczych e(x) = 1...0000001 albox...0000010 albo x 2...0000100 albo x 3...0001000 albo x 4...0010000 itd.. Wielomian generujący g(x) nie powinien mieć postaci x m m [0, n-1] - nie może być jednomianem Dlatego…
13 Dla błędów podwójnych e(x) = x + 1...00011 albox 2 + 1...00101 albo x 3 + 1...01001 albo x 2 + x...00110 albo x 3 + x...01010 itd.. ogólnie e(x) = x i + x j = x i (1+ x j-i ) j, i numery błędnych bitów Wiadomo już, że g(x) nie dzieli bez reszty x i czy może podzielić bez reszty (1+x j-i )? 0 = < i < j < n-1 Wybór wielomianu g(x)
14 n-k = stopień wielomianu g(x) n = 7 k = 3 wielomian g(x) = x 3 + x + 1 nie dzieli (1+x n ) dla n < 15 Przykład Jeżeli g(x) jest primitive (nierozkładalny) to nie dzieli dwumianu (1 + x j-i ) dla j-i < 2 n-k -1 …0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0… taki błąd podwójny oraz krótsze będą wykryte Wybór wielomianu g(x) x n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
15 Błędy paczkowe długości L e(x) =...0 1 1 0 0 1 1 0 1 0 0... = d(x)·x i (L – długość paczki) Wybór wielomianu g(x) określa rozkład błędów w paczce
16 d(x) jest niepodzielny przez g(x), gdy deg{g(x)} > deg{d(x)} – dobrze! L = < n – k wykrywane są wszystkie błędy, L= 1+ n – k tzn. deg{g(x)} = deg{d(x)} podzielność tylko, gdy g(x) = d(x); prawdopodobieństwo takiego błędu = 1/2 L-2 L > 1 + n - k błędy mogą zostać niewykryte ich prawdopodobieństwo = 1/2 n-k (L – długość paczki) Wybór wielomianu g(x) spośród innych błędów o tej samej długości
17 x 8 + x 2 + x + 1 x 10 + x 9 + x 5 + x 4 + x 2 + 1 x 16 + x 12 + x 5 + 1 x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + + x 8 + x 7 + x 5 + x 4 + x 2 + x + 1 CRC-8 CRC-10 ITU-16 CCITT-32ITU-32 nagłówek ATM ATM AAL HDLC, XMODEM, V.41 LAN, IEEE 802, DoD, V.42 niektóre stosowane wielomiany generujące x 12 + x 11 + x 3 + x + 1 CRC-12 x 16 + x 15 + x 2 + 1 CRC-16 IBM Bisync Wybór wielomianu g(x) reszta 8-bitowa reszta 10-bitowa itd.
18 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
19 Rodzaje kodów korekcyjnych (protekcyjnych)
20 Kodowanie blokowe - proces kodowania w i-tym takcie nie zależy od przebiegu kodowania w poprzednich taktach. oznaczenie kodu nadmiarowego kod (n,k) bity informacyjnebity nadmiarowe bity informacyjne wydzielone od bitów nadmiarowych – kod systematyczny bity informacyjne i bity nadmiarowe „pomieszane” – kod niesystematyczny
21 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ą 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 dHdH d Hmin 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 2 2 1 1 3 1
22 Detekcja błędów Największa krotność błędów wykrywanych przez blokowy kod nadmiarowy (n,k) o odległości d Hmin wynosi 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 część całkowita
23 całkowita niepewność względem zakłóconych bitów, ale miejsca tych bitów są znane Błąd typu wymazanie danych (erasure) liczba korygowalnych błędów wymazania liczba korygowalnych „zwykłych” błędów korekcja błędów wymazania jest łatwiejsza!
24 Przykład z jednowymiarową przestrzenią kodową d = 1 d = 2 d = 3 d = 4 d = 5 poprawne słowo kodoweniepoprawne słowo kodowe
25 m1m1 m2m2 m3m3 m4m4 m5m5 m6m6 m7m7 m8m8 Słowo informacyjne Macierz generująca G (k x n) Słowo kodowe c1c1 c2c2 c3c3 c4c4 c5c5 c6c6 c7c7 c8c8 c9c9 c 10 c 11 c 12 Formalne wyznaczanie bitów nadmiarowych m(1, k) c(1, n)
26 [m 1 m 2 m 3 m 4 ] 1 0 0 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1 1 1 1 = [m 1 m 2 m 3 m 4 m 1 m 2 m 4 m 1 m 3 m 4 m 2 m 3 m 4 ] macierz generująca = słowo informacyjne x słowo kodowe Macierz G zawiera podmacierz jednostkową stopnia k oraz podmacierz zadającą kod (obliczanie bitów dodatkowych). Wiersze i kolumny G można przestawić – wtedy będzie kod niesystematyczny. m G = c = m G c
27 Macierz kontroli parzystości H syndrom s s1s1 s2s2 s3s3 s4s4 Kod odebrany c1c1 c2c2 c3c3 c4c4 c5c5 c6c6 c7c7 c8c8 c9c9 c 10 c 11 c 12 Po stronie odbiorczej odbiór bez błędów syndrom = 0 odbiór błędny syndrom wskazuje pozycję błędu macierz
28 c = m · G oraz s = c · H uwaga – tradycyjnie przyjmuje się, ale c = m · G m · G · H T = 0 dla dowolnego słowa informacyjnego G · H T = 0 Na pewno istnieje ścisły związek między macierzami G i H postulat: c · H T = 0 dla słowa poprawnego że przy kontroli parzystości korzysta się z macierzy transponowanej, tzn. s = c · H T … i tak będzie to stosowane… związek między macierzami · H T G Dokładniejsza postać macierzy G i H
29 c’· H T 0 dla słowa błędnego, ale c’ = c + e (c + e) · H T = c · H T + e · H T 0 = 0 s = e · H T W przypadku słowa błędnego ma być s 0 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 = 0 Dokładniejsza postać macierzy G i H
30 G = [ 1 P ] podmacierz jednostkowa podmacierz zadająca kod n k aby G · H T = 0, macierz H T powinna być postaci przy mnożeniu macierzy każdy składnik będzie postaci 1·p r,m p r,m ·1, a to jest zawsze = 0.
31 H = [ P T 1 ] n n-k zatem nietransponowana macierz H będzie równa Dokładniejsza postać macierzy G i H Przykład konstrukcji kodu korekcyjnego …
32 Liczba m bitów korekcyjnych niezbędnych do skorygowania t błędnych bitów. liczba ta musi spełniać nierówność wzór uniwersalny, niezależny od zastosowanego kodu korekcyjnego
33 Kodowanie za pomocą wielomianu generującego
34 Słowo informacyjne (jako wielomian) można pomnożyć przez wielomian generujący - otrzyma się wielomian na pewno podzielny przez g(x) ale bity informacyjne się „rozpłyną” – powstanie kod niesystematyczny Lepiej podzielić przez wielomian generujący (jak przy CRC) – dostanie się bity dodatkowe (reszty), które dołączy się do słowa informacyjnego. Błędy można wykryć i także zlokalizować (skorygować), o ile wielomian g(x) będzie dostatecznie wysokiego stopnia. Kodery wielomianowe są proste do realizacji sprzętowej…
35 Układowa realizacja kodowania wielomianowego dane wej 0101 0000 0000 0101 0101 0101 przerzutniki MS
36 dane wej. najpierw bity bardziej znaczące 0100100001001000 0001010100010101 0010101100101011 0100001001000010 słowo informacyjne 0101110101011101 0101011101010111 +1 bity reszty Układowa realizacja kodowania wielomianowego
37 Kody splotowe (P. Elias 1955) – 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 multiplekser dane wejściowe dane zakodowane elementy pamięciowe na każdy bit wejściowy przypada aż 3 bity wyjściowe! sprawność kodera =1/3 1 bit informacji i 2 nadmiarowe przykład prostego kodera splotowego
38 poz.1 funkcja przejścia = 1 poz.2 funkcja przejścia = 1 + D 2 poz.3 funkcja przejścia = 1 + D + D 2 D = operator opóźnienia D = opóźnienie o 1 takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu 1 impulsem, tzn. wejściowy ciąg bitów = 1 0 0 0 0… na 1. wyjściu 1 0 0 0 0… 1 0 0 0 0… + 1 0 0 0 0… na 2. wyjściu 1 0 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 na 3. wyjściu 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0
39 poz.1 funkcja przejścia = 1 poz.2 funkcja przejścia = 1 + D 2 poz.3 funkcja przejścia = 1 + D + D 2 D = operator opóźnienia D = opóźnienie o 1 takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu 1 impulsem, tzn. wejściowy ciąg bitów = 1 0 0 0 0… na 1. wyjściu 1 0 0 0 0… 1 0 0 0 0… + 1 0 0 0 0… na 2. wyjściu 1 0 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 na 3. wyjściu 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 odpowiedź impulsowa kodera = 1 1 1
40 poz.1 funkcja przejścia = 1 poz.2 funkcja przejścia = 1 + D 2 poz.3 funkcja przejścia = 1 + D + D 2 D = operator opóźnienia D = opóźnienie o 1 takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu 1 impulsem, tzn. wejściowy ciąg bitów = 1 0 0 0 0… na 1. wyjściu 1 0 0 0 0… 1 0 0 0 0… + 1 0 0 0 0… na 2. wyjściu 1 0 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 na 3. wyjściu 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 odpowiedź impulsowa kodera = 1 1 1 0 0 1
41 poz.1 funkcja przejścia = 1 poz.2 funkcja przejścia = 1 + D 2 poz.3 funkcja przejścia = 1 + D + D 2 D = operator opóźnienia D = opóźnienie o 1 takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu 1 impulsem, tzn. wejściowy ciąg bitów = 1 0 0 0 0… na 1. wyjściu 1 0 0 0 0… 1 0 0 0 0… + 1 0 0 0 0… na 2. wyjściu 1 0 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 na 3. wyjściu 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 odpowiedź impulsowa kodera = 1 1 1 0 0 1 0 1 1
42 poz.1 funkcja przejścia = 1 poz.2 funkcja przejścia = 1 + D 2 poz.3 funkcja przejścia = 1 + D + D 2 D = operator opóźnienia D = opóźnienie o 1 takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu 1 impulsem, tzn. wejściowy ciąg bitów = 1 0 0 0 0… na 1. wyjściu 1 0 0 0 0… 1 0 0 0 0… + 1 0 0 0 0… na 2. wyjściu 1 0 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 na 3. wyjściu 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 odpowiedź impulsowa kodera = 1 1 1 0 0 1 0 1 1 0 0 0
43 poz.1 funkcja przejścia = 1 poz.2 funkcja przejścia = 1 + D 2 poz.3 funkcja przejścia = 1 + D + D 2 D = operator opóźnienia D = opóźnienie o 1 takt D 2 = opóźnienie o 2 takty, itd. odpowiedź impulsowa kodera = przy pobudzeniu 1 impulsem, tzn. wejściowy ciąg bitów = 1 0 0 0 0… na 1. wyjściu 1 0 0 0 0… 1 0 0 0 0… + 1 0 0 0 0… na 2. wyjściu 1 0 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 na 3. wyjściu 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 odpowiedź impulsowa kodera = 1 1 1 0 0 1 0 1 1 0 0 0...
44 pewne przejścia są niedozwolone! krata (trellis) stany kodera wyrażone przez stany przerzutników generowane stany na wyjściu
45
46 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 GSM, DVB, UMTS, WLAN współczesne dekodery Viterbiego – specjalizowane układy scalone