}w!"#$%&'()+,-./012345<ya

Podobné dokumenty
Kódování signálu. Problémy při návrhu linkové úrovně. Úvod do počítačových sítí. Linková úroveň

[1] samoopravné kódy: terminologie, princip

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

Rok / Year: Svazek / Volume: Číslo / Issue: Turbo Blokové Kódy. Turbo block codes. Jakub Šedý, Pavel Šilhavý, Ondřej Krajsa, Ondřej Hrouza

Samoopravné kódy. Katedra matematiky a Institut teoretické informatiky Západočeská univerzita

Způsoby realizace této funkce:

Proudové šifry a posuvné registry s lineární zpětnou vazbou

Matematika IV 10. týden Kódování

PSK2-5. Kanálové kódování. Chyby

Zabezpečení dat při přenosu

Ochrana dat před shluky chyb, Berlekamp- Preparatův kód

PROTOKOL RDS. Dotaz na stav stanice " STAV CNC Informace o stavu CNC a radiové stanice FORMÁT JEDNOTLIVÝCH ZPRÁV

Kódy pro odstranění redundance, pro zabezpečení proti chybám. Demonstrační cvičení 5 INP

6. Transportní vrstva

[1] samoopravné kódy: terminologie, princip

KOMBINAČNÍ LOGICKÉ OBVODY

Počítačové sítě Datový spoj

BCH kódy. Alena Gollová, TIK BCH kódy 1/27

Kódování Obsah. Reedovy-Solomonovy kódy. Radim Farana Podklady pro výuku. Cyklické kódy.

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Samoopravné kódy, k čemu to je

RTP = real=time protocol ST-II = Internet Stream Protocol (náhrada TCP pro streamy, řídicí protokol, datový přenos)

Informace, kódování a redundance

4. Co je to modulace, základní typy modulací, co je to vícestavová fázová modulace, použití. Znázorněte modulaci, která využívá 4 amplitud a 4 fází.

Generátory pseudonáhodných čísel a jejich aplikace v kryptografii (proudové šifry)

1 Co jsou lineární kódy

Algoritmus pro hledání nejkratší cesty orientovaným grafem

PŘEDNÁŠKA PS 6 Přenos dat v počítačových sítích

Kódováni dat. Kódy používané pro strojové operace

Hammingovy kódy. dekódování H.kódů. konstrukce. šifrování. Fanova rovina charakteristický vektor. princip generující a prověrková matice

Základní komunikační řetězec

Adaptabilní systém pro zvýšení rychlosti a spolehlivosti přenosu dat v přenosové síti

Informatika Kódování. Obsah. Kód. Radim Farana Podklady předmětu Informatika pro akademický rok 2007/2008

Generující kořeny cyklických kódů. Generující kořeny. Alena Gollová, TIK Generující kořeny 1/30

Základy počítačových sítí Model počítačové sítě, protokoly

uvedení do problematiky i Bezpečnostní kódy: detekční kódy = kódy zjišťující chyby samoopravné kódy = kódy opravující chyby příklady kódů:

Teorie kódování aneb jak zhustit informaci

Základní komunikační operace

Ústav automobilního a dopravního inženýrství. Datové sběrnice CAN. Brno, Česká republika

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

Lineární algebra nad obecným Z m, lineární kódy

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace


Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

4. Transportní vrstva

13 Barvy a úpravy rastrového

ZÁKLADY DATOVÝCH KOMUNIKACÍ

Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35

Počítačové sítě Datový spoj

8 Kořeny cyklických kódů, BCH-kódy

TOPOLOGIE DATOVÝCH SÍTÍ

BPC2E_C09 Model komunikačního systému v Matlabu

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Odpřednesenou látku naleznete v kapitole 3.3 skript Diskrétní matematika.

Datové struktury 2: Rozptylovací tabulky

Studium protokolu Session Decription Protocol. Jaroslav Vilč

MĚŘENÍ A ANALÝZA ELEKTROAKUSTICKÝCH SOUSTAV NA MODELECH. Petr Kopecký ČVUT, Fakulta elektrotechnická, Katedra Radioelektroniky

ALGEBRA. Téma 4: Grupy, okruhy a pole

Úvod do teorie informace

Úvod do zpracování signálů

Dynamické programování

Protokoly: IP, ARP, RARP, ICMP, IGMP, OSPF

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Algoritmizace a programování

Počítačové sítě Teoretická průprava II. Ing. František Kovařík

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Navyšování propustnosti a spolehlivosti použitím více komunikačních subsystémů

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

SČÍTAČKA, LOGICKÉ OBVODY ÚVOD TEORIE

PROJEKT ŘEMESLO - TRADICE A BUDOUCNOST Číslo projektu: CZ.1.07/1.1.38/ PŘEDMĚT PRÁCE S POČÍTAČEM

Kódy a kódování dat. Binární (dvojkové) kódy. Kód Aikenův

Informace v počítači. Výpočetní technika I. Ing. Pavel Haluza ústav informatiky PEF MENDELU v Brně haluza@mendelu.cz

1. Základy teorie přenosu informací

Polynomy nad Z p Konstrukce faktorových okruhů modulo polynom. Alena Gollová, TIK Počítání modulo polynom 1/30

ZABEZPEČENÍ PŘENOSU DAT PROTI DLOUHÝM SHLUKŮM CHYB

Dosud jsme se zabývali pouze soustavami lineárních rovnic s reálnými koeficienty.


Náhled testu. Přijímací zkouška magisterského studia. konečný automat bez zbytečných stavů, který přijímá jazyk popsaný tímto výrazem, má:

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV TELEKOMUNIKACÍ

Hammingův kód. Vladislav Kosejk. České vysoké učení technické v Praze Fakulta jaderná a fyzikálně inženýrská Detašované pracoviště Děčín

Počítačové sítě pro V3.x Teoretická průprava II. Ing. František Kovařík

Integrovaný informační systém Státní pokladny (IISSP) Dokumentace API - integrační dokumentace

Využití neuronové sítě pro identifikaci realného systému

Generování pseudonáhodných. Ing. Michal Dorda, Ph.D.

1 Mnohočleny a algebraické rovnice

Seminární práce do předmětu: Bezpečnost informačních systémů. téma: IPsec. Vypracoval: Libor Stránský

Architektura počítačů Logické obvody

Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky

Náhled testu. Přijímací zkouška magisterského studia. konečný automat bez zbytečných stavů, který přijímá jazyk popsaný tímto výrazem, má:

1 Mnohočleny a algebraické rovnice

Šifrová ochrana informací věk počítačů PS5-2

Voice over IP Fundamentals

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

PB169 Operační systémy a sítě

Technická kybernetika. Obsah. Principy zobrazení, sběru a uchování dat. Měřicí řetězec. Principy zobrazení, sběru a uchování dat

Karel Břinda. 7. března 2011

PDV /2018 Detekce selhání

Transkript:

Masarykova univerzita Fakulta informatiky }w!"#$%&'()+,-./012345<ya Rychlá dopředná korekce chyb pro přenosy videa v reálném čase Diplomová práce Bc. Jakub Chmelka Brno, podzim 2013

Prohlášení Prohlašuji, že tato diplomová práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: RNDr. Jiří Matela ii

Poděkování Rád bych poděkoval vedoucímu práce RNDr. Jiřímu Matelovi a konzultantu Mgr. Milanu Kabátovi za pomoc a poskytnuté rady při řešení této práce a za jejich optimistický přístup při konzultacích. iii

Shrnutí Tato diplomová práce se zabývá dopřednou korekcí chyb u realtime multimediálních aplikací. Seznamuje s různými možnostmi dopředné korekce chyb, které se v současnosti využívají k zabezpečení dat přenášených datovou sítí. V této práci je navržena knihovna, která využívá náhodné kódování při zabezpečení a rekonstrukci ztracených dat. Výkonnost této knihovny je poté testována a porovnána s již využívanou knihovnou, která pracuje na bázi LDPC kódů. iv

Klíčová slova dopředná korekce chyb, FEC, LDPC, LDGM, PRNG, generátor náhodných čísel, Ultragrid, paketové zrcadlo, náhodné kódování v

