FAV-ZCU/KIV TI/04. Kódování.md

22 KiB

Kódování

Hlavní důvod pro kódování:

  • přizpůsobení zdrojových řetězců vstupní abecedě kanálu

Další důvody:

  • efektivnější využití sdělovacího kanálu či paměťového média
  • zvýšení odolnosti dat proti rušení
  • šifrování zpráv

Kódování pro kanál bez šumu

  • předpoklad: kanál je stoprocentně spolehlivý
  • zvyšuje efektivitu využití kanálu/média snižováním redundance
  • umožňuje bezeztrátovou kompresi dat

Kódování pro kanál se šumem

  • vkládá do zpráv redundantní informace
  • za určitých pravděpodobnostních předpokladů umožňují
    • detekci chyb (detekční kódy)
    • opravy chyb (korekční = samoopravné kódy)

Kódování - definice

  • A = \{a_{1}, a_{2}, \dots, a_{r}\} - abeceda zdroje (r prvků)
  • B = \{b_{1}, b_{2}, \dots, b_{s}\} - vstupní abeceda kanálu (kódová abeceda, s prvků)
  • r > s
  • kódováním znaků rozumíme prosté (injektivní) zobrazení K : A \to B^+
  • blokovým kódováním délky n rozumíme zobrazení K^* = A^* \to B^*, jež je jednoznačně určeno kódováním znaků K takto
    • K^*(a_{1} a_{2} \dots a_{l}) = K(a_{1}) \cdot K(a_{2}) \cdot \dots \cdot K(a_{l}), \quad K^*(e) = e
  • podmínka jednoznačné dekódovatelnosti
    • kódování retězců K^* je prosté zobrazení
  • každý blokový kód je jednoznačně dekódovatelný

Prefixové kódování

Prefixový kód je kód, ve kterém žádná kódová značka není začátkem jiné kódové značky.

  • každý prefix. kód je jednoznačně dekódovatelný
  • lze je dekódovat znak po znaku v reálném času přenosu bez nutnosti čekat na ukončení

Dekódování zvládne konečný automat s výstupní funkcí Mealyho typu

  • vstupní symboly: vstupní abeceda kanálu
  • výstupní symboly: zdrojová adresa a o neutrální symbol u
  • množina stavů odpovídá prefixům kódových značek s výjimkou kódových značek samotných
  • počáteční stav automatu S odpovídá předponě e
  • přechodová funkce a výstupní funkce
    • pokud je zpracován symbol, který doplní předponu reprezentovanou aktuálním stavem na kódovou značku, přejde automat do stavu S s tím, že vygenerovaný výstupní symbol odpovídá značce
    • pokud doplněním nevzniká kódová značka, automat přejde do stavu odpovídajícímu nové předponě s tím, že na výstupu bude vygenerován neutrální symbol u

Kraftova nerovnost

s^{-d_{1}} + s^{-d_{2}} + \dots + s^{-d_{r}} \leq 1

  • s - počet prvků kódové abecedy
  • d_{i} - délka $i$-té kódové značky
  • r - počet prvků zdrojové abecedy

Mc Millanova věta

  • Každé jednoznačně dekódovatelné kodování splňuje Kraftovu nerovnost.

Důsledek:

  • prefixové kódy lze chápat jako dostatečně obecnou reprezentativní podtřídu jednoznačně dekódovatelných kódů (mají nejjednodušší mechanizmus dekódování)
  • ke každému jednoznačně dekódovatelnému kódu existuje ekvivalentní prefixový kód

Kódy s minimální střední délkou

  • pro efektivní využití kanálu vyžadováno, aby znaky s vyšší pravděpodobností měly menší délku a naopak
  • exaktní ukazatel = střední délka kódové značky
  • pro výpočet nutno znát pravděpodobnostní rozložení znaků zdrojové abecedy

$$ A = { a_{1}, a_{2}, \dots, a_{r} }, \quad P(A) = (p(a_{1}), p(a_{2}), \dots, p(a_{r})), \quad\sum_{i=1}^{r} p(a_{i}) = 1

Střední délka kódové značky kódu K definována jako

