seminaria: algorytmy kombinatoryczne wojciech...

30
Seminaria: Algorytmy kombinatoryczne Wojciech Siwek

Upload: others

Post on 10-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Seminaria: Algorytmy kombinatoryczne

Wojciech Siwek

Page 2: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Kody cykliczne są podklasą kodów liniowych i znalazły największe zastosowania praktyczne. Popularność kodów cyklicznych wynika z następujących ich zalet:

istnieją efektywne algebraiczne metody konstrukcji kodów cyklicznych o wymaganych właściwościach,

realizacja koderów i dekoderów kodów cyklicznych za pomocą rejestrów przesuwnych ze sprzężeniem zwrotnym jest stosunkowo prosta.

Page 3: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

W algebrze kodów cyklicznych ciągi informacyjne i kodowe zapisuje się w postaci wielomianów, a właściwości kodów opisuje się za pomocą pojęć z zakresu pierścieni wielomianów i ciał Galois (ciał skończonych).

Nazwa kodów cyklicznych pochodzi od właściwości przesunięcia cyklicznego, którą spełniają wektory kodowe. Stąd wywodzi się też definicja kodu cyklicznego.

Page 4: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

1. Definicja kodu cyklicznego 2. Postać wielomianowa wektora kodu 3. Przykład. kod z bitem kodowym 4. Wielomiany generujące kody cykliczne 5. Przykład. Wyznaczenie wielomianów

generujących kody cykliczne 6. Algorytm kodowania 7. Przykład. Kodowanie cyklicznego kodu

Hamminga (7,4) 8. Uproszczony algorytm dekodowania 9. Przykład. Dekodowanie wektora odebranego

cyklicznego kodu Hamminga (7,4)

Page 5: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Kod (n, k) jest kodem cyklicznym, jeśli każdy wektor kodowy:

po i-tym przesunięciu cyklicznym daje wektor

będący również wektorem kodowym tego kodu.

Page 6: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Wektor kodowy c można zapisać w postaci wielomianu:

Twierdzenie

Właściwość przesunięcia cyklicznego dla wielomianowej postaci słów kodowych definiuje się w następujący sposób. Jeśli c(x) jest wielomianem kodowym stopnia n−1, to reszta z dzielenia przez jest również wektorem kodowym tego kodu.

Page 7: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Dowód (dla ciał charakterystyki 2) Ponieważ w takich ciałach −1=1, to zamiast można podstawić . Aby pokazać prawdziwość

powyższego twierdzenia, mnożymy przez x: Do prawej strony równania dodajemy dwukrotnie , co nie

zmienia wartości wyrażenia Po jednokrotnym przesunięciu cyklicznym wektora kodowego c odpowiadający mu wielomian będzie miał postać

Page 8: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Uwzględniając to wyrażenie, otrzymamy

Ponieważ jest stopnia n−1, więc nie może się dzielić przez i jest resztą z dzielenia xc(x) przez . Możemy zatem napisać

Podobnie po i-tym przesunięciu cyklicznym wektora nad ciałem charakterystyki dwa otrzymamy

Page 9: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Kod z bitem parzystości można traktować jako kod liniowy lub cykliczny. Kod cykliczny z bitem parzystości (n, k)=(n, n-1) generowany przez wielomian generujący g(x)=x+1. Parametry kodu: odległość minimalna kodu d=2, zdolność detekcyjna l=1.

Załóżmy, że informacja jest przekazywana za pomocą liczb zawierających po trzy bity, wówczas (n, k)=(4, 3). Kod będzie zawierał osiem wektorów kodowych pokazanych w następującej tabeli.

Page 10: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Rozważmy wektor kodowy [1010]. Po przesunięcie cyklicznym tego wektora w lewo otrzymamy wektor [0101] należący do zbioru wektorów kodowych. Podczas przesunięcia cyklicznego w lewo pierwszy bit zostaje przesunięty na ostatnią pozycję. Wektor można również przesunąć cyklicznie, posługując się wielomianami. W tym celu zapiszmy rozważany wektor w postaci wielomianu: Po pomnożeniu wielomianu przez x i podstawieniu do

Otrzymamy:

Wielomian b odpowiada wektorowi

przesuniętemu [0101].

Page 11: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Pierścień klas reszt modulo jest pierścieniem wielomianów stopnia nie większego niż n−1, które odpowiadają ciągom binarnym o długości n.

Ideałem jest podzbiór wielomianów pierścienia generowany przez pewien wielomian g(x), który jest dzielnikiem Ideał ten stanowi kod, a wielomian g(x) nazywamy wielomianem generującym kod. Z

i właściwości kongruencji wynika, że wielomian g(x) dzieli bez reszty każdy wielomian odpowiadający wektorowi kodowemu. Stopień wielomianu generującego kod określa liczbę elementów kontrolnych wektora kodowego.

Page 12: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Z powyższych rozważań wynika, że wielomianem generującym kod cykliczny może być każdy wielomian, który jest podzielnikiem , gdzie , a m jest liczbą naturalną.

Page 13: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Posługując się następującą tabelą zapiszmy dwumian