Obsah 1 Úvod........................................... 1 1.1 Struktura práce................................... 1 2 Korekce chyb v síťových přenosech......................... 3 2.1 Znovuzasílání dat.................................. 3 2.2 Forward Error Correction.............................. 4 2.2.1 Turbo kódy................................ 4 Kódování Turbo kódů.......................... 5 Dekódování Turbo kódů........................ 6 Shrnutí.................................. 6 2.2.2 Reed-Solomon coding.......................... 7 2.2.3 Low density parity check (LDPC) kódy................ 8 Maticová reprezentace.......................... 9 Grafová reprezentace.......................... 9 Regulární a neregulární kódy..................... 10 Kódování LDPC kódů.......................... 10 Dekódování LDPC kódů........................ 10 Algoritmus Message-passing 11 Hard-decision algoritmus 11 3 Dopředná korekce chyb na základě náhodnostního kódování......... 13 3.1 Generování náhodných čísel............................ 13 3.1.1 True Random Number Generator.................... 13 3.1.2 Pseudo-Random Number Generator.................. 14 Lineární kongruentní generátory................... 14 Zpožděné Fibonacciho generátory................... 14 Mersenne Twister............................ 15 3.2 Popis průběhu kódování............................... 15 3.3 Kódování na vnějších uzlech sítě.......................... 16 3.3.1 Kódovací matice............................. 16 Generování na zcela náhodné pozice v matici............ 16 Náhodný počet 1 ze zadaného intervalu v každém řádku matice. 17 Náhodný počet 1 ze zadaného intervalu v každém sloupci matice 17 3.3.2 Algoritmus kódování........................... 18 3.3.3 Algoritmus dekódování......................... 18 3.4 Kódování na vnitřních uzlech sítě......................... 20 3.4.1 Práce paketového zrcadla RUM2.................... 20 vi

3.4.2 Aplikace pro kódování na vnitřních uzlech.............. 21 Tvorba kódovací matice a kontrolního grafu............. 21 Tvorba framů z přijatých paketů.................... 22 RTP paket 22 Doba čekání na pakety 23 Tvorba informace o přijatých částech framu............. 23 Dekódování a kódování......................... 23 Odeslání dat reflektoru......................... 24 Zhodnocení kódování na vnitřních uzlech.............. 24 4 Implementace...................................... 25 4.1 Třída coding_session................................ 25 4.2 Třída NC_session.................................. 25 4.2.1 Inicializační metody........................... 26 4.2.2 Metody pro algoritmus kódování.................... 27 4.2.3 Metody pro algoritmus dekódování.................. 28 4.3 Třída Node..................................... 29 4.4 Třída Edge...................................... 30 4.5 Třída Tanner_graph................................. 30 5 Měření.......................................... 32 5.1 Testování navrženého algoritmu.......................... 32 5.1.1 Časová složitost kódovacího algoritmu................ 32 5.1.2 Časová složitost dekódovacího algoritmu............... 33 Analýza částí dekódovacího algoritmu................ 34 5.1.3 Výpočetní schopnost dekódovacího algoritmu............ 35 Zcela náhodná matice.......................... 35 Matice s daným počtem jedniček v každém sloupci......... 35 Vliv propustnosti datové linky na kvalitu rekonstrukce dat.... 37 5.1.4 Shrnutí výsledků náhodného kódování................ 38 5.2 Porovnání s LDPC kódy.............................. 39 5.2.1 Porovnání opravné schopnosti LDGM a náhodného kódování... 39 5.2.2 Porovnání časové složitosti LDGM a náhodného kódování..... 40 6 Závěr........................................... 41 6.1 Možná rozšíření................................... 41 Literatura.......................................... 43 A Obsah přiloženého CD................................ 45 vii

Seznam obrázků 2.1 Použití paritní informace. Převzato z [2] 5 2.2 Schéma turbo kodéru. Převzato z [5] 5 2.3 Schéma turbo dekodéru. Převzato z [5] 6 2.4 Příklad kontrolní matice pravidelného kódu. Převzato z [10] 9 2.5 Tannerův graf odpovídající matici z obrázku 2.4. Převzato z [10] 10 2.6 Vizualizace algoritmu message-passing po přijetí zprávy y = [001xxx]. Převzato z [9] 12 3.1 Porovnání kontrolního grafu G c a grafu G a vytvořeného pro dekódovaný frame, v případě, že se při přenosu ztratil datový díl č.2 a 3 19 3.2 Schéma práce s daty na vnitřním uzlu sítě. 21 3.3 Schéma RTP hlavičky. 23 5.1 Graf časové závislosti na poměru jedniček v kódovací matici 33 5.2 Graf závislosti času výpočtu dekódovacího algoritmu na velikosti ztrátovosti datové linky. 34 5.3 Graf závislosti počtu neopravených datových framů na velikosti ztrátovosti datové linky. 36 5.4 Graf závislosti počtu neopravených datových framů na počtu jedniček v každém sloupci při 5% ztrátě dat. Počet jedniček v každém sloupci je fixní. 36 5.5 Graf závislosti počtu neopravených datových framů na počtu jedniček v každém sloupci při 5% ztrátě dat. Počet jedniček v každém sloupci je ze stanoveného intervalu. 37 5.6 Graf závislosti počtu neopravených datových framů na různé ztrátovosti dat. 38 5.7 Graf závislosti počtu neopravených datových framů na různé ztrátovosti dat. Porovnání LDGM a náhodného kódování. 39 5.8 Graf závislosti počtu neopravených datových framů na různé ztrátovosti dat. Porovnání LDGM a náhodného kódování. 40 viii

Kapitola 1 Úvod V posledních letech došlo k velkému rozšíření síťových technologií. Do popředí se dostává přenos multimediálních dat v reálném čase, který je využíván při videokonferencích, streamingu aj. Multimediální data jsou počítačovou sítí přenášena ve formě paketů. Jelikož je síťový přenos vlivem různých vnějších vlivů nedokonalý, dochází občas k porušení nebo ztrátě přenášených paketů, což se na straně příjemce projeví výpadkem, či zhoršenou kvalitou obrazu. Protokoly síťové vrstvy, které se využívají pro přenos realtime multimediálních dat, ovšem takto přenášená data vůči výpadkům nezabezpečují, tudíž je potřebné tuto funkcionalitu doplnit na aplikační vrstvě. Existuje několik základních přístupů jak tomuto jevu předcházet nebo zabránit. Jedná se o znovuzaslání ztracených dat nebo o dopřednou korekci chyb. Ve své práci se věnuji možnosti využití náhodného kódování při dopředné korekci chyb (Forward error correction, FEC). Tato technika přidává k přenášeným datům další redundantní informace, díky kterým je poté možné zrekonstruovat poškozená nebo ztracená data bez nutnosti jejich znovuzaslání. Na rozdíl od klasických a v současnosti využívaných přístupů jsou datové díly, ze kterých jsou poté konstruována zabezpečovací data, vybírány zcela náhodně. Cílem této práce je tedy navrhnout a implementovat algoritmus náhodného kódování multimediálních dat, který bude zabezpečovat data proti jejich výpadkům při přenosu datovou sítí. Tento algoritmus bude porovnán s již existujícím přístupem kódování pomocí LDPC kódů, který je v současnosti při přenosu dat využíván. Při testování bude kladen důraz na časovou složitost algoritmů a na to, jaké množství multimediálních framů jsou testované algoritmy schopny opravit. 1.1 Struktura práce Ve druhé kapitole jsou popsány různé možnosti zabezpečení dat při síťových přenosech. Jsou zde popsány výhody a nevýhody v současnosti používaných přístupů pro zabezpečení dat pomocí dopředné korekce chyb. Zvláštní důraz je kladen na metodu Low-density parity-check, se kterou je poté mnou vytvořená metoda porovnávána. Třetí kapitola se zabývá náhodným kódováním. Jsou zde popsány různé přístupy ke generování náhodných hodnot v prostředí informačních technologií. Dále zde dochází k návrhu náhodného kódování, popsány možnosti generování matic, pomocí níž poté probíhá samotné zabezpečení dat. Je zde popsán základní princip a výhody, které by 1