\overline{d}(K) = \sum_{i=1}^r p(a_{i}) \cdot d(K(a_{i}))
  • a_{i} - písmeno zdrojové abecedy
  • p(a_{i}) - pravděpodobnost výskytu písmena a_{i} ve zprávách
  • K(a_{i}) - kódová značka příslušející písmenu a_{i}
  • d(K(a_{i})) - délka kódové značky písmena a_{i}

Huffmanův algoritmus konstrukce pref. kódu s min. střední délkou kódové značky

  • vstupy
    • zdrojová abeceda A o r prvcích a její pravděpodobnostní rozložení P(A)
    • kódová abeceda B o s prvcích
  • výstup
    • prefixové kódování K : A \to B^+ takové, že \overline{d}(K) je minimální (tj. neexistuje jiíné kódování K_{2}, pro které by platilo $\overline{d}(K_{2}) < \overline{d}(K)$)
  • algoritmus
    1. prvky zdrojové abecedy seřadíme podle jejich pravděpodobnosti p(a_{i}) do nerostoucí posloupnosti
    2. takto seřazené prvky rozdělíme do skupin
      • začínáme od prvků s největší pravděpodobností
      • skupiny budou mít s - 1 prvků
      • výjimkou může být poslední skupina, která může mít 2 - s prvků
    3. sdružíme prvky v poslední skupině a nahradíme je sdruženou skupinou, kterou zařadíme podle její součtové pravděpodobnosti na správné místo v posloupnosti
    4. sdružíme posledních s prvků v posloupnosti a nahradíme je sdruženou skupinou, kterou zařadíme podle její součtové pravděpodobnosti na správné místo do posloupnosti
    5. bod 4 opakujeme, dokud nezískáme jedinou sdruženou skupinu se součtem 1
    6. zpětným chodem po větvích $s$-árního stromu vytvořeného v bodech 3 až 5 přiřadíme kódové značky listům stromu, tj. znakům kódové abecedy

Bezpečnostní kódy

Modelové důsledky šumu

  • záměna vyslaného znaku za jiný znak
    • příčiny: vnější elmg. rušení, tepelný šum, kosmické záření, ...
  • porušení synchronizace (tj. ztráta znaku/vytvoření falešného znaku)
    • příčiny: chyba přenosového kanálu
    • bráno jako mimořádná událost, řešeno jinak než kódováním

Detekce chyb v kódech

  • vložení redundance, například parity
  • všechny n-tice je možné rozložit na dvě třídy
    • množina kódových značek
      • přijato v pořádku nebo došlo k takové chybě, že se vytvořila jiná kódová značka (není ji možné detekovat)
    • množina nekódových značek
      • při přenosu došlo k chybě, kterou příjemce detekuje
  • společná vlastnost kódových značek může být např. sudý počet 1 ve značce (chybu v jedné pozici můžeme detekovat)
    • kód tedy detekuje jednoduché chyby
  • $t$-násobnou chybou rozumíme libovolnou chybu, kde je počet chybně přenesených prvků menší nebo roven t
    • kód $t$-násobnou chybu detekuje právě tehdy, když je při přijmutí kódové značky s $t$-násobnou chybou vždy přijata nekódová značka

Hammingova vzdálenost

Hammingovou vzdáleností slov u a v stejné délky je počet pozic, ve kterých se slova liší.

Minimální Hammingovou vzdáleností kódu K je nejmenší Hammingova vzdálenost mezi dvěma kódovými značkami kódu K.

  • rozhoduje o tom, jaké chyby je kód schopen detekovat
  • značení d_{0}

Blokový kód s minimální Hammingovou vzdáleností d_{0} detekuje všechny chyby s násobností t<d_{0}.

  • d_{0} = 2 \implies detekuje jednoduché chyby

Opravování chyb

  • za určitých podmínek je možné chyby i opravovat
    • symetrický binární sdělovací kanál s bitovou chybovostí p - pravděpodobnost, že při přenostu jednoho konkrétního prvku došlo k chybě
    • statisticky nezávislé chyby
  • kód K opravuje $t$-násobnou chybu právě tehdy, jestliže při vysílání libovolné kódové značky v \in K a při libovolné $t$-násobné chybě má přijaté slovo w \in T^n Hammingovu vzdálenost od vyslané kódové značky v menší než od libovolné jiné kódové značky
    • platí tedy: \forall \, x \in K : x \neq v \implies d(v, w) < d(x, w)

