Zpracování multimediálních dat

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

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

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

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

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

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

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

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

1 Mnohočleny a algebraické rovnice

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

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

1 Mnohočleny a algebraické rovnice

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

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

Báze a dimenze vektorových prostorů

1 Co jsou lineární kódy

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

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

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

Úvod do teorie informace

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

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

Věta o dělení polynomů se zbytkem

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

Základní pojmy teorie množin Vektorové prostory

Samoopravné kódy, k čemu to je

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

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

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

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

1 Řešení soustav lineárních rovnic

Lenka Zalabová. Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita. zima 2012

Cyklické kódy. Alena Gollová, TIK Cyklické kódy 1/23

Matematická analýza pro informatiky I. Limita funkce

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

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

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

15. Moduly. a platí (p + q)(x) = p(x) + q(x), 1(X) = id. Vzniká tak struktura P [x]-modulu na V.

Cyklické kódy. Definujeme-li na F [x] n sčítání a násobení jako. a + b = π n (a + b) a b = π n (a b)

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

0.1 Úvod do lineární algebry

Informace, kódování a redundance

Matice. a m1 a m2... a mn

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

z = a bi. z + v = (a + bi) + (c + di) = (a + c) + (b + d)i. z v = (a + bi) (c + di) = (a c) + (b d)i. z v = (a + bi) (c + di) = (ac bd) + (bc + ad)i.

II. Úlohy na vložené cykly a podprogramy

Operace s maticemi. 19. února 2018

Lineární algebra Operace s vektory a maticemi

Uspořádanou n-tici reálných čísel nazveme aritmetický vektor (vektor), ā = (a 1, a 2,..., a n ). Čísla a 1, a 2,..., a n se nazývají složky vektoru

1 Vektorové prostory.

Matematika 2 pro PEF PaE

Způsoby realizace této funkce:

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Náhodný vektor a jeho charakteristiky

Složitost Filip Hlásek

Zpráva o průběhu přijímacího řízení na vysokých školách dle Vyhlášky MŠMT č. 343/2002 a její změně 276/2004 Sb.

Lineární algebra : Lineární prostor

Číselné charakteristiky a jejich výpočet

Vektorový prostor. Př.1. R 2 ; R 3 ; R n Dvě operace v R n : u + v = (u 1 + v 1,...u n + v n ), V (E 3 )...množina vektorů v E 3,

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

Mikroprocesorová technika (BMPT)

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

Lineární algebra : Báze a dimenze

ALGEBRA. Téma 5: Vektorové prostory

2. Určete jádro KerL zobrazení L, tj. nalezněte alespoň jednu jeho bázi a určete jeho dimenzi.

Matematika 1 MA1. 2 Determinant. 3 Adjungovaná matice. 4 Cramerovo pravidlo. 11. přednáška ( ) Matematika 1 1 / 29


(Cramerovo pravidlo, determinanty, inverzní matice)

Algoritmizace a programování

ANALYTICKÁ GEOMETRIE V ROVINĚ

označme j = (0, 1) a nazvěme tuto dvojici imaginární jednotkou. Potom libovolnou (x, y) = (x, 0) + (0, y) = (x, 0) + (0, 1)(y, 0) = x + jy,

Bakalářská matematika I

Základy matematické analýzy

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

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

Pomocný text. Polynomy

Dělitelnost čísel, nejmenší společný násobek, největší společný dělitel

VEKTORY. Obrázek 1: Jediný vektor. Souřadnice vektoru jsou jeho průměty do souřadných os x a y u dvojrozměrného vektoru, AB = B A

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

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

cv3.tex. Vzorec pro úplnou pravděpodobnost

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

1 Linearní prostory nad komplexními čísly

Algebraické struktury s jednou binární operací

)(x 2 + 3x + 4),

Matematika B101MA1, B101MA2

Regulární matice. Věnujeme dále pozornost zejména čtvercovým maticím.

