24.01.2014 Views

Kodowanie i kompresja 1 Kody liniowe - uogólnienie i powtórka

Kodowanie i kompresja 1 Kody liniowe - uogólnienie i powtórka

Kodowanie i kompresja 1 Kody liniowe - uogólnienie i powtórka

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Kodowanie</strong> i <strong>kompresja</strong><br />

Streszczenie<br />

Studia dzienne<br />

Wykład 3, 2.03.2005<br />

1 <strong>Kody</strong> <strong>liniowe</strong> - <strong>uogólnienie</strong> i <strong>powtórka</strong><br />

Fakt 1 Słowa kodowe binarnego kodu <strong>liniowe</strong>go o długości n tworza˛<br />

podprzestrzeń<br />

liniowa˛<br />

przestrzeni Z2 n , gdzie Z 2 oznacza ciało nad zbiorem {0, 1} z operacjami dodawania<br />

i mnoźenia modulo 2.<br />

Liniowym (n, k) kodem nazywamy k-wymiarową podprzestrzeń Z n 2 .<br />

Fakt 2 Kod liniowy (n, k) ma k bitów danych, tzn. słowo kodowe o długości n koduje<br />

k bitów danych oryginalnych.<br />

Definicja 1 Niech K będzie kodem liniowym o długości n, którego bazę tworza˛<br />

wektory<br />

e 1 , . . . , e k . Macierza˛<br />

generatorów G kodu K nazywamy macierz wymiaru k × n której<br />

i-ty wiersz jest równy e i dla i ∈ [1, k].<br />

Przyjmijmy następującą metodę kodowania dla kodu <strong>liniowe</strong>go (n, k) o bazie e 1 , . . . , e k :<br />

k bitom danych u 1 , . . . , u k przyporządkowujemy wektor ∑ k<br />

i=1 u i e i . Wówczas słowo kodowe<br />

dla u = u 1 . . . u k jest równe v = uG, gdzie G to macierz generatorów dla K i<br />

bazy {e 1 , . . . , e k }.<br />

Definicja 2 Kod liniowy nazywamy systematycznym, jeśli ma on macierz generatorów<br />

postaci G = [IB], gdzie I jest macierza˛<br />

identycznościowa.<br />

˛<br />

Fakt 3 Stosujac ˛ macierz postaci G = [IB] do kodowania w liniowym kodzie systematycznym<br />

(n, k), bitom danych u 1 . . . u k odpowiada słowo kodowe zaczynajace ˛ się od<br />

u 1 . . . u k .<br />

Fakt 4 Kod liniowy z macierza˛<br />

generatorów G = [IB] ma macierz parzystości równa˛<br />

H = [−B T I], gdzie B T oznacza transpozycję macierzy B a I ′ macierz identycznościowa˛<br />

rozmiaru (n − k) × (n − k).<br />

Fakt 5 Kaźdy liniowy kod (n, k) ma macierz parzystości rzędu n − k i rozmiaru (n −<br />

k) × n.<br />

Definicja 3 (Kod rozszerzony) Kodem rozszerzonym <strong>liniowe</strong>go (n, k) kodu K nazywamy<br />

liniowy (n + 1, k) kod K ′ otrzymany z K poprzez dodanie do kaźdego słowa<br />

kodowego x = x 1 . . . x n symbolu x n+1 równego ∑ n<br />

i=1 x i . Inaczej mówiac, ˛ do kaźdego<br />

słowa kodowego dodajemy bit parzystości.<br />

1


2 Jednoczesne wykrywanie i poprawianie błędów<br />

Definicja 4 Mówimy, źe kod blokowy K jednocześnie poprawia t błędów i wykrywa s<br />

błędów jeśli dla kaźdego słowa kodowego v i kaźdego w spełniajacego ˛ warunek d(v, w) ≤<br />

s, odległość Hamminga słowa w od kaźdego słowa kodowego w ′ ≠ w wynosi więcej niź<br />

t.<br />

Powyźsza własność umoźliwia jednoczesne poprawianie t błędów i wykrywanie s błędów<br />

w następującym sensie:<br />

• jeśli liczba błędów jest mniejsza niź t wówczas wykonywane jest dekodowanie<br />

odtwarzające oryginalne słowo kodowe;<br />

• jeśli liczba błędów znajduje się w przedziale [t + 1, s], wówczas wykryty zostaje<br />

fakt wystąpienia błędów, ale bez moźliwości ich poprawienia.<br />

Stosujemy w tym celu następujący algorytm. Niech w będzie słowem odebranym po<br />

przejściu przez kanał komunikacyjny, niech v będzie najbliźszym w słowem kodowym<br />

w sensie miary Hamminga:<br />

• jeśli d(v, w) ≤ t wówczas przyjmujemy, źe przesłane słowo kodowe to v;<br />

• jeśli d(v, w) > t, wówczas sygnalizowany jest fakt wystąpienia więcej niź t błędów.<br />

Fakt 6 Kod K jednocześnie poprawia t błędów i wykrywa s błędów wtedy i tylko wtedy,<br />