Blokový kód K s minimální Hammingovou vzdáleností d_{0} opravuje všechny chyby s násobností t < d_{0} / 2. Jinak řečeno, pro opravu $t$-násobné chyby musí mít minimální Hammingovou vzdálenost d_{0} \geq 2 \cdot t + 1.

Opakovací kód liché délky n opravuje všechny chyby s násobností t \leq \frac{n-1}{2}, opakovací kód sudé délky n opravuje všechny chyby s násobností t \leq \frac{n-2}{2}.

Binární lineární kód

Binární kód K je lineárním kódem, jestliže je podprostorem lineárního prostoru Z_{2}^n.

  • dimenze k lineárního kódu = počet informačních prvků
  • název: lineární (n, k) kód

Blokový kód s K \subseteq T^n délky nk informačních znaků (a r = n-k kontrolních znaků) právě tehdy, jestliže existuje prosté zobrazení \varrho množiny všech slov délky k na množinu kódových značek K, tedy \varrho : T^k \to K.

  • \varrho : T^k \to K - kódování informačních znaků
  • u \in T^k - informační část
  • v \in K, v = \varrho(u) - kódová značka
  • (n, k) kód - kód s k informačními a n-k kontrolními znaky

Termín dekódování má dva významy:

  • \delta : T^n \to K - umožňuje opravy $t$-násobných chyb
  • \varrho^{-1} : K \to T^k - z kódové značky extrahuje informační část

Dekódování

  • zpracování přijaté n-tice u' = \varrho^{-1}(\delta(w)), kde
    • w \in T^n je přijatá n-tice (ovlivněná šumem)
    • \delta(w) \in K je přijatá n-tice po opravě chyby (tedy kódová značka)
    • u' \in T^k je informační část extrahovaná z přijaté n-tice po opravě

Značení

  • u typu k/1 (sloupec o k prvcích) - informační část
  • v typu n/1 (sloupec o n prvcích) - kódová značka
  • e typu n/1 (sloupec o n prvcích) - chybový vektor
  • w typu n/1 (sloupec o n prvcích) - přijatá n-tice
  • s typi (n-k)/1 (sloupec o n-k prvcích) - syndrom
    • výsledek kontroly přijaté n-tice
  • vektory se zapisují transponovaně do řádků

Kontrolní matice

  • značena H, typu (n-k)/n
  • vlastnosti
    • řádky jsou lineárně nezávislé
    • slovo w je kódovou značkou, pokud s = H \cdot w = 0

Generující matice

  • značena G, typu k/n
  • každým řádkem je jeden prvek báze lineárního kódu
  • kódování informační části: v = G^T \cdot u
  • vlastnosti
    • řádky jsou lineárně nezávislé
    • každé kódové slovo je lineární kombinací řádků a je jednoznačně určeno informačními znaky
  • ke generující matici G vždy existuje kontrolní matice H s vlastností H \cdot G^T = 0, není ale určena jednoznačně, může jich existovat více

Minimální Hammingova vzdálenost v lineárním kódu $K$

  • min. Hammingova vzdálenost v kódu K: d_{0}(K) = \min_{u,v \in K, u\neq v} d(u,v)
  • v případě, že K je lineární kód
    • u a v jsou kódové značky, které určují d_{0}(K)
    • kódovými značkami je i opačná značka ($-u$) a součtová značka v + (-u) = v-u
    • platí d_{0} = d(u, v) = d(u-u, v-u) = d(0, v-u) = \Vert v-u\Vert
    • \Vert v-u\Vert představuje počet nenulových prvků ve značce v-u, tj. Hammingovu váhu značky v-u
  • minimální Hammingova vzdálenost v lineárním kódu je rovna minimální Hammingově váze nenulové značky