Hammingův odhad. perfektní kódy. koule, objem koule perfektní kód. triviální, Hammingův, Golayův váhový polynom. výpočet. příklad

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

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ů:

Matematická logika. Miroslav Kolařík

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

grupa těleso podgrupa konečné těleso polynomy komutativní generovaná prvkem, cyklická, řád prvku charakteristika tělesa

0.1 Úvod do lineární algebry

Soustavy lineárních rovnic

[1] Definice 1: Polynom je komplexní funkce p : C C, pro kterou. pro všechna x C. Čísla a 0, a 1,..., a n nazýváme koeficienty polynomu.

Lineární algebra : Násobení matic a inverzní matice

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Teorie informace: řešené příklady 2014 Tomáš Kroupa

Transkript:

VŠB - Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky Zpracování multimediálních dat Semestrální práce Cyklické kódy 27, kop173

Obsah : 1. ÚVOD... 1 2. KÓDOVÁNÍ... 2 3. CYKLICKÉ KÓDOVÁNÍ... 3 3.1 LINEÁRNÍ KÓDOVÁNÍ... 3 3.2 PRINCIP CYKLICKÉHO KÓDOVÁNÍ... 3 3.3 HARDWAROVÁ REALIZACE CYKLICKÝCH KÓDŮ... 4 3.4 SOFTWAROVÁ REALIZACE CYKLICKÝCH KÓDŮ... 5 3.5 IMPLEMENTACE CRC-32... 6 3.6 CHYBOVÉ CHARAKTERISTIKY CRC... 7 3.7 CYKLICKÉ KÓDOVÁNÍ VS. POČÍTAČOVÁ TECHNIKA... 8 4. SHRNUTÍ... 1

Úvod 1. Úvod Cílem tohoto referátu by mělo být seznámení čtenářů s pojmem cyklické kódy. K čemu a proč se tyto kódy vlastně používají? Na úvod jen připomeňme, že se těmto kódům také říká CRC kódy. Ano pod tímto názvem jsou známější a používají se výhradně jako tzv. detekční kódy, které mají za úkol odpovědět na otázku Jsou přenesená data poškozená, či nikoli?". Odpověď poskytovaná detekčními kódy není nikdy absolutně spolehlivá, protože každému detekčnímu kódu může něco uniknout". Nejlépe jsou na tom ale právě tyto CRC kódy, jejichž spolehlivost se ideálnímu stavu blíží nejvíce. Analogicky je základní princip jejich využití takový, že odesilatel aplikuje na odesílaná data algoritmus, na kterém je dohodnut s příjemcem, a který vyplývá z povahy detekčního kódu. Výsledkem je pak zabezpečovací údaj, který odesilatel přišpendlí" k původním datům, a odešle je příjemci. Ten aplikuje na přijatá data přesně stejný algoritmus, a výsledek porovná se zabezpečovacím údajem, který obdržel od odesilatele. Jde-li například o zabezpečení kontrolním součtem, spočívá zmíněný algoritmus v prostém sečtení jednotlivých datových bytů či slov, chápaných pro tento účel jako čísla, a zabezpečovacím údajem je pak výsledný součet. CRC kódy jsou podtřídou kódů lineárních a než si o nich něco řekneme, podíváme se v dalších kapitolách na to co je to vůbec pojem kód a kódování dat, jaké podmínky musí kódování splňovat. Dále si upřesníme jak se CRC kódy počítají, podíváme se na hardwarovou a softwarovou realizaci těchto kódů, ukážeme si vztah cyklických kódů k výpočetní technice a naznačíme, jak by mohla vypadat jejich implementace. - 1 -