w postaci iloczynu wielomianów nierozkładalnych.

Page 14: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Każdy z wielomianów otrzymanych z tego rozkładu lub ich

iloczyny mogą być za-stosowane do generowania kodu cyklicznego:

Page 15: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Dla każdego kodu cyklicznego (n, k) istnieje cykliczny kod dualny(n, n-k). Jeżeli kod cykliczny jest generowany przez wielomian g(x), to wielomianem generują-cym kod dualny będzie wielomian spełniający zależność

Na przykład dla kodu Hamminga (7,4), generowanego przez

wielomian istnieje kod dualny generowany przez wielomian

Page 16: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Do kodowanie informacji za pomocą kodów cyklicznych można wykorzystać wielomian generujący kod lub macierz generującą kod. W pierwszej kolejności rozważymy kodowanie za pomocą wielomianu generującego. Wektor kodowy cyklicznego kodu systematycznego ma formę:

gdzie współrzędne są elementami informacyjnymi, a współrzędne elementami kontrolnymi.

Page 17: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Gdy mamy wielomian generujący g(x) stopnia n-k, to aby obliczyć wektor kodowy systematycznego kodu cyklicznego (n, k), należy wykonać następujące czynności:

1. Wielomian odpowiadający informacji m(x) pomnożyć przez

2. Otrzymany iloczyn podzielić przez wielomian generujący kod g(x) i wyznaczyć resztę r(x) z tego dzielenia

3. Obliczyć wielomian odpowiadający wektorowi kodowemu, dodając i resztę r(x)

Page 18: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Napiszmy ciąg informacyjny w postaci wielomianu

Pomnożenie tego wielomianu przez jest równoważne z przesunięciem wektora kodowego w lewo o n-k pozycji

Dzielenie uzyskanego wyrażenia przez g(x) można zapisać w

formie algorytmu Euklidesa gdzie q(x) jest częścią całkowitą, a r(x) resztą z dzielenia w

postaci Wzór umożliwiający obliczenia części kontrolnej wektora

kodowego możemy również zapisać w formie kongruencji Wielomian z lewej strony kongruencji odpowiada części

informacyjnej wektora kodowego, a wielomian z prawej strony – części kontrolnej wektora kodowego, która jest równa reszcie z dzielenia wielomianu informacyjnego przez wielomian generujący kod g(x).

Page 19: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Cykliczne kody Hamminga są generowane przez wielomiany pierwotne stopnia m. Kody te mają następujące parametry:

• odległość minimalna d=3,

• zdolność korekcyjna t=1.

Niech wielomianem generującym kod będzie wielomian pierwotny:

Wielomian ten generuje kod (n, k) (7, 4). Obliczmy wektor kodowy dla ciągu informacyjnego m(x)=1101. Obliczenia wykonamy, posługując się ciągami współczynników.

Page 20: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

1. Wielomian informacyjny m(x) mnożymy przez i otrzymujemy

2. Iloczyn dzielimy przez wielomian generujący kod g(x)=1011.

Wynik dzielenia możemy zapisać w postaci algorytmu dzielenia Euklidesa Część całkowita z dzielenia wynosi 1111, a reszta r(x)=1.

3. Resztę otrzymaną z dzielenia r(x) dodajemy do i otrzymujemy ciąg odpowiadający współrzędnym wektora kodowego

Podobnie można obliczyć pozostałe wektory tego kodu. Za ciągi informacyjne należy przyjąć wszystkie kombinacje liczb zawierających cztery bity. Kod (7, 4) będzie miał szesnaście wektorów kodowych.

Page 21: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

W czasie transmisji wektorów kodowych kanałem transmisyjnym powstają błędy transmisyjne. Zadaniem dekodera jest wykrycie lub wykrycie i usunięcie tych błędów.

Możliwości korekcyjne kodu są określone wzorem Każdy kod cykliczny ma swój algorytm dekodowania,

który pozwala skorygować wszystkie błędy korygowalne przez dany kod. W praktyce często używa się algorytmu uproszczonego, wspólnego dla wszystkich kodów cyklicznych. Algorytm ten umożliwia wykrycie i korekcję wszystkich błędów znajdujących się na n k − pozycjach wektora kodowego. Algorytm ten omówimy szczegółowo.

Page 22: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

W procesie dekodowania oblicza się syndrom wektora odebranego. Dla kodów cyklicznych syndrom oblicza się, dzieląc wielomian odpowiadający wektorowi odebranemu przez wielomian generujący kod g(x). Syndrom s(x) jest równy reszcie z tego dzielenia

Syndrom s(x) jest wielomianem stopnia ≤ n-k-1.

Jeśli syndrom ma wartość zerową, oznacza to, że wektor odebrany jest wektorem kodowym i w czasie transmisji nie wystąpiły żadne błędy wykrywalne przez kod. Niezerowa wartość syndromu świadczy o tym, że odebrany wektor nie jest wektorem kodowym i zostały wykryte błędy transmisyjne.

Page 23: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Wektor odebrany jest sumą wektora nadanego i wektora błędów e. Wzór ten zapisujemy w postaci wielomianów