Opravování chyb podle syntromu

  • dekóder provádí operaci s = H \cdot w
    • pokud je s = 0, w je kódovou značkou
    • v opačném případě je detekována chyba
  • pomocí hodnoty s je možné zjistit místo chyby a opravit ji
  • důsledek linearity kódu
    • s = H\cdot w = H\cdot(v+e) = H\cdot v + H\cdot e = 0 + H\cdot e = H\cdot e
    • syndrom závisí pouze na chybovém vektoru (ne na přijaté značce)
    • lineární kód není schopen odhalit chyby s chybovým vektorem ve tvaru kódové značky
  • podle syndromu určíme chybový vektor
    • chybovým vektorům přiřadíme syndromy
      • zobrazení \omega : T^n \to T^{n-k}, \omega(e) = H \cdot e
    • ze syndromu nelze chybový vektor určit jednoznačně
    • určíme tedy nepravděpodobnější chybový vektor
  • z možných chybových vektorů vybereme \hat{v} s nejmenší Hammingovou vahou
    • reprezentanta dané chybové třídy (určené syndromem)
  • chybu poté opravíme takto:
    • s = H\cdot w = s_{j}, \quad \hat{v} = w - \omega^{-1}(s_{j}) = w - \hat{e_{j}}
  • \hat{v} je opravená kódová značka (nejpravděpodobněji odesílaná značka)

Počet zabezpečovacích prvků vs. násobnost opravovaných chyb

  • binární lineární (n, k) kód
  • pro opravu t-násobných chyb musí platit
    • 2^{n-k} \geq 1 + n + {n \choose 2} + \dots + {n \choose t}
    • 1 - nulový syndrom
    • n - syndromy pro chybové vektory s vahou 1
    • n \choose 2 - syndromy pro chybové vektory s vahou 2
    • n \choose t - syndromy pro chybové vektory s vahou t
  • počet kontrolních prvků je určen počtem informačních prvků a násobností opravovaných chyb

Hammingovy kódy

  • opravují jednoduché chyby a přitom mají minimální redundanci pro opravu jednoduchých chyb
  • v případě jednoduché chyby v $i$-tém znaku syndrom odpovídá $i$-tému sloupci kontrolní matice

Kontrolní matice

  • nesmí obsahovat nulový sloupec
  • nesmí obsahovat stejné sloupce
  • obsahuje ve sloupcích všechna nenulová slova dané délky a žádné z nich se neopakuje

Při počtu kontrolních znaků r = n-k pro binární Hammingův kód platí

  • počet různých syndromů: 2^r
  • počet sloupců matice H: 2^r - 1 (bez nulového slova)
  • počet znaků v kódové značce: n = 2^r - 1
  • počet informačních znaků ve značce: k = n-r
  • platí rovnost 2^r = k + r + 1
  • s roustoucím r roste efektivita kódu

Konstrukce matic

  • pro zadaný počet kontrolních prvků r spočítáme k z rovnosti 2^r = k + r + 1
  • systematická generující matice má k řádků, k+r sloupců a tvar G = [I_{k}|B]
    • I_{k} - jednotková matice řádu k
    • řádky submatice B budou naplněny $r$-bitovými řetězcemi, kde jsou alespoň dvě jedničky
  • systematická matice Hr řádků a k+r sloupců a tvar H = [-B^T|I_{n-k}]
  • neexistuje nenulová značka (řádek) s menším počtem jedniček než tři \implies d_{0} = 3

Zkracování H. kódů

  • je možné kódovat jen informační části o délce k získané z rovnice 2^r = k + r + 1 ($k = 4, 11, 26, 57, \dots$)
  • pro jinou hodnotu k provedeme zkrácení kódu
    • najdeme počet zabezpečovacích znaků r vyhovující nerovnici 2^r \geq k + r + 1
    • zkonstruujeme matice G a H pro r zabezpečovacích prvků
    • z matic vypustíme řádky a sloupce odpovídající nepotřebným informačním prvkům (z matice G řádky, z matice H sloupce)

Rozšiřování kódů

  • lineární kód s lichou minimální Hammingovou vzdáleností d_{0} lze rozšířit přidáním dalšího zabezpečovacího prvku - celkové kontroly parity (doplnění 0 nebo 1 na sudý počet jedniček ve značce)
  • minimální Hammingova vzdálenost kódu po rozšíření bude d_{0}+1
    • bude možné detekovat další násobnost chyb
    • Pozor: u sudého se d_{0} nezvětší
  • rozšířený Hammingův kód umí
    • jednoduché chyby opravovat a současně dvojité chyby detekovat nebo
    • pouze detekovat trojité chyby

Ekvivalentní kódy

