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
taktoK^*(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í
- kódování retězců
- 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é abecedyd_{i}
- délka $i$-té kódové značkyr
- 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é abecedyp(a_{i})
- pravděpodobnost výskytu písmenaa_{i}
ve zpráváchK(a_{i})
- kódová značka příslušející písmenua_{i}
d(K(a_{i}))
- délka kódové značky písmenaa_{i}
Huffmanův algoritmus konstrukce pref. kódu s min. střední délkou kódové značky
- vstupy
- zdrojová abeceda
A
or
prvcích a její pravděpodobnostní rozloženíP(A)
- kódová abeceda
B
os
prvcích
- zdrojová abeceda
- 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)
)
- prefixové kódování
- algoritmus
- prvky zdrojové abecedy seřadíme podle jejich pravděpodobnosti
p(a_{i})
do nerostoucí posloupnosti - 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ů
- 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
- 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 - bod 4 opakujeme, dokud nezískáme jedinou sdruženou skupinu se součtem 1
- 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
- prvky zdrojové abecedy seřadíme podle jejich pravděpodobnosti
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
- množina kódových značek
- 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čkyv \in K
a při libovolné $t$-násobné chybě má přijaté slovow \in T^n
Hammingovu vzdálenost od vyslané kódové značkyv
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)
- platí tedy:
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 n
má k
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í částv \in K, v = \varrho(u)
- kódová značka(n, k)
kód - kód sk
informačními an-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))
, kdew \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
typuk/1
(sloupec ok
prvcích) - informační částv
typun/1
(sloupec on
prvcích) - kódová značkae
typun/1
(sloupec on
prvcích) - chybový vektorw
typun/1
(sloupec on
prvcích) - přijatá n-tices
typi(n-k)/1
(sloupec on-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, pokuds = H \cdot w = 0
Generující matice
- značena
G
, typuk/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í maticeH
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ódu
av
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čkav + (-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čcev-u
, tj. Hammingovu váhu značkyv-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
- pokud je
- 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
- zobrazení
- ze syndromu nelze chybový vektor určit jednoznačně
- určíme tedy nepravděpodobnější chybový vektor
- chybovým vektorům přiřadíme syndromy
- 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ý syndromn
- syndromy pro chybové vektory s vahou 1n \choose 2
- syndromy pro chybové vektory s vahou 2n \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ámek
z rovnosti2^r = k + r + 1
- systematická generující matice má
k
řádků,k+r
sloupců a tvarG = [I_{k}|B]
I_{k}
- jednotková matice řáduk
- řádky submatice
B
budou naplněny $r$-bitovými řetězcemi, kde jsou alespoň dvě jedničky
- systematická matice
H
már
řádků ak+r
sloupců a tvarH = [-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 rovnice2^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í nerovnici2^r \geq k + r + 1
- zkonstruujeme matice
G
aH
pror
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 maticeH
sloupce)
- najdeme počet zabezpečovacích znaků
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
G
mák
lineárně nezávislých řádků,n > k
, matice má tedy ik
lineárně nezávislých sloupců- pokud je lineárně nezávislých prvních
k
sloupcůG
, vytvoříme maticiG'
ekvivalentními řádkovými úpravami maticeG
- 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
- tím získáme jinou bázi prostoru kódových značek generovaných maticí
- pokud prvních k sloupců matice
G
není lineárně nezávislých, provedeme takovou permutaci sloupců maticeG
, abychom dostali nezávislé sloupce do prvních k pozic; pak vytvoříme systematickou maticiG'
ekvivalentními řádkovými úpravami (sloupcově permutované) maticeG
- v tomto případě budou množiny značek generované maticemi
G
aG'
různé, ale bude mezi nimi existovat vzájemně jednoznačné zobrazení dané provedenou záměnou sloupců matice - kódy tedy budou ekvivalentní
- v tomto případě budou množiny značek generované maticemi
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čkyn = 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)
- jedničky v prvním řádku na pozicích kvadrátů prvků tělese
- 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óduG_{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
ar \in N_{0}
, kdy0 \leq r \leq m
, lze zkonstruovat matici on = 2^m
sloupcích jako blokovou matici - do matice
G
se postupně dávají řádky z maticG_{0}, G_{1}, \dots, G_{r}
G_{0}
obsahuje samé jedničkyG_{1}
obsahuje polovinu nul a polovinu jedniček, poté další řádky, kde se poloviny opět rozdělují na polovinyG_{2}
obsahuje součin 1. a 2., 2. a 3., 3. a 1. řádku maticeG_{1}
G_{3}
obsahuje součin 1., 2. a 3. řádku maticeG_{1}
- pro libovolná čísla
- obecně platí
K_{0,m}
- opakovací kódK_{m-2,m}
- rozšířený Hammingův kódK_{m-1,m}
- paritní kódK_{m,m}
jeZ_{2}^n
, kden = 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
- vlastnost
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óduK
- 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členu(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)
- zakódujeme:
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ínceh(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
- vložíme do prvního řádku od konce (postupně
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 zbytekr(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členug(x)
- je mnohočlenem reprezentujícím kódovou značku
- pro podíl
- 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é slovoe
, jehož všechny chybové prvky ležé v úseku ohraničeném indexyi
ai+b-1
, přičemž krajní prvky shluku jsou nenulové - cyklické kódy detekují všechny shluky chyb délky $b \leq n-k$