Wielomian odpowiadający wektorowi kodowemu … dzieli się bez reszty przez wielomian generujący kod g(x), można zatem napisać

Podstawiając tę zależność do wzoru poprzedniego, otrzymamy

Porównujemy prawą stronę tego wzoru z prawą stroną wzoru. Po przekształceniach mamy

Page 24: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Syndrom jest resztą z dzielenia wielomianu odpowiadającego wektorowi błędów e(x) przez wielomian generujący kod g(x). Syndrom zawiera informację o położeniu błędów transmisyjnych, co jest wykorzystywane w trakcie korekcji błędów.

Page 25: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Na rysunku zastosowano takie same oznaczenia jak w opisie algorytmu. Parametr i oznacza kolejne cykle dekodowania. Cały proces dekodowania przebiega następująco. Na początku wyznacza się syndrom wektora odebranego s a następnie oblicza się jego wagę Hamminga w(s). Mogą wówczas wystąpić następujące przypadki:

1. Waga syndromu jest mniejsza lub równa zdolności

korekcyjnej kodu, w(s)≤t. Oznacza to, że błędy są położone w części kontrolnej wektora kodowego. Wektor odebrany … może być wtedy skorygowany przez dodaniu syndromu do wektora odebranego. W wyniku tego działania otrzymamy wektor wyjściowy dekodera ...

Na podstawie tego wektora można wyznaczyć

informację odebraną m* Będzie ona równa części informacyjnej wektora ….

Page 26: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

2. Waga syndromu jest większa od zdolności korekcyjnej kodu, w(s)>t. Przypadek ten oznacza, że błędy obejmują część informacyjną wektora kodowego. Należy wówczas przesunąć cyklicznie wektor odebrany tak, aby błędy znalazły się w części kontrolnej, a potem go skorygować. W tym celu wykonujemy następujące czynności. Przesuwamy wektor odebrany cyklicznie o jedną pozycję w dowolnym kierunku (np. w prawo), obliczamy syndrom i jego wagę oraz sprawdzamy, czy został spełniony warunek podany w p. 1, czy też warunek podany w p. 2.

• Jeżeli w(s)≤t, należy skorygować wektor odebrany zgodnie z p. 1,

a następnie przesunąć go cyklicznie w odwrotną stronę (w lewo), aby odtworzyć jego pierwotną postać.

• Jeżeli w(s)>t, trzeba ponownie przesuwać cyklicznie wektor odebrany w tę samą stronę, obliczając po każdym przesunięciu syndrom i jego wagę aż do momentu, kiedy w(s)≤t. Wtedy należy skorygować wektor odebrany i przesunąć go w odwrotną stronę o taką samą liczbę pozycji.

W przypadku gdy po k przesunięciach cyklicznych nie uda się

skorygować wektora odebranego oznacza to, że wystąpiły błędy niekorygowalne co może być zasygnalizowane odpowiednim komunikatem.

Page 27: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Załóżmy, że na wejście kanału został podany wektor kodowy [1101001] cyklicznego kodu Hamminga (7,4). Wektor ten obliczono w poprzednim przykładzie. Na wyjściu kanału odebrano wektor z błędem na pozycji trzeciej [1111001]. Należy wykonać korekcję tego wektora. W pierwszej kolejności obliczamy syndrom wektora odebranego i jego wagę. W tym celu dzielimy wektor odebrany przez wielomian generujący kod. Dzielenie wykonujemy podobnie jak w przykładzie o kodowaniu informacji za pomocą cyklicznego kodu Hamminga (7,4), a wynik dzielenia zapisujemy w postaci algorytmu Euklidesa

Otrzymaliśmy: s(x)=110, w(s)=2. Ponieważ dla cyklicznego

kodu Hamminga t = 1, więc w(s)>t, co oznacza, że w wektorze odebranym występuje błąd lub błędy w części informacyjnej, których nie można skorygować.

Page 28: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Przesuwamy cyklicznie wektor odebrany w prawo. Po wykonaniu dzielenia otrzymamy

skąd: s(x)=11, w(s)=2, w(s)>t.

Przesuwamy ponownie wektor odebrany w prawo. Po wykonaniu dzielenia w tym przypadku otrzymamy

skąd: s(x)=100, w(s)=1.

Page 29: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

Ponieważ w(s) = t, korygujemy przesunięty wektor odebrany … korzystając ze wzoru ……… i otrzymujemy wektor skorygowany … przesunięty o dwie pozycje w prawo

Przesuwamy otrzymany wektor o dwie pozycje w lewo i otrzymujemy wektor skorygowany [1101001]. Wektor ten jest równy wektorowi na wejściu kanału transmisyjnego.

Page 30: Seminaria: Algorytmy kombinatoryczne Wojciech Siwekhome.agh.edu.pl/~meszka/talks/Wojciech_Siwek2.pdf · 2020. 8. 25. · Wojciech Siwek . Kody cykliczne są podklasą kodów liniowych

"Introduction to Coding Theory" Jürgen Bierbrauer, 2016

„KODY KOREKCYJNE I KRYPTOGRAFIA” Władysław Mochnacki, 2020