Kódování 2. Kódování Každý z Vás se určitě už setkal s pojmem kódování dat. Představme si případ, kdy potřebujeme data zakódovat. Například při jejich přenosu, kdy si tyto data někdo odchytí a neoprávněně se snaží zjistit jejich obsah. Existuje mnoho algoritmů, které toto dokáží různými způsoby realizovat. Kódy můžeme rozdělit do tří základních skupin na nejkratší (optimální) kódy, bezpečnostní kódy (detekční kódy, samoopravovací kódy) a na kódy speciální (čárové kódy, alfanumerické kódy, číselné kódy). Jednoduchý princip kódování dat je zachycen na obrázku 1. Kódování dat má ale použití také v dalších velmi důležitých odvětvích telekomunikační a výpočetní techniky. Jedním takovým odvětvím je komprese dat. Můžeme říct, že komprese dat je podtřídou kódování dat. Principem komprese dat je, že se hledá nejkratší kód, který by zabral méně místa, než data původní. Tento referát se ale bude zabývat cyklickými kódy (neboli CRC kódy), které spadají do skupiny kódů bezpečnostních a podtřídy detekčních. Nejdříve si ale uveďme definici toho, co to kódování je, a jaké musí splňovat požadavky. Kód K je trojice ( S C, f ),, kde S je konečná množina zdrojových jednotek zvaná zdrojová abeceda, C je množina kódových jednotek zvaná kódová abeceda a f je zobrazení S C. Zobrazení f přiřazuje každé kódové jednotce z S právě jedno kódové slovo (sekvenci C. Zobrazení f musí být injektivní. To znamená, že nikdy nezobrazuje kódových jednotek) z dvě různé kódové jednotky na stejná kódová slova. Většinou u kódování vyžadujeme tzv., jednoznačnost dekódování. Kód K je jednoznačně dekódovatelný, právě když pro každý řetězec takový, že platí ( X ) Y kódování cyklické. Y C existuje nejvýše jeden řetězec X S f. Nyní se ale už pojďme podívat na vybraný druh kódování, a to Obrázek 1 - Princip kódování dat - 2 -

3. Cyklické kódování 3.1 Lineární kódování Již v předchozí části jsme se zmínili, že cyklické kódy patří do skupiny kódů lineárních. Dříve než se pustíme do detailního objasnění cyklických kódů, připomeňme si ve zkratce, co jsou to kódy lineární. Kódové slovo chápeme jako řádkový vektor v = [ 1]. Lineární kombinací libovolného počtu kódových slov vznikne opět kódové slovo (odtud pojem lineární kódování). Kód se nejčastěji popisuje pomocí tzv. generující matice, kterou tvoří báze kódů : 3.2 Princip cyklického kódování 1 1 1 1 G = ; 1 1 1 v = z G Analogicky jako u kódů lineárních také u kódu cyklických vznikne cyklickým posunem znaků kódového slova opět slovo kódové. Kromě generující matice můžou být popsány generujícím polynomem. My se v tomto referátu omezíme právě na tento generující polynom. Realizace cyklického kódování můžeme shrnout do těchto bodů : a) Slovo dělíme generujícím polynomem G (viz tabulka 1) b) Určíme zbytek po dělení c) Zbytek připojíme za informační slovo d) Celé kódové slovo je nyní dělitelné generujícím polynomem beze zbytku Počet kontrolních bitů 8 LRCC-8 z 8 1 Označení Generující polynom použití. Kontrolní Byte je součet datových Byte modulo2 12 CRC-12 12 11 3 2 z 1 Používá se pro šestibitové znaky 16 LCRC-16 z 16 1 Kontrolní součet dvojic Byte modulo2 16 CRC-16 16 15 2 z 1 Binární synchronní protokol 16 CRC-16 reverzní 16 z 14 1 16 SDLC 16 12 z 5 1 Linkový protokol IBM 16 SDLC reverzní 16 11 4 z 1 32 CRC-32 z z z 32 12 5 4 26 11 2 23 1 8 22 1 Tabulka 1 - Typy CRC kódů 7 16 ETHERNET, HDCL, ZMODEM - 3 -