1. Úvod dané řešení mělo přinést v kontrastu s klasickým LDPC kódováním. Ve čtvrté kapitole je detailně popsána implementace knihovny náhodného kódování. Tato kapitola se věnuje popisu implementovaných tříd, jejich metod a datových struktur, které jsou v knihovně využívány. V kapitole testování jsou zhodnoceny silné a slabé stránky implementovaného algoritmu. Je provedeno testování časové složitosti algoritmu a jeho opravné síly. Získané výsledky jsou poté porovnány s výsledky v současnosti využívané knihovny kódování na základě LDPC kódů. V poslední kapitole jsou shrnuty výsledky této práce a je zde navrženo možné rozšíření práce. 2

Kapitola 2 Korekce chyb v síťových přenosech Jelikož při přenosu dat může dojít k jejich ztrátě nebo porušení, je potřeba data zabezpečit. To je možno provést buďto znovuzasláním ztracených, porušených nebo jinak znehodnocených dat, nebo přidáním jisté nadbytečné (redundantní) informace, pomocí níž je možné původní data zrekonstruovat. Každý z těchto přístupů má své výhody a nevýhody, proto musíme v dané situaci zvolit metodu, která bude v konkrétním případě dosahovat lepších výsledků. 2.1 Znovuzasílání dat Znovuzasílání dat (Automatic repeat request, ARQ) je metoda, při které se po přijetí bloku dat příjemcem vygeneruje zpráva, která je poslána zpět odesilateli. Tato zpráva mu potvrzuje, že posílaná data byla v pořádku doručena příjemci. Pokud tato zpráva odesilateli není do jisté doby doručena, považuje data, která odeslal, za nedoručená a snaží se je poslat příjemci znovu. Existuje řada různých algoritmů, jak tento způsob zabezpečení dat posílaných sítí implementovat. Mezi nejznámější z nich patří: Stop-and-Wait ARQ Go-back-N ARQ Selective Repeat ARQ Výhodou tohoto přístupu je, že spolu s daty se posílá jen velmi malé množství redundantních informací. Jedná se většinou jen o kontrolní součet a identifikaci konkrétního datového paketu, pomocí čehož jsme schopni zjistit na straně příjemce, jestli přijatá data neobsahují chyby a jestli jsou přijatá data kompletní. Jedná se o velmi spolehlivý přenos, jelikož jsme schopni ve většině případů doručit data příjemci. Nespornou nevýhodou tohoto přístupu je nutnost data zaslat znovu v případě, že byla poškozena, nebo že se část z nich cestou ztratila. Zpoždění, které vzniká potřebou znovu zaslat data, je nepřípustné u většiny real-time multimediálních aplikací, tudíž se tento přístup u těchto aplikací používá jen velmi výjimečně. Tento přístup je díky svým výhodám využíván hlavně aplikacemi, které potřebují opravdu zabezpečený přenos dat a zpoždění vzniklé znovuzasíláním pro ně není vel- 3

2. Korekce chyb v síťových přenosech kým problémem. Aplikace tohoto typu většinou využívají na transportní vrstvě protokol TCP (Transmission Control Protocol), který tuto službu implementuje. 2.2 Forward Error Correction Dopředná korekce chyb je metoda, při které se k datům přidává redundantní informace, která je poté posílaná spolu s daty. Na rozdíl od ARQ se po přijetí dat příjemcem odesilateli neposílá žádné potvrzení přijetí. V případě, že se při přenosu ztratí nebo poškodí určitá část dat, na straně příjemce se snažíme z přijatých dat a redundantní informace zpětně dopočítat původní data. K tomu se používají tzv. samoopravné kódy. Výhodou samoopravných kódů je, že nemusí docházet k znovuzaslání dat, tudíž nedochází k tak velkému zpoždění, jako u varianty Automatic repeat request. Naopak nevýhodou je, že množství redundantních informaci je větší. Kvůli tomu dochází ke snížení šířky přenosového pásma. Dále také není zcela vždy možné z přijatých dat zrekonstruovat původní informaci. Kvůli tomu je tento princip využíván hlavně u aplikací, které nepotřebují naprosto spolehlivý přenos dat, ale dokáží si poradit i s určitými ztrátami. Tento princip je proto využíván u multimediálních přenosů v reálném čase, jako jsou např. videokonference, kde je hlavní důraz kladen na odezvu, a znovuzaslání dat zde proto není přípustné. Samoopravné kódy se mohou rozdělit na: Konvoluční kódy: Pracují s datovými toky o proměnné délce. Vstupní data délky k jsou transformována na výstupní data délky n (n k). Výstup konvolučních kódů ovšem nezávisí pouze na aktuálních vstupních datech. Jelikož konvoluční kodéry pracují na bázi posuvných registrů, jsou aktuální výstupy ovlivňovány do jisté míry i daty, která už byla zpracována. Konvoluční kód může být převeden na blokový metodou tail-bitingu. Tato metoda zajišťuje, že stav registru je před zakódováním dat vždy stejný.[1] Blokové kódy: Dělí datové toky na pravidelné bloky o velikosti k datových paketů, které jsou kódovány do bloků o velikosti n paketů. Vypočítané n k pakety jsou nazývány paritními pakety. Příjemce dat je poté v ideálním případě schopný dopočítat k zdrojových paketů z jakýchkoli n přijatých paketů. Jedním z nejznámějších principů samoopravných kódů je přidání paritních bitů. Ty jsou ze zdrojových dat počítány logickou funkcí XOR (exclusive or, exclusive disjunction). Jelikož je tato binární operace asociativní, můžeme ji použít i jako n-ární, což je pro potřeby kódování nezbytné. V případě, že použijeme dostatek paritních bitů, jsme schopni zrekonstruovat nejen bitové chyby, ale i celé datové pakety. 2.2.1 Turbo kódy Claude Berrou, Alain Glavieux a Punya Thitimajshima v roce 1993 ve své práci poprvé představili tuto skupinu samoopravných kódů. Jedná se o skupinu konvolučních 4

2. Korekce chyb v síťových přenosech Obrázek 2.1: Použití paritní informace. Převzato z [2] Obrázek 2.2: Schéma turbo kodéru. Převzato z [5] kódů jejichž výkon, pokud bereme v úvahu chybovost (Bit-Error Rate 1 ), se velmi blíží Shannonovu limitu.[3] Shannonův limit nám udává maximální tok dat C, který může být přenesen přes komunikační médium se šířkou pásma B při daném poměru signálu S a šumu N 2. Kódování Turbo kódů Základní struktura turbo kodéru je zobrazena na obrázku 2.2. Turbo kodér je zde tvořený dvěma paralelně zapojenými RSC (Recursive Systematic Convolutional) kodéry, které jsou odděleny prokladačem (interleaver). Oba kodéry přijímají stejná data. Do druhého ovšem tato data přichází v jiném pořadí, které určuje prokladač. Ten zde slouží k minimalizaci shluků chyb. Výstup z obou kodérů je následně multiplexován a může být i zúžen. Avšak tento způsob zvyšování kódového poměru se nedoporučuje z důvodu degradace výkonnosti kódu[5]. 1. Poměr chybně přenesených bitů ku celkovému počtu přijatých bitů. 2. C = B log 2 (1 + (S N)) 5

2. Korekce chyb v síťových přenosech Obrázek 2.3: Schéma turbo dekodéru. Převzato z [5] Dekódování Turbo kódů Základní struktura turbo dekodéru je zobrazena na obrázku 2.3. Dva dekodéry jsou odděleny blokem prokládání podobně jako u kodéru. Do každého dekodéru vstupují 3 posloupnosti: systematické bity, paritní bity a informace z druhého dekodéru. Tato informace se nazývá apriorní informace. Každý dekodér využívá oba vstupy z kanálu a tuto apriorní informaci z druhého dekodéru. Výstupem každého dekodéru je kromě dekódované posloupnosti i měkký výstup (soft-output) pro dekódované bity. Tento měkký výstup nám udává pravděpodobnost správného dekódování. Základními algoritmy pro dekódování Turbo kódů jsou Soft-Output Viterbi Algorithm (SOVA) a Maximum A- Posteriori algorithm (MAP). SOVA - Soft output Viterbi algorithm: Jak už název napovídá, jedná se o modifikovaný Viterbiho algoritmus, který je univerzálním algoritmem pro dekódování konvolučních kódů[4]. MAP - Maximum A-Posteriori Algorithm: Kromě odhadované bitové posloupnosti poskytuje také pravděpodobnost správného dekódování pro každý dekódovaný bit, tj. měkký výstup[7]. Shrnutí Turbo kódy našly své uplatnění hlavně ve světě bezdrátového přenosu dat, např. v technologii WiMAX, dále jsou začleněny do standardu pro třetí generaci mobilních přenosů nebo v komunikačním systému pro vesmírné sondy. 6