Dva blokové kódy K a K' délky n jsou ekvivalentní, jestliže zároveň

  • existuje vzájemně jednoznačné přiřazení mezi kódovými značkami obou kódů
  • odpovídající si značky se navzájem liší jen záměnou pořadí prvků

Ke každému lineárnímu kódu existuje ekvivalentní systematický kód.

Postup

  • Gk lineárně nezávislých řádků, n > k, matice má tedy i k lineárně nezávislých sloupců
  • pokud je lineárně nezávislých prvních k sloupců G, vytvoříme matici G' ekvivalentními řádkovými úpravami matice G
    • tím získáme jinou bázi prostoru kódových značek generovaných maticí G, tedy jinou bázi téhož kódu
  • pokud prvních k sloupců matice G není lineárně nezávislých, provedeme takovou permutaci sloupců matice G, abychom dostali nezávislé sloupce do prvních k pozic; pak vytvoříme systematickou matici G' ekvivalentními řádkovými úpravami (sloupcově permutované) matice G
    • v tomto případě budou množiny značek generované maticemi G a G' různé, ale bude mezi nimi existovat vzájemně jednoznačné zobrazení dané provedenou záměnou sloupců matice
    • kódy tedy budou ekvivalentní

Perfektní kódy

Lineární kód je perfektní pro opravu $t$-násobných chyb, jestliže všechna chybová slova váhy \leq t jsou reprezentanty chybových tříd a neexistují žádné jiné chybové třídy.

  • každému syndromu přísluší jedinečný chybový vektor váhy \leq t
  • každému chybovému vektoru váhy \leq t přísluší jedinečný syndrom

Perfektní kódy mají ze všech kódů pro opravu t-násobných chyb minimální redundanci.

Existuje jich jen málo

  • Hammingovy kódy pro opravu jednoduchých chyb
  • Golayovy kódy pro opravu trojnásobných chyb
  • opakovací kódy s délkou značky n = 2 \cdot t + 1 pro opravu t-násobných chyb

Oprava chyb u opakovacích kódů

  • předpokládejme systematický opakovací kód pro přenos čtyřprvkových informačních částí ($k = 4$) pro opravu dvojitých chyb ($t = 2$)
  • potřebná minimální vzdálenost: d_{0} = 2 \cdot t + 1 = 5
  • potřebný počet opakování = 5 \implies délka značky n = 5\cdot k = 20
  • jeden informační prvek je roven (v případě bezchybného přenosu) všem jeho 4 kopiím
    • v případě chyby vybereme většinovou hodnotu

Golayovy kódy

  • G_{23} - pro opravu trojnásobných chyb
    • generující matice s rozměry 12/23
    • čtvercová submatice B řádu 11 vznikla cyklickými posuvy prvního řádku doprava
      • jedničky v prvním řádku na pozicích kvadrátů prvků tělese Z_{11} (0, 1, 3, 4, 5, 9)
    • každý chybový vektor váhy t \leq 3 generuje jiný syndrom
      • kód tedy opravuje trojnásobné chyby
  • G_{24} - vznikne rozšířením kódu G_{23} o celkovou kontrolu parity
    • generující matice má rozměry 12/24
    • v posledním řádku podmatice B bude 11 jedniček
    • jako kontrolní matici lze použít H_{24} = G_{24}

Reed-Mullerovy kódy K_{r,m}

  • třída nesystematických kódů, které umožňují opravy předem zadaného počtu chyb
  • současně jsou relativně snadné na dekódování
  • vytvoření generující matice
    • pro libovolná čísla m \in N a r \in N_{0}, kdy 0 \leq r \leq m, lze zkonstruovat matici o n = 2^m sloupcích jako blokovou matici
    • do matice G se postupně dávají řádky z matic G_{0}, G_{1}, \dots, G_{r}
      • G_{0} obsahuje samé jedničky
      • G_{1} obsahuje polovinu nul a polovinu jedniček, poté další řádky, kde se poloviny opět rozdělují na poloviny
      • G_{2} obsahuje součin 1. a 2., 2. a 3., 3. a 1. řádku matice G_{1}
      • G_{3} obsahuje součin 1., 2. a 3. řádku matice G_{1}
  • obecně platí
    • K_{0,m} - opakovací kód
    • K_{m-2,m} - rozšířený Hammingův kód
    • K_{m-1,m} - paritní kód
    • K_{m,m} je Z_{2}^n, kde n = 2^m