Pod označením CRC kódy (Cyclic Redundancy Checks) mají tyto kódy velmi velké využití. CRC kódy jsou asi nejznámější kódy. Dříve se používaly hlavně proto, že jejich hardwarová realizace byla velmi rychlá a jednoduchá. Přestože dnes jsou známé jiné kódy, které je možno programovat stejně tak dobře firmwarově i softwarově, jsou CRC kódy doposud velmi populární. Tradiční hardwarová implementace CRC se provádí jednoduše realizovatelnými lineárními zpětnovazebními posuvnými registry, které zpracovávají informaci po jednotlivých bitech. To je vhodné zejména u přenosu dat. V softwarové implementaci je vhodnější pracovat s daty po bytech. Ukážeme si obě varianty realizace CRC kódů. 3.3 Hardwarová realizace cyklických kódů Pro jednoduchost uvažujme dále konkrétní CRC 16 s generujícím polynomem 16 15 2 ( x) = x 1 g s r = 16 kontrolními bity. Všimněme si, že posun zleva doprava v registru znamená násobení obsahu registru proměnnou x a zpětná vazba zajišťuje modulování polynomem g(x). Opravdu, je-li c... 15 c1x c15 polynom odpovídající původnímu obsahu registru, potom po posunu doprava o jednu pozici dostáváme podle obrázku 2 nový obsah v x c =. Tento výraz je roven 15 c x c1 c15 x c2 x... c13 x c14 c15 x 2 3 14 registru ( ) ( ) ( ) 15 x 14 15 16 15 2 ( c c x... c x c x ) c ( x 1) = x c( x) mod g( x) 1 14 15 15 d 1 d, d,, d, což jsme chtěli ověřit. Přidáme-li datové bity k k 2 1 do zpětné vazby podle obrázku 2, vynásobí se r vlastně mocninou x, neboť to odpovídá jejich vstupu na poslední pozici (r=16) registru. V dalších krocích registru se datové bity v jednotlivých buňkách registru násobí postupně vždy proměnnou x, a to tolikrát, kolikrát se s ním registr posune. Zároveň se však výsledek moduluje polynomem g(x), což automaticky provádí zpětná vazba. Jestliže na počátku registr vynulujeme, pak tedy po průchodu posledního datového bitu d r r 1 r k 1 v registru zůstává d x d1x... d k 1x mod g( x) d( x) g( x). Tento výraz není nic jiného než x r mod, tj. přímo CRC podle definice (viz. Softwarová realizace cyklických kódů). CRC se pak z registru jenom přečte a připojí za informační bity. Kódování je tedy velmi jednoduché. Jak jsme viděli, délka informační části může být dlouhá dle libosti. Ovlivňuje se jí ovšem schopnost detekce o doba trvání výpočtu CRC. Výpočet CRC-16 od posloupnosti (111) je uveden v příkladu 1 v části Softwarová realizace cyklických kódů. - 4 -