2. Korekce chyb v síťových přenosech 2.2.2 Reed-Solomon coding Reed-Solomonovy kódy byly publikovány v 60. letech Irvingem Reedem a Gusem Solomonem. Patří do skupiny BCH (Bose-Ray-Chaudhuri) kódů. Jedná se tedy o korekční cyklické lineární kódy nad symboly, které jsou tvořeny m-bitovými posloupnostmi, kde m je libovolné přirozené číslo větší než 2. Většinou bývají označovány zkratkou RS (n, k), kde parametr k označuje, kolik symbolů vstupuje do kodéru a parametr n udává počet výstupních symbolů. Pro n a k poté platí: 0 < k < n < 2 m + 2 Pro nejběžněji používané RS (n, k) kódy platí: (n, k) = (2 m 1, 2 m 1 2t) kde t označuje korekční schopnost RS kódu a n k = 2t je počet paritních symbolů. Pro nebinární kódy je vzdálenost mezi dvěma kódovými slovy definována (analogicky jako u Hammingovy vzdálenosti) jako počet symbolů, ve kterých se posloupnost liší. Pro Reed-Solomon kódy je tato vzdálenost dána vztahem podle [6]: d min = n k + 1 Kód je schopný opravit libovolnou kombinaci t nebo méně chyb, kde t může být vyjádřeno jako: t = d min 1 = n k 2 2 Kódová slova jsou při kódování vytvářena z generujícího polynomu, který je ve tvaru: g(x) = g 0 + g 1 X + g 2 X 2 +... + g 2t 1 X 2t 1 + X 2t Stupeň generujícího polynomu je roven počtu paritních symbolů. Pro zakódovanou zprávu platí, že je beze zbytku dělitelná generujícím polynomem. Výstupní kódové slovo je potom dáno vztahem [7] c(x) = i(x) g(x) kde i(x) označuje vstupní polynom, g(x) generující polynom a koeficienty polynomů jsou prvky Galoisova pole GF (2 m ). Pro dekódování RS kódů bylo vyvinuto mnoho algoritmů. Obecně se dá však proces dekódování rozdělit do pěti základních kroků [8]: Určení syndromů - Zjišťujeme, zda nastala či nenastala chyba. Tento krok se provádí výpočtem syndromových rovnic. V případě, že všechny syndromové rovnice vyjdou nulové, nenastala žádná chyba a další kroky algoritmu se již nebudou provádět. 7

2. Korekce chyb v síťových přenosech Stanovení chybového polynomu - V tomto kroku se využívá např. Berlekamp Masseyův, Euklidův nebo Peterson-Gorenstein-Zierlův algoritmus. Nalezení kořenů chybového polynomu - V tomto kroku hledáme kořeny chybového mnohočlenu. Nejpoužívanějším způsobem je Chienovo vyhledávání. To spočívá v tom, že se postupně prověřují všechny prvky z Galoisova tělesa GF, jestli nejsou kořenem mnohočlenu. Tímto algoritmem zjistíme pozice chyb. Stanovení hodnoty chyby - Využívá se zde Forneyův algoritmus. Po proběhnutí tohoto algoritmu získáváme chybový polynom e(x). Oprava chyby - V poslední fázi jsou známy pozice chyb a jejich hodnoty v přenášených datech. Chybový polynom e(x) je přičítán k přijatému polynomu r(x). Jejich sečtením získáváme opravenou zprávu i(x): i(x) = e(x) + r(x) Reed-Solomonovy kódy našly své využití u zálohovacích médií (CD, DVD), v bezdrátových a satelitních přenosech, u přenosů přes vysokorychlostní modemy (ADSL aj.) nebo přenosu signálu digitální televize (standard DVB). 2.2.3 Low density parity check (LDPC) kódy Jedná se o lineární blokové kódy, které byly poprvé představeny v roce 1963 Robertem G. Gallagerem. Byly ovšem skoro na 35 let zapomenuty, jelikož v té době nebylo prakticky reálné tyto kódy kvůli jejich vysokým výpočetním nárokům využít. LDPC kódy byly znovuobjeveny až v 90. letech. LDPC kódy pracují na základě kódování s využitím generující matice G. Jak už název napovídá, generující matice je u těchto kódů velmi řídká, to znamená, že obsahuje velký počet logických hodnot 0 a jen malé množství logických hodnot 1. Generující matici G lze definovat vztahem: G = [P I k ] kde P je paritní submatice o rozměrech k (m k) a I k je jednotková submatice o rozměrech k k. Vzniklá generující matice o rozměrech k m slouží ke kódování. Proces kódování popisuje vztah: c = G T k kde vektor k je vstupní posloupnost znaků, které zakódujeme do výstupní posloupnosti c. Dále definujeme kontrolní matici H v systematickém tvaru. Tento tvar lze odvodit z generující matice G následovně[9]: H = [I c k P T ] Mezi generující maticí G a kontrolní maticí H musí platit vztah: G H T = 0 8

2. Korekce chyb v síťových přenosech Obrázek 2.4: Příklad kontrolní matice pravidelného kódu. Převzato z [10] Maticová reprezentace Mějme kontrolní matici H o rozměrech k m, kde k udává počet sloupců a m počet řádků kontrolní matice. Hodnota w k udává počet jedniček v každém sloupci a hodnota w m počet jedniček v každém řádku. Pro kontrolní matici LDPC kódu platí[11]: w k k && w m m Grafová reprezentace Kontrolní matice H může být u LDPC kódu reprezentována bipartitním grafem. V takovém případě se hovoří o tzv. Tannerově grafu, pojmenovaném podle Michaela Tannera. Bipartitní graf je takový graf, jehož množinu uzlů můžeme rozdělit na dvě disjunktní množiny tak, že žádné dva uzly ze stejné množiny nejsou přímo spojeny hranou. Dva typy uzlů u Tannerova grafu jsou datové uzly (v-nodes), které reprezentují datové informace, a kontrolní uzly (c-nodes), které reprezentují informace paritní. 3 Tannerovy grafy se budují na základě kontrolní matice následovně. Počet v-nodes je roven počtu sloupců k a počet c-nodes je roven počtu řádků m kontrolní matice H. Kontrolní uzel m je s datovým uzlem k spojen hranou pouze v případě, že kontrolní matice na indexu H km obsahuje logickou hodnotu 1. Jako cyklus v grafu označujeme cestu délky nejméně 3, pro kterou platí že počáteční uzel v 1 je shodný s koncovým uzlem v n. U Tannerových grafů je nejmenší délka cyklu rovna 4. Při konstrukci kontrolních matic, potažmo Tannerových grafů, se ovšem snažíme co nejvíce zabránit právě těmto cyklům délky 4, jelikož zhoršují výkonnost LDPC kódu při dekódování.[10] Matice z obrázku 2.4 není ideálním příkladem kontrolní matice LDPC kódu, jelikož není dostatečně řídká, ale ilustruje vzájemnou souvislost mezi kontrolní maticí a Tannerovým grafem. V praktickém případě jsou rozměry kontrolní matice několikanásobně větší. 3. V některé literatuře se datové uzly označují jako variable nodes, bit nodes nebo symbol nodes a kontrolní uzly jako check nodes nebo function nodes. 9