Cyklické kódy

Jsou zvláštním případem lineárních kódů.

  • platí vše, co pro lineární kódy + něco navíc

S každou značkou v \in K je prvkem kódu i cyklický posuv značky.

Značky budou reprezentovány polynomy místo vektorů.

  • v = [v_{0}v_{1}\dots v_{i}\dots v_{n-1}]^T
  • v(x) = v_{0} + v_{1}x + \dots + v_{i}x^i + \dots + v_{n-1}x^{n-1}

Násobení polynomů nad x^n-1:

  • řeší se tím problém přetečení při posunu doprava (násobení)
  • zavedeno speciální násobení u(x) * v(x)
    • vlastnost x^n = x^0 = 1

Generující mnohočlen g(x)

  • množina značkových polynomů tvořena všemi násobky generujícího
  • polymony g(x), x \cdot g(x), \dots, x^{k-1} \cdot g(x) tvoří bázi kódu K
  • generující mnohočlen je nerozložitelný a primitivní (je dělitelem polynomu $x^n - 1$)

Nesystematický cyklický kód

  • matice je tvořena polynomem a jeho posunem doprava na každém dalším řádku
  • z tvaru matice G je zřejmé, že se jedná o nesystematický polynom
  • řádky v matici: b_{0}, b_{1}, \dots, b_{k-1}

Kódování informační části

  • v = \varrho(u) = u_{0} \cdot b_{0} + u_{1} \cdot b_{1} + \dots + u_{k-1} \cdot b_{k-1}
  • v(x) = u_{0} \cdot g(x) + u_{0} \cdot x g(x) + \dots + u_{k-1} \cdot x^{k-1} g(x) = u(x) \cdot g(x)
  • u cyklických kódů přebírá úlohu generující matice generující mnohočlen g(x)
  • informační část o k prvcích převedeme na informační mnohočlen u(x)
  • u = [u_{0}u_{1}\dots u_{k-1}] \approx u(x) = u_{0} + u_{1} \cdot x + \dots + u_{k-1} \cdot x^{k-1}
    • zakódujeme: v(x) = u(x) \cdot g(x)

Kontrola přijaté značky

  • u cyklických kódů se používá místo kontrolní matice kontrolní mnohočlen
  • je jednoznačně určen generujícím mnohočlenem g(x)
    • h(x) = (x^n - 1) : g(x)
    • vždy beze zbytku
  • každý značkový polynom v(x) \in K vyhovuje podmínce h(x) * v(x) = 0
  • kontrolní matici sestavíme z koeficientů kontrolního mnohočlenu h(x)
    • vložíme do prvního řádku od konce (postupně $h_{0}, h_{1}, \dots, h_{k}$)
    • na dalších řádkách posuneme o jednu pozici doleva

Systematické cyklické kódy

  • tvoří se z nesystematických kódů
  • prvky vektorů indexujeme zprava
    • u = [u_{k-1} u_{k-2} \dots u_{0}]

Kódování informační části

  • tento mnohočlen se poté vynásobí členem x^{n-k}
    • projeví se to doplněním nul zprava k informační části
  • vynásobený polynom se poté vydělí mnohočlenem g(x)
    • pro podíl q(x) a zbytek r(x) poté platí
    • u(x) \cdot n^{n-k} = q(x) * g(x) + r(x)
    • levá strana rovnosti po přičtení -r(x) je násobkem generujícího mnohočlenu g(x)
      • je mnohočlenem reprezentujícím kódovou značku
  • efektem je složení značky ze dvou částí
    • informační a zabezpečovací
    • kód takto vytvořený je proto systematický

Kontrola přijaté značky

  • kontroluje se dělením generujícím mnohočlenem
    • zbytek vyjde nulový, pokud nedošlo k chybě

Důsledek cykličnosti

  • umožňují detekovat shluky chyb
  • shlukovou chybou délky b rozumíme takové chybové slovo e, jehož všechny chybové prvky ležé v úseku ohraničeném indexy i a i+b-1, přičemž krajní prvky shluku jsou nenulové
  • cyklické kódy detekují všechny shluky chyb délky $b \leq n-k$