Obrázek 2 - Hardwarová realizace CRC kódů 3.4 Softwarová realizace cyklických kódů Při softwarové realizaci je možno přesně kopírovat postup hardwarový, nebo využít triku, který nám umožní pracovat přímo s byty (eventuálně s wordy nebo slovy obecné délky). Budeme pracovat v binárním poli, které má pouze dva prvky : a 1. Operace sčítání je definována jako XOR a operace násobení jako AND. Dělení je jednoduché, neboť je definováno jen pro jedničku a to je identita. Binární polynom je potom nám známý tradiční polynom, ale s binárními koeficienty. Každou posloupnost bitů ( a, a1,..., a n ) a n ( x ) = a x a x... a x n můžeme ztotožnit s polynomem 1. Práce s binárními polynomy je stejná jak s polynomy reálnými včetně dělení a násobení, s tím rozdílem, že s koeficienty pracujeme v binárním poli (bude ukázáno na příkladu). Data o k bitech (informační část kódu), ke kterým připočítáme CRC, označme d k 1 = ( d, d1, d k 1 ) a jim odpovídající polynom d ( x) = d d1x... d k 1x vypočítaný CRC o r bitech označíme = CRC( d ) = ( c, c1,..., cr 1 ) r 1 ( x) = CRC( d( x) ) = c c1x... c r 1x část kódu). Výsledné kódové slovo je pak ( v v,..., v ) = ( c, c,..., c, d, d d ). K nim c a jemu odpovídající polynom c (pro jednoduchost CRC nazývejme jen kontrolní kde v, =, 1 n 1 r 1 1,..., k 1 n = k r je celková délka kódu. Tento způsob kódování má tu výhodu, že vlastní informace je v něm obsažena v nezměněné podobě a může proto například odcházet do linky (bit d k 1 jako první). Při vysílání se však postupně dá vypočítávat CRC. Po vyslání celé informační části je CRC již vypočten a může se okamžitě vyslat nebo uložit za ní. Tím pádem také dekódování probíhá stejně přijímá se informační část, průběžně se vypočítává CRC, a po přijetí posledního datového bitu se vypočtený CRC porovnává s přijatým. - 5 -

- 6 - Víme, že k danému r-bitovému CRC existuje generující polynom g ( x) stupně r tak, že každé kódové slovo je jakožto polynomem jeho násobkem : v( x) = mod g( x). Generující polynomy u nejznámějších CRC jsou shrnuty v tabulce 1 (viz. předchozí kapitola). Vyjádříme-li si v x = c c x... c x d x d x... d x ve tvaru r r 1 r k 1 kódové slovo ( ) 1 r 1 r 1 1 r k 1 r r v( x) = c( x) d( x) mod g( x), dostaneme odtud, že c( x) d( x) = mod g( x), tj., že r c( x) = x d( x) mod g( x). CRC tedy můžeme počítat jako zbytek po dělení výrazu x r d( x) generujícím polynomem g ( x). A to se právě výhodně realizuje hardwarově lineárním posuvným registrem, viz. obrázek 2. Příklad 1 : Výpočet CRC -16 dat (111) d x = 1x 2 3 4 5 6 7 Řešení : Konstrukce polynomu ( ) 16 2 3 4 5 6 7 Vypočtěme x r d( x) = x ( 1x ) r Vypočtěme c( x) = x d( x) mod g( x) = x 16 21 23 16 15 2 15 9 8 7 6 mod x 1 = x 23 21 16 16 15 2 ( x ): ( x 1) 23 22 9 7 ( x ) x 22 22 21 8 6 ( x ) x 16 16 15 2 ( x 1) x 15 21 9 9 8 8 16 7 7 9 6 6 7 2 = x 1 = zbytek 7 6 1x 1 1 2 3 2 1 4 6 7 8 9 1 11 12 13 14 15 je polynomem ( x) CRC ( c,...,c 15 ) ( c,..., c, d d ) 5 c. c = je tedy (1111111) a celé kódové slovo má tedy tvar v = : (1111111111). 15,..., 3.5 Implementace CRC-32 7 Výpočet 32-bitového CRC je implementován podle rotace průběžného zbytku a odečítáním kontrolního polynomu. Aby se však výpočet urychlil, a nemusel se vstupní datový tok zpracovávat po bitech, využívá se toho, že je možné vypočítat 32 bitovou konstantu, kterou je třeba XOROVAT průběžný zbytek v případe, že horních 8bitu má určitou hodnotu. Výpočet této konstanty je velmi jednoduchý, stačí pouze předpokládat, že kromě nejvyššího bytu obsahuje

zpráva samé nuly, konkrétně 3 byty nul. Konstanty je nutné postupně spočítat pro všech 256 kombinací horních osmi bytů. Tyto hodnoty se předpočítají pouze jedenkrát na začátku programu a uloží do lookup tabulky. Algoritmus výpočtu CRC (kódování i dekódování) se provádí podle následujícího postupu. Na počátku se průběžný zbytek inicializuje nulovou hodnotou a pro každý byte kódovaného řetězce se provádí následující posloupnost operací. Určí se hodnota nejvyššího bytu průběžného zbytku a průběžný zbytek se posune o 8 bitů doleva. Na nejnižších 8 bitu průběžného zbytku se umístí byte načtený z kódovaného řetězce a průběžný zbytek se VYXORUJE hodnotou z lookup tabulky, jejíž index určuje zapamatovaná hodnota nejvyššího bytu. Příklad zdrojového kódu : crc = ; for (i=; i < len; i) { j = (crc >> 24) & xff; crc = (crc << 8) data[i]; crc = crc ^ tabulka[j]; } //nejvyšší byt (index do tabulky) //posun CRC doleva nový byt Ze zadání je zřejmé, že je nutné vstupní soubor zpracovávat po osmi bytech. Kódování se provádí tak, že za načtených osm bytu se doplní 4 byty nul a z těchto 12 bytu se vypočte CRC. Hodnotou vypočteného CRC, která má velikost 4 byty, se přepíši čtyři byty nul a všech 12 bytu se uloží do výstupního souboru. Dekódování se realizuje po blocích délky 12 bytu. Nad těmito bloky se spočítá CRC, které musí být nyní rovno, neboť původní 8 bytová zpráva byla doplněna o 4 byty zbytku. Pokud je vypočtené CRC různé od nuly, zkouší se postupnou změnou každého bitu na opačnou hodnotu opravit jednochybu. Tato změna se provádí pro každý z 96 bitu. Pokud se v některém případě podaří vypočíst hodnotu CRC rovnou nule, byla detekována chyba, kterou je možné opravit a do výstupního souboru se zapíše správný výstup. V případě, že se nepodařilo testováním jednochybu nalézt, program končí vypsáním chybové hlášky na standardní chybový výstup. Protože se soubor zpracovává po blocích, tak fakt, že nebyl načtený celý blok nám říká, že byl dosažen konec souboru. Nemusí proto být v souboru být uložena jeho délka, neboť v případě kódování očekáváme velikost souboru dělitelnou osmi a v případě dekódování velikost dělitelnou dvanácti. Pokud není velikost dekódovaného souboru dělitelná 12, znamená to, že ani velikost vstupního kódovaného souboru nebyla dělitelná osmi. 3.6 Chybové charakteristiky CRC Schopnosti detekovat chyby jsou u různých součtů CRC podobné a lze je jednoduše vyjádřit pomocí počtu kontrolních bitů r. Všechny stoprocentně detekují libovolnou shlukovou chybu o délce menší nebo rovno r (je to chyba, jejíž krajní bity uvozují, včetně sebe, r-bitový řetězec dat). Ze shlukových chyb, které mají délku r 1, je jich jen 1: 2 r 1 nedetekovatelných a r ze shlukových chyb o délce větších než r 1 CRC nedetekuje jen jednu z 2. U konkrétních CRC lze pak vyvozovat i podrobnější závěry. Například CRC-16, uvažujeme - li délku bloku dat menší než 32751 bitů, detekuje všechny jednoduché, dvojité a trojité chyby a všechny chyby o lichém počtu chybových bitů. Velmi dobrá schopnost detekovat - 7 -

chyby, výhodná hardwarová realizace a teoretická rozpracovanost, umožňující poměrně přesně stanovit detekční vlastnosti, jsou důvodem širokého využívání CRC. Ale přes všechny uvedené pozitivní vlastnosti CRC je jasné, že žádný instrukční soubor známých mikroprocesorů neobsahuje instrukce pro přímou realizaci lineárních posuvných registrů se zpětnou vazbou. Pokud budeme postaveni před úlohu značně urychlit výpočet kódu oproti CRC, budeme se pochopitelně ohlížet zejména po kódech rychle realizovatelných jednoduchými instrukcemi našeho mikroprocesoru. Aritmetické instrukce jsou proto nejvhodnějšími kandidáty na toto použití. Jeden takový kód vznikl koncem 7. let a byl navržen Johnem G. Fletcherem z Lawrence Livermore Laboratory v Kalifornii. Má o málo horší detekční vlastnosti než CRC, ale jeho realizace může být až o jeden řád rychlejší!! Kód se obecně nazývá Fletcherův kontrolní součet (FKS), je to ale celá třída kódů, majících za parametry aritmetický modul a počet kontrolních bytů. Jen ještě jako zajímavost, jeho poslední verze (modul M=255, a počet kontrolních bytů R=2) byla schválena pro použití v transportní vrstvě síťového protokolu ISO. Přestože je standardem a má velmi dobré vlastnosti, není tak dobře znám a používán. To je důvod, proč stojí za to, na něho v tomto referátu upozornit. 3.7 Cyklické kódování vs. počítačová technika Svět počítačů, počítačových komunikací a digitálních přenosů obecně vděčí za svou existenci a za své fungování výsledkům mnoha vědních oborů - nejen fyziky, která stojí za celou technologií výroby součástek, ze kterých jsou dnešní počítače a další aktivní prvky postaveny. Stejně tak vděčí digitální svět za mnohé například i matematice. Velmi pěkným příkladem zde může být používání tzv. cyklických zabezpečovacích kódů (anglicky: Cyclic Redundancy Checks, zkratkou CRC). Jde o kódy, používané k zabezpečení dat při jejich přenosu (nebo i při jakémkoli jejich skladování"), a mají za úkol umožnit detekci případných chyb v těchto datech. Jsou to tedy kódy detekční, podobně jako tzv. parita či kontrolních součty. Analogický je základní princip jejich využití takový, že odesilatel aplikuje na odesílaná data algoritmus, na kterém je dohodnut s příjemcem, a který vyplývá z povahy detekčního kódu. Výsledkem je pak zabezpečovací údaj, který odesilatel přišpendlí" k původním datům, a odešle je příjemci. Ten aplikuje na přijatá data přesně stejný algoritmus, a výsledek porovná se zabezpečovacím údajem, který obdržel od odesilatele. Jde-li například o zabezpečení kontrolním součtem, spočívá zmíněný algoritmus v prostém sečtení jednotlivých datových bytů či slov, chápaných pro tento účel jako čísla, a zabezpečovacím údajem je pak výsledný součet. Spolehlivost zabezpečení pomocí kontrolních součtů ovšem není příliš veliká, a pro mnohé účely nedostatečná. Dostatečnou spolehlivost nabízí až výše avizované cyklické kódy (CRC) - například zabezpečovací údaj, generovaný podle této metody v nejčastěji používaném rozsahu 16 bitů, umožňuje příjemci rozpoznat všechny shluky chybných bitů se stoprocentní jistotou, shluky délky 17 bitů s pravděpodobností 99,9968%, a ostatní chyby s pravděpodobností 99,9984%. Nezní to jako fantazie, nebo dokonce jako nemožnost? Pokud nechcete mému tvrzení věřit a chcete si sami dokázat jeho pravdivost, budete k tomu potřebovat velmi silný matematický aparát, konkrétně aparát algebry, zabývající se okruhy polynomů nad tělesem dimenze 2. Za fungováním cyklických kódů totiž stojí opravdu pokročilá matematika. Pokud ale nejsou tyto partie zrovna vaším koníčkem, vůbec to nevadí. K praktickému používání detekčních mechanismů na bázi cyklických kódů žádný matematický aparát nepotřebujete. Potřebujete pouze velmi konkrétní a ryze praktický návod na to, jak z přenášených - 8 -

dat vyrobit onen zabezpečovací údaj, který pak k datům připojíte a odešlete směrem k příjemci (výpočet je popsáno v kapitole 3.4). Ten pak zase potřebuje vědět, co má s přijatými daty a zabezpečovacím údajem udělat, aby si mohl odvodit zda jsou poškozená, nebo s hodně velkou pravděpodobností nepoškozená. V obou případech přitom stačí prohnat" přenášená data přímo triviálním logickým obvodem, který na straně odesílatele vyrobí zabezpečovací údaj, a na straně příjemce řekne ano či ne. Pokud by vás ale přeci jen zajímalo, na jakém principu zabezpečení cyklickými kódy pracuje, pak se pokusím o maximální možné zjednodušení: odesilatel si data určená k odeslání na chvíli představí jako jedno velké číslo (což není tak těžké, vždyť jde ve své podstatě jen o posloupnost nul a jedniček). Toto číslo pak vydělí jiným číslem, na kterém je s příjemcem domluven. Podíl, který mu vyjde, okamžitě zapomene, ale využije zbytek po dělení - ten připojí k vlastním datům jako zabezpečující údaj, a vše pak odešle. Příjemce pak opakuje stejný postup a dívá se, zda dostal stejný zbytek. Podstatnou roli zde přitom hraje číslo (dělitel), kterým se přenášená data dělí, a na kterém musí být obě strany předem domluveny - toto číslo samozřejmě nemůže být ledajaké (z předchozích částí víme, že jde o generující polynom g(x)). Jeho konkrétní hodnotu lze nalézt jen s využitím onoho silného matematického aparátu, a tentýž aparát je pak třeba i k důkazu toho, že s tímto dělitelem vše funguje s onou výše uvedenou báječnou spolehlivostí, velmi se blížící stu procent. Z konkrétní hodnoty tohoto čísla-dělitele (ve skutečnosti polynomu, resp. tzv. vytvářející mnohočlenu, ale při našem maximálním zjednodušení pouhého čísla) pak přímo vyplývá funkce i struktura jednoduchého (ba přímo triviálního obvodu), který obě strany používají pro praktické generování zabezpečovacích údajů a kontrolu správnosti přenesených dat. - 9 -

4. Shrnutí V tomto referátu jsme se dozvěděli, co jsou to CRC kódy, že spadají do skupiny bezpečnostních detekčních kódů. Ukázali jsme si jednoducho hardwarovou realizaci těchto kódů, která spočívá v lineárním posuvném registru se zpětnou vazbou. Ukázali jsem si, že výpočet takového CRC kódu je jednoduchý, stačí výraz x r d( x) g ( x). Takto dostaneme CRC část kódu c ( x) slovo má potom podobu v = ( c,..., cr 1, d,..., d k 1 ) g ( x) modulujeme polynom x r d( x) modulovat generujícím polynomem, kterou připojíme před informační slovo. Výsledné. Obecně není jedno, jakým polynomem. Pro názornost jsou nejpoužívanější generující polynomy shrnuty v tabulce 1. Pokud by někoho zajímalo ověření správnosti těchto polynomů, bude k tomu potřebovat velmi silný matematický aparát, konkrétně aparát algebry, zabývající se okruhy polynomů nad tělesem dimenze 2. Pro naší potřebu stačí vědět, že generující polynom v nejčastěji používaném rozsahu 16 bitů, umožňuje příjemci rozpoznat všechny shluky chybných bitů se stoprocentní jistotou. Ukázali jsem si také příklad implementace 32-bitového CRC kódu (CRC-32). Ale přes všechny uvedené pozitivní vlastnosti CRC je jasné, že žádný instrukční soubor známých mikroprocesorů neobsahuje instrukce pro přímou realizaci lineárních posuvných registrů se zpětnou vazbou. Tímto bych skončil tento referát o CRC kódech, doufám, že pro Vás čtenáře byl něčím užitečný, a že jste se dozvěděli informace, které jste potřebovali. - 1 -