2. Korekce chyb v síťových přenosech Obrázek 2.5: Tannerův graf odpovídající matici z obrázku 2.4. Převzato z [10] Regulární a neregulární kódy Podle zákonitostí, jak jsou v kontrolní matici rozmístěny jednotlivé hodnoty logické 1 můžeme rozdělit LDPC kódy na: Regulární (pravidelné) kódy: LDPC kód je pravidelný, právě když pro každé k platí, že w k je konstantní, a zároveň pro každé m platí, že w m = w k (k m) Neregulární (nepravidelné) kódy: V případě, že w k v jednotlivých sloupcích, nebo w m v jednotlivých řádcích kontrolní matice není konstantní, jedná se o nepravidelný LDPC kód. I zde ovšem musí být splněna podmínka, že matice je řídká. Kódování LDPC kódů Jelikož LDPC kódy patří do skupiny lineárních blokových kódů, využívá se při kódování generující matice G. Tuto generující matici získáme z kontrolní matice H. Mezi těmito maticemi musí platit vztah 2.2.3. Pro proces kódování musí být poté zvolen vektor k, reprezentující vstupní posloupnost informačních bitů. Jako výstup kódování je chápán vektor c symbolizující výstup z kodéru LDPC kódu, jenž je připraven k přenosu přes informační kanál. Po definování všech potřebných parametrů lze provést kódování. To je realizováno vektorovým vynásobením sloupců generující matice G se vstupní posloupností informačních znaků k a následným sečtením jednotlivých součinů za pomocí logické funkce XOR. Dekódování LDPC kódů V souvislosti s LDPC kódy bylo vytvořeno několik algoritmů, které jsou schopny dekódovat data. Většina z těchto algoritmů pracuje s grafovou reprezentací kontrolní matice. 10

2. Korekce chyb v síťových přenosech Většina z dekódujících algoritmů patří do skupiny message-passing algoritmů, které dostaly název podle toho, že posílají zprávy mezi kontrolními a datovými uzly příslušného Tannerova grafu. Jsou také známy jako iterativní algoritmy, jelikož jsou tyto zprávy posílány mezi uzly iterativně, dokud není dosaženo požadovaného výsledku, tzn. úspěšného dekódování. V případě, že algoritmus není schopen data úspěšně dekódovat, je po určitém počtu iterací zastaven. V tomto případě se ztracená data nepodařilo zrekonstruovat a příjemce si s touto situací musí poradit. Algoritmus Message-passing Uvažujme přenos po kanále, který nám datovou informaci buďto přenese korektně, tzn. bez chyb, a nebo ji zahodí. Jedná se o tzv. binary (packet) erasure chanel, v závislosti na tom, jestli pracujeme s jednotlivými bity, nebo celými pakety. V tomto případě pracuje message-passing algoritmus tak, že se v jednotlivých iteracích posílají zprávy po hranách Tannerova grafu mezi datovými a kontrolními uzly. Datové uzly v každé iteraci posílají zprávu všem kontrolním uzlům, se kterými mají společnou hranu. Tato zpráva obsahuje jejich hodnotu "0"nebo "1"v případě, že tuto informaci znají. Pokud ji neznají, nabývá hodnoty "x". To se děje v případě, že byla informace zahozena. Pokud kontrolní uzel dostane právě jednu zprávu obsahující "x", vypočítá zpětně paritní informaci. Poté kontrolní uzel pošle každému datovému uzlu, se kterým má společnou hranu, informaci. V případě, že daný datový uzel poslal konkrétní hodnotu "0"nebo "1", dostane stejnou informaci zpět. V případě, že poslal informaci "x"a kontrolnímu uzlu se podařilo informaci zpětně obnovit, dostane datový uzel svoji správnou logickou hodnotu a v příští iteraci už posílá tuto správnou hodnotu. V případě, že kontrolní uzel dostane více než jednu zprávu s hodnotou "x", není schopen v této iteraci obnovit ztracené informace, a tudíž datovým uzlům posílá tuto informaci zpět.[9] Hard-decision algoritmus Je založen na výměně informací mezi datovými a kontrolními uzly Tannerova grafu obdobně jako předchozí algoritmus. Na rozdíl od Messagepassing algoritmu ovšem tento algoritmus nepracuje na principu iterativního algoritmu. Díky tomu je jedním z nejjednodušších algoritmů dekódujících LDPC kódy, ovšem jeho výpočetní síla není tak velká. Průběh algoritmu je následující: V prvním kroku všechny datové uzly d i odešlou informaci o přijatém zakódovaném slovu, jenž je obsaženo ve vektoru c, kontrolním uzlům c j, se kterými mají společnou hranu. Dále každý kontrolní uzel c j vypočítá paritu pro každý připojený datový uzel tak, že sečte modulo 2 všech přijatých bitů kromě aktuálního bitu, pro který je počítána parita. Vypočítanou paritu pošlou kontrolní uzly c j zpět datovým uzlům d i. Na závěr je pomocí majoritní logiky rozhodnuto o hodnotě příslušného bitu vektoru c. Bity, ze kterých je rozhodováno o nové hodnotě, se získávají z obdržených 11

2. Korekce chyb v síťových přenosech zpráv od uzlů c j. Navíc je k nim přidána původní hodnota bitu obdržená ve zprávě c. Pomocí Hard-decision algoritmu je možno opravit pouze omezený počet chyb, který je definován vztahem vycházejícím z teorie o blokových kódech: t = d min 1 2 Výhodou tohoto algoritmu může být, že lze proces dekódování přerušit již ve druhém kroku algoritmu, a to v případě, kdy vyjdou všechny paritní součty ekvivalentně. V takovém případě nebyla vlivem přenosu do zakódovaného slova zanesena žádná chyba[12]. Obrázek 2.6: Vizualizace algoritmu message-passing po přijetí zprávy y = [001xxx]. Převzato z [9] 12

Kapitola 3 Dopředná korekce chyb na základě náhodnostního kódování Úkolem této práce bylo vytvořit framework pro dopředné kódování, který bude kódovat data na základě náhodného kódování. Tento způsob kódování má být poté porovnán s již existujícím kodekem, který využívá LDGM kódování. Tato kapitola se zabývá návrhem samotného kódovacího algoritmu, možností, jak generovat náhodná čísla, která jsou v mnou navrženém řešení nezbytná, a také kódováním na vnitřních a vnějších uzlech datové sítě. Ve svém řešení využívám ke kódování dat kontrolní matici o velikosti k m, která obsahuje logické hodnoty 1 na náhodných pozicích. K vytvoření takovéto matice je potřeba vytvořit generátor náhodných čísel, pomocí nějž budeme určovat, na které pozice umístit tyto logické hodnoty. 3.1 Generování náhodných čísel Ve světě počítačů, kde je odjakživa snahou odstranit jakýkoli nedeterminismus, je problém generovat zcela náhodné číselné hodnoty v jistém intervalu složitě řešitelný. Existují v podstatě dva základní přístupy, jak náhodná čísla generovat. Můžeme využívat takzvaných True random number generators (TRNGs, Generátor zcela náhodných čísel), nebo Pseudo-random number generators (PRNGs, Generátor pseudonáhodných čísel). Každý z těchto přístupů má jisté výhody a nevýhody. 3.1.1 True Random Number Generator Při tomto přístupu se snažíme náhodnost extrahovat díky sledování jistého fyzického jevu. Existuje spousta principů, na kterých může být založen tento generátor. Například je možné generovat náhodná čísla z měření šumu v jistém analogovém signálu na základě pohybu myši uživatele, z pohybu elementárních částic nebo měření doby rozpadu radioaktivních částic. Takto generovaná náhodná čísla jsou opravdu náhodná, ale rozložení pravděpodobnosti výskytu jednotlivých hodnot nemusí být rovnoměrné. Navíc generování náhodných hodnot na základě fyzických jevů je oproti pseudonáhodnému generování velice pomalé. 13

