====== 1. Teorie kódování ======
Základy teorie kódování, Shannonova věta. Entropie. Generování skutečně náhodných a pseudonáhodných sekvencí.
====== Vypracování ======
===== Definice =====
Entropie = nejistota.
Nechť je náhodná veličina, a , přičemž .
Nejistota je funkce pravděpodobnosti dané veličiny.
Nejistota náhodné proměnné , která nabývá hodnoty s pravděpodobností je funkcí pouze pravděpodobností . Tato funkce se značí .
Pro funkci nejistoty platí:
* je maximální, když .
* Pro každou permutaci na platí .
* a rovnost nastává právě tehdy, když pro nějaké .
* .
* .
* je spojitá funkce svých parametrů. Malé změny na vstupu dají malé změny na výstupu.
* Pro .
* Nechť a , , jsou neznámé. Jsou-li a kladná čísla, , pak platí: .
Buď funkce definovaná pro každé a pro všechny hodnoty tak, že a . Pokud splňuje výše uvedené axiomy, pak platí:
\\
kde je libovolná kladná konstanta (například ) a sumuje se přes všechna taková, že .
Informace je funkce . Funkce , definovaná pro všechny , splňuje podmínky:
*
* , kde a jsou pravděpodobnosti navzájem nezávislých jevů
* spojitost vzhledem k
když je tvaru , kde je kladná konstanta (například ).
===== Kódování =====
Nejjednodušším modelem je zdroj bez paměti a kódování bez šumu. Zdroj je generátor posloupnosti symbolů z dané konečné abecedy. Pro zdroj bez paměti platí, značí-li -tý vygenerovaný symbol, pak pro každý symbol je pravděpodobnost nezávislá na všech v minulosti nebo v budoucnosti vygenerovaných symbolech. je posloupnost identicky distribuovaných nezávislých náhodných veličin.
Entropie zdroje bez paměti je , kde sčítáme přes množinu takových, že .
Kódování nebo kód je zobrazení z do . Zpráva je konečný řetěz zdrojových slov. Je li zpráva a kódování, pak rozšíření k je definováno: .
Kódování je možné označovat taky jakou soubor kódových slov .
==== Prefixové a jednoznačně dekódovatelné kódy ====
Kódování se nazývá jednoznačně dekódovatelné, jestliže každý konečný řetězec z je obraz nejvýše jedné zprávy.
Kódování se nazývá bezprostředně dekódovatelné nebo prefixové, jestliže neexistují různé a takové, že je prefix .
Pokud má jednoznačné kódování minimální průměrnou délku slov, nazývá se kompaktní. Kompaktní kód je možné vytvořit například Huffmanovým kódováním.
=== Věta o kódování bez šumu ===
Má-li zdroj bez paměti entropii , pak každé jednoznačně dekódovatelné kódování pro tento zdroj v abecedě o symbolech musí mít délku alespoň . Navíc existuje takové jednoznačně dekódovatelné kódování, které má průměrnou délku slov menší nebo rovnu .
===== Kódování se šumem =====
Uvážíme diskrétní kanál bez paměti. Kanál má vstupní a výstupní abecedu.
Pro vypouštěcí kanál platí, že , kde představuje chybu přenosu, ke které dojde s pravděpodobností . Vypouštěcí kanál nedokáže zaměnit jeden znak abecedy za jiný znak vstupní abecedy, pouze zaměnit znak za .
Nejběžnější model kanálu je binární symetrický kanál, kde a kanál může změnit na nebo naopak s pravděpodobností .
Pro zajištění vyšší spolehlivosti přenosu zpráv je používaná redundance, parita, nebo jiné techniky, které umožňují detekovat nebo opravit chybně přenesenou zprávu.
===== Kódování a dekódovací pravidla =====
Buď dán kanál bez paměti se vstupní abecedou a výstupní abecedou . Kód délky je libovolný systém různých posloupností délky symbolů ze . Prvky se nazývají kódová slova.
Je-li dán kód délky s kódovými slovy , dekódovací pravidlo je libovolný rozklad množiny možných obdržených posloupností do disjunktních množin se zřejmou interpretací toho, že je-li obdržená posloupnost prvkem , pak je dekódováno jako kódové slovo .
Předpokládáme, že neobsahuje symbol , rozhodovací (dekódovací) pravidlo je funkce . Je-li slovo v , pak dekódovací pravidlo dekóduje na , jinak hlásí chybu pokud .
===== Shannonova věta =====
Kapacita kanálu je jeho míra schopnosti přenášet informace. Kapacita binárního symetrického kanálu s pravděpodobností chyby přenosu je určena vztahem , kde .
Buď dán binární symetrický kanál kapacity a libovolné , . Pak pro každou posloupnost přirozených čísel splňujících kde , a všechna kladná , existuje posloupnost kódů a přirozené číslo tak, že má kódových slov délky a maximální pravděpodobnost chyby pro všechna .
Jakým způsobem funguje tato věta. Předpokládejme, že pravděpodobnost chyby takovéhoto kanálu je taková, že kapacita kanálu . Pak, je-li naše zpráva řetězec nul a jedniček, víme, že pro dostatečně velké , položíme-li , existuje množina kódových slov délky , která mají pravděpodobnost chyby menší než libovolně předem předepsaná hranice. Tudíž, abychom zakódovali zprávu ze zdroje, postup je následující:
- Rozdělte zprávu do bloků délky , přičemž je takové, že .
- Zakódujte každý z těchto -bloků do kódu tak, že použijete kódové slovo délky pro každý -blok.
- Přeneste nově zakódovanou posloupnost kanálem.
Zjednodušená verzia (Honza R.): Kapacita kanálu je , hľadáme teda kód s kapacitou . Správu rozdelíme do blokov dĺžky a každý blok kódujeme slovom dĺžky . Aby sme dosiahly kapacitu prenosu , musí platiť , t.j. . Veta zaručuje, že pre dostatočne veľké (a teda aj ) existuje kód s ľubovoľne malou chybou prenosu.
===== Kódy opravující chyby =====
Buď přirozená čísla. Řekneme, že kód určí chyb, jestliže pokud každé kódové slovo změníme alespoň na jednom a ne více než místech, nebude výsledný řetězec kódové slovo. Řekneme, že kód určí právě chyb, jestliže určí chyb a neurčí chyb.
Řekneme, že kód opraví chyb, jestliže, pokud použijeme pravidlo minimální vzdálenosti, jsme schopni opravit alespoň chyb a v případě, kdy se nebudeme moci rozhodnout, dostaneme na výstupu chybu v dekódování. Řekneme, že kód opraví právě chyb, jestliže opraví chyb a neopraví chyb.
Hammingova vzdálenost mezi vektory a je počet míst, ve kterých se a liší. Váha slova je pak počet nenulových znaků slova , t.j. , kde je slovo z nul.
Buď . Sférou v se středem a poloměrem rozumíme množinu .
Objemem sféry nazveme číslo , t.j. počet řetězců délky , které mají Hammingovu vzdálenost od nejvýše .
Platí, že .
Pro kód platí, že minimální vzdálenost kódu je . Má-li kód minimální vzdálenost , lze opravit pomocí dekódování podle pravidla minimální vzdálenosti až chyb. Kód určí chyb.
Pokud má kód právě kódových slov délky a minimální vzdálenost , mluvíme o -kódu.
-kód je maximální, pokud:
- Není obsažen v žádném větším kódu se stejnou minimální vzdáleností, tj. není obsažen v žádném -kódu.
- pro všechna slova existuje kódové slovo s vlastností .
===== Lineární kódy =====
Považujme za těleso o prvcích. Buď dále vektorový prostor dimenze nad tělesem . Typický prvek tohoto vektorového prostoru budeme psát jako , případně , kde .
Lineární kód nad je definován jakožto podprostor prostoru . Má-li tento podprostor dimenzi , mluvíme o -kódu, pokud je minimální vzdálenost , tak mluvíme o -kódu. Protože každý k-dimenzionální podprostor nad má prvků, každý -kód nad je -kód.
Generující matice pro lineární kód je libovolná matice rozměrů , jejíž řádky tvoří lineárně nezávislých kódových slov z .
Každou generující matici je možné následujícími úpravami:
* záměna řádků
* násobení řádku nenulovým skalárem
* přičtení k řádku skalární násobek jiného řádku
* záměna sloupců
* násobení sloupce nenulovým skalárem
upravit do tvaru , kde je jednotková matice typu .
Minimální vzdálenost lineárního kódu je minimální váha všech nenulových vektorů z .
Nechť je lineární -kód nad a má generující matici:
.
Kódová slova jsou vektory délky tvaru , .
Pokud je zpráva braná jako posloupnost , zakódujeme pomocí kódového slova , kde jsou určena předpisem .
Matice kontroly parity kódu je matice . Platí, že právě tehdy, když . má minimální vzdálenost tehdy a jen tehdy, když každých sloupců matice je nezávislých, ale některých sloupců je lineárně závislých.
==== Dekódování ====
Nechť je obdržený vektor, pak je možný chybový vektor vektoru , pokud existuje takové, že . Pro dekódování podle pravidla minimální vzdálenosti stačí najít chybový vektor s minimální vahou.
===== Binární Hammingovy kódy =====
Nechť a . Nechť je kontrolní matice typu , jejíž sloupce tvoří navzájem nezávislé nenulové vektory z . je kontrolní matice binárního -kódu, kde . Mluvíme pak o Hammingově -kódu. Každý Hammingův kód je perfektní kód opravující jednu chybu.
===== Cyklické kódy =====
Kód se nazývá cyklický, pokud:
* je lineární
* pokud vektor , pak i vektor .
Vektor je možné identifikovat polynomem . Je-li polynomiální reprezentace , je i kódové slovo pro každý polynom stupně nejvýše .
Je-li nenulový polynom minimálního stupně v , pak generuje kód v tom smyslu, že každé kódové slovo je tvaru pro vhodný polynom .
Je-li cyklický kód délky s generujícím polynomem , pak jeho generující matice typu má tvar:
Je-li generující polynom cyklického kódu délky , pak dělí polynom .
===== Generování skutečně náhodných a pseudonáhodných sekvencí =====
==== Extraktor náhodnosti ====
Typicky zdroj náhodnosti generuje náhodná data s nějakým rozdělením. Extraktor náhodnosti má za úkol převést toto rozdělení na uniformní rozdělení nebo se mu co nejvíce přiblížit.
Pro známé pravděpodobnosti je možné jednotlivé výstupy shlukovat tak, že extraktor vrátí stejnou hodnotu pro různé vstupy. Pravděpodobnost skupiny je součet pravděpodobností jednotlivých výstupů.
Pro neznámé pravděpodobnosti je možné využít například Von Neumannův extraktor. Zdroj generuje sekvenci náhodných bitů nezávisle podle neznámého pravděpodobnostního rozdělení, 0 s pravděpodobností a 1 s pravděpodobností . Sekvenci je možné rozdělit na dvojice bitů:
* 00, 11 -- žádný výstup,
* 01 -- výstup 0 s pravděpodobností ,
* 10 -- výstup 1 s pravděpodobností .
==== Generování náhodných sekvencí ====
Při generování skutečně náhodných sekvencí se využívají různé měřitelné fyzikální jevy, např. rozpad radioaktivních prvků nebo měření atmosferického šumu.
==== Generování pseudonáhodných sekvencí ====
V deterministickém prostředí počítačů není možné generovat skutečně náhodná data bez použití specializovaného HW. Softwarově je možné generovat pouze pseudonáhodná data. Generátor pseudonáhodných čísel je algoritmus, který rozvojem náhodné vstupní hodnoty (semínko, seed) generuje výstupní sekvenci. V ideálním případě jsou tato data nerozlišitelná od náhodných. Kvalita generátoru záleží na kvalitě semínka a kvalitě algoritmu.
=== Von Neumannova middle-square metoda ===
Vstup generátoru je libovolné číslo, to je umocněno. První a podlední čísla jsou odstraněna a zbytek je použit jako výstup a zároveň semínko pro další iteraci.
Příklad pro vstup :
-
- náhodný výstup
-
- náhodný výstup je
Von Neumann použil 10místná čísla. Tento generátor není dobrý, protože má velmi malou periodu a některé hodnoty (například "0000") se opakují ještě častěji.
====== Materiály ======
* Odpovídá učivu z předmětu M8170 Teorie kódování
* Předmět má dobrá skripta - http://is.muni.cz/el/1431/jaro2011/M8170/um/ (soubor PREDLAwideboc.pdf)
* IV111 (Bouda) - [[http://www.fi.muni.cz/~xbouda1/teaching/current/IV111/default.html|Všechny slidy]]
* [[http://www.fi.muni.cz/~xbouda1/teaching/current/IV111/prednasky/lecture5.pdf|Information theory]]
* [[http://www.fi.muni.cz/~xbouda1/teaching/current/IV111/prednasky/lecture6.pdf|Data compression]]
* [[http://www.fi.muni.cz/~xbouda1/teaching/current/IV111/prednasky/lecture7.pdf|Channel capacity]]
* [[http://www.fi.muni.cz/~xbouda1/teaching/current/IV111/prednasky/lecture9.pdf|Randomness extractors]]
====== Vypracoval ======
DevelX - Martin Jurča (převzato z [[http://statnice.dqd.cz/mgr-szz:in-psk:3-psk|3. otázky oboru PSK]])
Drobné úpravy Ondra Mokoš
Opravy Honza Rusnačko
~~DISCUSSION~~