gdy minimalna odległość kodu d(K) spełnia warunek<br />

d(K) ≥ t + s + 1.<br />

Fakt 7 Rozszerzone kody Hamminga jednocześnie poprawiaja˛<br />

jeden bład ˛ i wykrywaja˛<br />

dwa błędy.<br />

3 <strong>Kody</strong> Reeda-Mullera<br />

3.1 Funkcje boolowskie<br />

Definicja 5 Funkcja boolowska m zmiennych f : Z2<br />

m → Z 2 przyporzadkowuje ˛ kaźdemu<br />

ciagowi ˛ zer i jedynek o długości m wartość 0 lub 1.<br />

Niech p j oznacza wektor będący binarną reprezentacją liczby j.<br />

Funkcję boolowską m zmiennych f moźna reprezentować przy pomocy tzw. tabeli wartości.<br />

W kolumnach tej tabeli umieszczamy w kolejności rosnącej wszystkie ciągi m<br />

2


zer i jedynek, tzn. p 0 , p 1 , . . . , p 2 m −1, a pod nimi umieszamy wartości funkcji f dla tych<br />

ciągów. A zatem kaźdą boolowską funkcję m zmiennych moźna opisać przy pomocy<br />

ciągu binarnego o długości 2 m , definiującego wartości funkcji dla kolejnych 2 m argumentów.<br />

W dalszej części notatki funkcję boolowskie będziemy często utoźsamiać z<br />

taką ich reprezentacją.<br />

3.2 Wielomiany boolowskie<br />

Dla funkcji boolowskiej m zmiennych f, niech f i oznacza wartość f dla argumentu<br />

będącego binarną reprezentacją liczy i, p i . To znaczy, źe f i to i-ty bit w reprezentacji f<br />

przy pomocy binarnego wektora o długości 2 m .<br />

Na funkcjach boolowskich f i g wykonujemy następujące operacje:<br />

• dodawanie f + g: odpowiada dodawaniu modulo 2 odpowiadających im wektorów;<br />

• mnoźenie logiczne:<br />

fg = (f 2 m −1 . . . f 1 f 0 )(g 2 m −1 . . . g 1 g 0 ) = (f 2 m −1g 2 m −1) . . . (f 1 g 1 )(f 0 g 0 ),<br />

gdzie wynik mnoźenia dwóch elementów a, b ∈ {0, 1} jest równy 1 wtedy i tylko<br />

wtedy gdy a = b = 1.<br />

Jednomianem boolowskim n zmiennych nazywamy funkcję boolowską n zmiennych<br />

x 1 , . . . , x n postaci x i1 . . . x is , gdzie s, i 1 , . . . , i s ≤ n oraz funkcję identycznościową<br />

równą 1, oznaczaną 1.<br />

Definicja 6 Wielomianem boolowskim m zmiennych nazywamy funkcję boolowska˛<br />

m<br />

zmiennych wyraźona˛<br />

jako suma wybranych jednomianów boolowskich m zmiennych.<br />

Uwaga. W wielomianach boolowskich nie jest konieczne potęgowanie, poniewaź x·x =<br />

x dla kaźdego wektora x ∈ {0, 1} n .<br />

Obserwacja Funkcja boolowska m zmiennych f jest równa<br />

f(x 0 , . . . , x m−1 ) = f(x 0 , . . . , x m−2 , 0)+x m−1 (f(x 0 , . . . , x m−2 , 0) + f(x 0 , . . . , x m−2 , 1))<br />

Lemat 1 Kaźda funkcja boolowska n zmiennych jest wielomianem boolowskim n zmiennych.<br />

Wniosek 1 Zbiór jednomianów m zmiennych (a dokładniej ich reprezentacji w postaci<br />

wektorów binarnych o długości 2 m ) tworzy bazę przestrzeni <strong>liniowe</strong>j Z 2m<br />

2 .<br />

3


Definicja 7 Kodem Reeda-Mullera o długości n = 2 m i stopniu r (dla r ≤ m) nazywamy<br />

kod binarny R(r, m) złoźony ze wszystkich słów binarnych o długości n reprezentujacych<br />

˛ wielomiany n zmiennych stopnia co najwyźej r.<br />

Dwa słowa binarne w = w 1 . . . w n i v = v 1 . . . v n są ortogonalne gdy ich iloczyn skalarny<br />

jest równy 0, tzn.<br />

n∑<br />

w · v = v i w i = 0.<br />

i=1<br />

Kodem dualnym do kodu <strong>liniowe</strong>go K, oznaczanym przez K ⊥ nazywamy kod złoźony<br />

ze wszystkich słow ortogonalnych do wszystkich słów kodowych kodu K.<br />

Twierdzenie 1 Kod Reeda-Mullera R(r, m) zawiera<br />

( )<br />

r∑ m<br />

k =<br />

i=0<br />

i<br />

bitów danych.<br />

Kodem dualnym do R(r, m) jest kod R(m − r − 1, m).<br />

4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!