3.1.2 Pseudo-Random Number Generator 3. Dopředná korekce chyb na základě náhodnostního kódování Čísla generovaná tímto druhem generátorů nejsou, jak už jejich název napovídá, zcela náhodná. Tyto generátory algoritmicky generují posloupnosti čísel, které jsou pomocí statistických testů nerozlišitelné od náhodných posloupností. Ovšem po určitém množství vygenerovaných čísel se tyto posloupnosti periodicky opakují. Pseudonáhodným generátorům je nutno na začátku předat vstupní data, tzv. random seed (semínko), ze kterého se poté použitím matematických funkcí generují "náhodná"čísla. Existuje velké množství pseudonáhodných generátorů. Mezi nejznámější z nich patří kongruentní generátory (lineární, kvadratické, kubické), Mersenne twister, zpožděné Fibonacciho generátory (LFG) aj. Lineární kongruentní generátory Jedná se o velmi rychlé a docela snadno naprogramovatelné generátory. Jejich základem je matematická funkce ve tvaru: f(x n ) = (a x n 1 + c) mod m Při návrhu lineárního kongruentního generátoru musíme dodržet několik pravidel tak, aby se periodicita, s jakou se budou generovat shodné posloupnosti, co nejvíce blížila k m[13]: Aditivní člen c musí být nesoudělný s modulem m a - 1 je násobkem každého prvočísla, které dělí modul m a - 1 je násobkem 4, pokud i modul m je dělitelný 4 X 0 může být libovolné přirozené číslo Volba správných konstant je u návrhu lineárních kongruentních generátorů naprosto klíčová. V opačném případě totiž dochází k periodickému opakování stejných členů velmi často, tudíž nedochází k rovnoměrnému rozložení generovaných čísel v celém generovaném intervalu. Zpožděné Fibonacciho generátory Zpožděné Fibonacciho generátory (Lagged Fibonacci generators, LFG) jsou odvozené od lineárních kongruentních generátorů. Vyznačují se tím, že perioda opakování je u nich velmi dlouhá a jsou velmi rychlé. Jsou založeny na Fibonacciho posloupnosti. Základní funkce, podle které generují pseudonáhodná čísla je ve tvaru: n x = n x p n xq (modm) 14

3. Dopředná korekce chyb na základě náhodnostního kódování kde p a q jsou koeficienty zpoždění, pro které platí, že p > q a je libovolná binární operace, např. sčítání, odčítání, násobení nebo bitová operace exclusive OR (XOR) nad oběma členy. Tato metoda vyžaduje uchování p předchozích vygenerovaných hodnot v tzv. opožděné tabulce. Pro to, aby byla perioda co nejdelší, je důležité vhodně zvolit parametry p, q, m[14], kde m se většinou volí jako m = 2 n. Perioda těchto generátorů také závisí na zvolené binární operaci. Mersenne Twister V dnešní době jsou lineární kongruentní algoritmy nahrazovány mnohem kvalitnějšími a rychlejšími generátory tzv. Mersenne twister generátory. Ty byly vyvinuty v roce 1997 Makoto Matsumotou a Takuji Nishimuraou. Perioda těchto generátorů je obrovská, což je jejich výhodou ale zároveň i nevýhodou. U běžně používaného generátoru Mersenne Twister MT19937 je jeho perioda 2 1 9937 1. Při potřebě takto vysoké periody generování náhodných čísel vykazuje MT generátor velmi dobré vlastnosti co se týká rovnoměrnosti rozložení generovaných čísel, kdežto u nižších period např. 2 3 2, která zcela postačuje v mé práci, má naopak velmi špatné výsledky. 3.2 Popis průběhu kódování Mnou navržený algoritmus provádí kódování na vnějších uzlech datové sítě. Jako vnější uzel sítě v mém případě slouží platforma Ultragrid, která je vyvíjena Laboratoří pokročilých síťových technologií Fakulty informatiky Masarykovy univerzity Sitola a CESNETem. Video frame, který je vytvořen programem Ultragrid, je zabezpečen redundantními informacemi, pomocí nichž je poté v případě poškození možné frame zrekonstruovat. Tyto redundantní informace jsou vytvořeny na základě náhodného kódování, které bude popsáno níže. Takto zabezpečený frame je poté rozdělen na datové pakety. Pakety jsou následně opatřeny hlavičkami nižších síťových vrstev a odeslány příjemci. Kódování na straně odesilatele i příjemce probíhá na základě kódovacích matic, které mají na obou stranách stejné rozměry. Logické hodnoty 1 jsou do matic generovány za pomocí lineárního kongruentního generátoru. Jelikož jsou logické jedničky generovány do matic na obou komunikujících stranách stejnými generátory náhodných čísel, které mají i svoji počáteční hodnotu (seed) shodnou, jsou kódovací matice shodné. Díky tomu se dá docílit správného kódování a dekódování na různých místech sítě a není potřeba k datům přidávat nadbytečné informace o kódovací matici, které by snižovaly efektivitu datového přenosu. 15

3. Dopředná korekce chyb na základě náhodnostního kódování 3.3 Kódování na vnějších uzlech sítě K tomuto kódování dochází díky algoritmu, který je zahrnutý do systému Ultragrid. Při kódování na vnějších uzlech můžeme potřebné úkony rozdělit na několik částí: Tvorba kódovací matice Kódování datových framů Dekódování datových framů 3.3.1 Kódovací matice Algoritmus kódování probíhá za pomoci kódovací matice, která je vytvořena před samotným kódováním dat. Této dvourozměrné matici jsou dány rozměry, a poté je využit jeden ze způsobů, jak matici náhodně vyplnit logickými hodnotami 1. Rozměry matice k m určují, jakým způsobem se bude datový frame zabezpečovat a jaké množství redundantní informace bude k framu přidáno. Parametr k (počet sloupců matice) udává, na kolik dílů bude vstupní datový frame dělen a parametr m (počet řádků matice) říká, kolik paritních dílů bude k datům přidáno. Při dělení datového framu na k dílů platí, že všechny díly musí být stejně dlouhé, tudíž poslední datový díl každého framu musí být doplněn v případě potřeby o padding. Po vytvoření nulové matice o velikosti k m jsou do ní vygenerovány pomocí lineálního kongruentního generátoru logické hodnoty 1. Lineární kongruentní generátor jsem zvolil proto, že generování hodnot je velice rychlé a při použité periodě 2 1 6, která v našem případě zcela dostačuje, má i velice rovnoměrné rozdělení pravděpodobnosti, kam se budou jedničky generovat. Matice je jedničkami vyplněna jedním z dále popsaných způsobů. Každý z těchto způsobů má jisté výhody a nevýhody. Při testování se pokusíme zjistit, který z nich je pro praktické využití nejvhodnější. Generování na zcela náhodné pozice v matici Při tomto způsobu je algoritmu předán přesný počet jedniček, který se má do matice vygenerovat. Volba počtu logických hodnot 1 je pro výkon kódování klíčová. Pokud bude jedniček v matici velmi málo, je velmi pravděpodobné, že některé datové díly budou velmi slabě zabezpečeny, nebo dokonce nebudou zabezpečeny redundantními informacemi vůbec. V případě, že bude zvolen velmi vysoký počet jedniček, bude naopak kódování velmi pomalé, jelikož se při výpočtu bude muset provádět velké množství operací exclusive or. Tyto hodnoty jsou do matice generovány tak, že jsou generátorem vždy vygenerována 2 náhodná čísla a a b. Souřadnice x v matici je poté vypočítána jako a mod k a souřadnice y jako b mod m. V případě, že už daná pozice obsahuje logickou 1, jsou vygenerovány obě souřadnice znovu. Jelikož chceme, aby každý přidaný zabezpečovací díl nesl užitečnou informaci, je při generování náhodné matice přidána kontrola, jestli každý řádek matice obsahuje aspoň 16

3. Dopředná korekce chyb na základě náhodnostního kódování na dvou pozicích logickou hodnotu 1. V případě, že tomu tak není, a ke generování zbývá už právě tolik hodnot, v kolika řádcích tyto 1 chybí, jsou jedničky generovány už pouze do řádků matice, které obsahují méně než 2 jedničky. I v tomto případě jsou ovšem generovány na náhodné pozice v těchto řádcích kódovací matice. U tohoto způsobu generování náhodné matice se může stát, že některý řádek kódovací matice bude obsahovat velké množství logických hodnot 1, tudíž bude zabezpečovat velké množství datových dílů, ovšem dekódování pomocí tohoto dílu bude nejspíš velice pomalé, jelikož bude potřeba provést velké množství operací XOR. Navíc je možné, že tento zabezpečující díl nebude pro rekonstrukci datového dílu nikdy použit, jelikož nebude mít dostatek validních dat. Náhodný počet 1 ze zadaného intervalu v každém řádku matice Tomuto algoritmu jsou předány dvě hodnoty. Jedná se o maximální a minimální počet jedniček na řádku. Pro každý řádek matice je poté generátorem pseudonáhodných čísel vygenerováno číslo, které je vyděleno hodnotou o jedna větší, než je maximální počet jedniček na řádku. V případě, že zbytek po dělení spadá do intervalu mezi maximální a minimální počet jedniček v řádku, bude do příslušného řádku poté vygenerován tento počet jedniček. Pokud zbytek po dělení do intervalu nespadá, je generátorem vygenerovaná nová hodnota a proces se opakuje. Jedničky jsou poté na jednotlivé řádky generovány znovu na náhodné pozice podobně jako v předchozím algoritmu. Jedná se tedy znovu o náhodný algoritmus, ovšem pouze v rámci jednotlivých řádků kódovací matice. Motivací k vytvoření tohoto algoritmu bylo to, že při zcela náhodném generování celé kódovací matice může nastat případ, kdy některé řádky kódovací matice, tudíž některé zabezpečovací díly výstupního framu, nesou velké množství informace, ale výpočet podle těchto řádků je poté velice pomalý. Naopak jiné řádky matice mohou být víceméně zbytečné, jelikož nemusí nést téměř žádnou informaci. Tímto způsobem jsme schopni sami si určit, jak moc velký rozdíl v počtu jedniček na jednotlivých řádcích kódovací matice chceme a tím určit míru informace, kterou každý zabezpečující díl ponese. Na druhou stranu při volbě velmi širokého rozpětí mezi maximálním a minimálním počtem jedniček na řádku jsme schopni otestovat, jestli tato varianta, kdy některý kontrolní díl zabezpečuje třeba polovinu datových dílů a jiný jen minimum, nebude v některých případech výhodnější. V kapitole měření bude poté tato varianta důkladně otestována. Při analýze výsledků bude rozebráno, jak jednotlivé šířky intervalů ovlivňují výpočetní schopnost algoritmu a jaký má na něj vliv průměrný počet hodnot 1 v řádku. Náhodný počet 1 ze zadaného intervalu v každém sloupci matice Jako v předchozím případě jsou algoritmu předány hodnoty maximálního a minimálního počtu jedniček, nyní ovšem v jednotlivých sloupcích kódovací matice. Přesný počet jedniček v jednotlivém sloupci je poté počítán úplně stejným způsobem, znovu 17

3. Dopředná korekce chyb na základě náhodnostního kódování s využitím generátoru pseudonáhodných čísel a jedničky jsou poté generovány na náhodné pozice v rámci daného sloupce matice. Tento algoritmus byl vytvořen proto, že u předem zmíněných algoritmů pro generování matice mohlo dojít k případu, kdy některé datové díly framu nebyly proti ztrátě vůbec zabezpečeny. U tohoto algoritmu si zvolíme minimální počet kontrolních dílů (minimální počet jedniček ve sloupci), které budou daný datový díl zabezpečovat. Díky tomu můžeme otestovat, jaké bude optimální zabezpečení dat při různých ztrátách při datovém přenosu. 3.3.2 Algoritmus kódování Při kódování se využívá už dříve zmíněná kódovací matice, která byla vytvořena jedním z algoritmů. Při kódování je k datovému framu přidávána FEC hlavička, která má velikost 8 byte. V této hlavičce se vyskytuje informace o velikosti původního datového framu v bytech a o tom, kolik řádků z kódovací matice je při kódování použito. Datový frame je rozdělen na k stejně dlouhých dílů, ke kterým se poté dopočítává m paritních dílů. Algoritmus kódování je velice jednoduchý. Každý paritní díl se vypočítá jako binární funkce XOR (exclusive disjunction) těch datových dílů, na jejichž pozicích se v kódovací matici vyskytují hodnoty logických jedniček v příslušném řádku, který odpovídá danému paritnímu dílu. Velikost výsledného framu po zakódování je následující: F = k m D D = H+f k F D f H - velikost framu po kódování - velikost jednoho dílu - velikost datového framu - velikost hlavičky 3.3.3 Algoritmus dekódování Algoritmus dekódování, při kterém se snažíme obnovit ztracené datové díly, je oproti kódování výpočetně i časově velice složitá operace. V mnou navrženém algoritmu probíhá rekonstrukce ztracených dat na základě porovnávání dvou grafů. Před samotným dekódováním je vytvořen tzv. kontrolní graf G c. Jedná se o grafovou reprezentaci kódovací matice. Tento graf je využíván při dekódování všech přijatých datových framů, není tedy vytvářen pro každý frame zvlášť. Kontrolní graf obsahuje k datových uzlů d c a m kontrolních uzlů c c, které jsou propojeny hranami tak, že hrana z uzlu 18

3. Dopředná korekce chyb na základě náhodnostního kódování Obrázek 3.1: Porovnání kontrolního grafu G c a grafu G a vytvořeného pro dekódovaný frame, v případě, že se při přenosu ztratil datový díl č.2 a 3 d c do uzlu c c vede právě tehdy, kdy se v kódovací matici na souřadnicích d,c vyskytuje logická hodnota 1. Dekódování každého framu probíhá tak, že se vytvoří graf G a, který odpovídá aktuálně dekódovanému framu. Tento graf má stejně jako kontrolní graf k datových uzlů d a a m uzlů kontrolních c a. Hrana mezi uzly d a a c a se v grafu právě dekódovaného framu vyskytuje jen tehdy, obsahuje-li kontrolní graf také tuto hranu. Zároveň musí platit, že data, která se vyskytují ve framu na pozici, které odpovídá uzlům d a a c a, byla správně přijata. Informaci o tom, které části framu byly přijaty dostává dekodér v datové struktuře od Ultragridu. Po vytvoření grafu G a pro aktuální frame poté probíhá samotné dekódování. To probíhá iterativním způsobem. V každé iteraci se postupně prochází kontrolní uzly aktuálního a kontrolního grafu. V případě, že je stupeň kontrolního uzlu u aktuálního grafu G a právě o jedna menší, než stupeň odpovídajícího kontrolního uzlu v kontrolním grafu G c, jsme schopni zrekonstruovat chybějící datový díl, který patří na místo chybějící hrany. Rekonstrukce dat probíhá zase podobným způsobem, jako jejich kódování. Data získáme tak, že provádíme binární operaci XOR dat, která odpovídají datovému dílu kontrolního uzlu spolu se všemi datovými díly, které jsou reprezentovány sousedy daného kontrolního uzlu grafu G a. Poté jsou do aktuálního grafu G a přidány všechny hrany, které obsahuje kontrolní graf G c a které vychází z dopočítaného datového dílu a jsou aktualizovány stupně jednotlivých uzlů grafu G a. Výpočet dekódovacího algoritmu může skončit několika způsoby: Dojde počet iterací - V takovém případě je výpočet framu ukončen, tato možnost ovšem nastává velmi zřídka. Většinou při velmi velkých ztrátách v datových paketech. V předcházející iteraci nedošlo k žádné změně - V tomto případě jsme nebyli schopni najít žádný kontrolní uzel, který by byl schopný obnovit další datový díl. Nebyli jsme tudíž schopni zrekonstruovat celý datový frame. K tomuto výsledku 19

3. Dopředná korekce chyb na základě náhodnostního kódování může dojít v případě, že chybělo příliš velké množství datových dílů, nebo naše kódovací matice měla špatné parametry. Kontrolní i aktuální graf jsou shodné - V tomto případě jsme byli schopni zrekonstruovat celý datový frame. Celý algoritmus je samozřejmě zabezpečen proti případu, kdy jsou porušena kontrolní data. V takovém případě jsou kontrolní uzly, ke kterým tato porušená data patří, z rekonstrukce dat vyloučeny. V opačném případě by rekonstrukce dat pomocí chybných kontrolních dat přinášela chybné výsledky. 3.4 Kódování na vnitřních uzlech sítě Jednou z výhod, kterou by mohlo přinést náhodné kódování, je překódování dat na vnitřních uzlech datové sítě. Kódování na vnitřních uzlech probíhá s využitím paketového zrcadla RUM2, které přijímá datové pakety, a aplikace pro samotné kódování na vnitřních uzlech. Toto paketové zrcadlo umožňuje přijímání a přeposílání datových paketů na různé porty, a také zpracování jednotlivých paketů, autentizaci uživatelů, logování celé aplikace aj. Jelikož práce na vnitřních uzlech probíhá na paketové úrovni, je zde potřeba provést další operace před samotným kódováním dat. Podnětem pro kódování na vnitřních uzlech sítě může být případ, kdy na vstupní lince do vnitřního uzlu je jiná ztrátovost, než na lince z vnitřního uzlu na uzel výstupní. V takovém případě by bylo vhodné využít jiné množství redundantních informací. Tzn. aby se data překódovala pomocí jiného počtu řádků kódovací matice. Tato operace by mohla přinést úsporu ve využité šířce pásma v případě, kdy je na obou linkách velmi odlišná ztrátovost datových paketů, jelikož na méně ztrátové lince by nemusel být počet redundantních datových dílů tak velký. Nevýhodou této varianty ovšem je, že musí dojít k dalšímu překódování dat a tudíž dalším náročným výpočtům. 3.4.1 Práce paketového zrcadla RUM2 Paketové zrcadlo slouží v tomto případě jako prostředník, který přijímá datové pakety z vnějších uzlů a přeposílá je programu, kde probíhá překódování. Po překódovaní jsou pakety poslány zpět zrcadlu, které je odešle na druhý koncový uzel. Schéma práce s daty je možné vidět na obrázku 3.2 Paketové zrcadlo RUM2 je složeno z modulů, které na sebe navzájem navazují. Nastavení vlastností těchto modulů a jejich interakce mezi sebou jsou řízeny pomocí protokolu RAP - Reflector Administration Protocol. Jedná se o textový protokol, který pracuje na bázi zasílání request/response zpráv. Reflektor v tomto nastavení pracuje tak, že je spuštěn modul network listener, který naslouchá na určeném portu. Tento modul má za úkol přijímat UDP pakety a uložit přijatá data do sdílené paměti, kde čekají na své další zpracování. Z této sdílené paměti jsou 20

3. Dopředná korekce chyb na základě náhodnostního kódování Obrázek 3.2: Schéma práce s daty na vnitřním uzlu sítě. data vyzvednuta modulem processor. Tento modul posílá data přes vytvořenou datovou rouru programu Rumcode, kde probíhá samotné zpracování paketů. Po zpracování v programu jsou pakety opět poslány tomuto modulu a uloženy do sdílené paměti. Následně jsou pakety poslány zpět do sítě pomocí modulu packet scheduler/sender[15]. 3.4.2 Aplikace pro kódování na vnitřních uzlech Tento program slouží k vytvoření datových framů z přijatých paketů. Tyto datové framy jsou následně zkontrolovány a v případě, že některé části framu chybí, jsou tyto ztracené části dopočítány. Datový frame je poté odeslán v podobě paketů zpět paketovému zrcadlu. Aplikace tedy provádí několik operací, které jsou k překódování na vnitřních uzlech nezbytné: Vytvoření kódovací matice Tvorba framu z přijatých RTP paketů Tvorba informace o přijatých částech datového framu Dekódování a kódování Odeslání dat Tvorba kódovací matice a kontrolního grafu Proces tvorby kódovací matice je shodný jako u kódování na vnějších uzlech. Je potřeba zajistit, aby matice byla shodná s tou, pomocí které byla data zakódována na vnějším uzlu. Využívá se tudíž totožný lineární kongruentní generátor jako na vnějších uzlech, který musí být inicializovaný stejnou počáteční hodnotou seed. Jelikož na vnitřním uzlu dochází jak ke kódování, tak i k opačné operaci, je třeba vytvořit i kontrolní graf G c. Postup tvorby tohoto grafu je i zde shodný, jako na vnějších uzlech sítě 3.3.3. 21

Tvorba framů z přijatých paketů 3. Dopředná korekce chyb na základě náhodnostního kódování RTP paket Aplikace pro kódování na vnitřních uzlech dostává data ve formě Real-time Transport Protocol paketů (RTP). Základní formát těchto paketů je popsán v RFC 3550. Tyto pakety obsahují hlavičku, která má minimální velikost 12 bytů, může ovšem obsahovat i rozšířenou verzi. Ultragrid, který se využívá na vnějších uzlech, používá RTP hlavičku s proměnnou délkou, tudíž zde bude popsána právě tato varianta. V RTP hlavičce jsou obsaženy důležité informace, díky nimž jsme schopni z datových paketů rekonstruovat zpět celé datové framy. Ultragridem používaná hlavička RTP paketu obsahuje tyto informace[16]: V (Version): Verze RTP protokolu. Podle specifikace Ultragridu je využívána verze 2. P (Padding): Udává, zda paket obsahuje na konci doplňující bity - padding. Délka paddingu je v kladném případě uložena v posledním bytu datového paketu. X (Extension): Udává, zda hlavička obsahuje rozšíření. Nastaveno na 0, jelikož žádné další rozšíření RTP hlavičky Ultragrid nevyužívá. CC (CSRC count): Udává počet CSRC itentifikátorů následujících hlavičku. M (Marker): Značkovací bit. Je využit k označení posledního paketu, který patří do framu. PT (Payload type): Označuje typ paketu. Sequence number: Sekvenční číslo paketu, je zvyšované o jedna s každým odeslaným paketem. Může být využité k detekování ztracených paketů. RTP timestamp: Časová značka. SSRC (Synchronization source identifier): Identifikuje synchronizační zdroj. Tento identifikátor by měl být náhodný a v rámci jednoho přenosu dat jedinečný. CSRC (Contributing source identifiers): Identifikuje zdroje datového paketu v případě, že byl paket vygenerován více než jedním zdrojem. Nejdůležitějšími částmi hlavičky jsou sekvenční číslo daného paketu (sequence number), jeho časová značka (RTP timestamp), označení posledního paketu ve framu (Marker) a informace o tom, zda byla na konec paketu přidána jistá výplň - padding. Datové framy jsou identifikovány tak, že každý frame má svoji unikátní časovou značku. Ta je shodná pro všechny pakety, ze kterých je daný frame poskládaný. Každý paket má poté unikátní sekvenční číslo, které se s každým odeslaným paketem o jedna zvyšuje. 22

3. Dopředná korekce chyb na základě náhodnostního kódování Obrázek 3.3: Schéma RTP hlavičky. Doba čekání na pakety Jelikož jsou přijímanými daty packety obsahující real-time video, je potřeba, aby byly datové framy konstruovány na vnitřních uzlech co nejdříve. Po přijetí prvního paketu, který patří určitému framu, tedy začíná běžet doba, po kterou se bude čekat na další pakety, které tomuto framu náleží, tzv. timeout. Tato doba by měla být nastavena stejně, jako je tomu na vnějších uzlech, aby nedocházelo ke zbytečnému zpožďování dat. Po uplynutí této doby je frame předán k dalšímu zpracování. V případě, že přijde další paket náležící již zpracovávanému (dekódovanému) framu, je tento paket zahozen. Tvorba informace o přijatých částech framu Po vytvoření datového framu, který se má opravit, je potřeba před samotným dekódováním a následným kódováním nejprve zjistit, které části framu jsme v pořádku přijali, a které se ztratily. Za ztracené se považují i ty pakety, které přišly poškozené, jelikož byly zahozeny kvůli kontrole algoritmů nižších síťových vrstev (kontrola CRC na transportní vrstvě aj.), nebo byly přijaty programem příliš pozdě a nebyly už proto zařazeny do framu, ke kterému patří. K uchování informace, které části datového framu byly řádně přijaty, se musí vytvořit datová struktura spojeného seznamu, která je předávána dekódovacímu algoritmu. Do této struktury se přidá záznam z každého přijatého paketu. Tento záznam pro každý paket obsahuje informaci, kam do datového framu zařadit jeho užitečná data (payload) a jak jsou tato data dlouhá. Po vytvoření této struktury jsme tedy schopni zjistit, které datové díly nám v daném framu chybí. Dekódování a kódování Po složení datového framu z přijatých paketů mohou nastat dvě možnosti: Datový frame jsme přijali celý - V tomto případě není potřeba data dekódovat. Pokud není na vnitřním uzlu nastaveno, že se mají data překódovat podle jiného počtu řádků kódující matice, mohou být data okamžitě rozdělena zpět do datových paketů a předána zpět paketovému zrcadlu. V opačném případě jsou redundantní data smazána, je spuštěn proces kódování, který využívá jiný počet řádků kódovací matice, tzn. vytvoří se jiný počet redundantních dílů. 23