2.2 Cyklické kódy

Pro zabezpečování přenosu digitálních signálů se nejvíce rozšířily tzv. cyklické kódy označované zkratkou CRC (Cyclic Redundancy Check), které patří k systematickým blokovým kódům. Každý blok k informačních prvků ai se doplní r kontrolními zabezpečovacími prvky ej. Výsledná skupina n = k + r prvků vytváří vysílaný zabezpečený kód bude mít strukturu a_{k - 1}  \cdots a_2 a_1 a_0 e_{r - 1}  \cdots e_2 e_1 e_0.

Při výkladu principů cyklických kódů je výhodné využívat algebry mnohočlenů v binární číselné soustavě. Posloupnost k informačních bitů ai tvořících vysílaný blok zprávy a_{k - 1}  \cdots a_2 a_1 a_0 můžeme vyjádřit mnohočlenem zprávy A(x) stupně (k-1):

A\left( x \right) = a_{k - 1} x^{k - 1}  + a_{k - 2} x^{k - 2}  + {\rm  }...{\rm  } + {\rm a}_{\rm 1} x^1  + a_0 x^0

Informační bity ai tak tvoří jednotlivé řády binárního čísla, které odpovídá zabezpečovanému bloku. Jelikož se prakticky přenášejí a zpracovávají bitové posloupnosti v sériovém tvaru, používá se místo proměnné x vyjádření pomocí symbolu D odpovídajícímu zpožďovacímu členu. Mocniny D představují pořadí symbolu v kódovém slově, tedy násobení D0 odpovídá nulovému zpoždění tj. prvnímu vysílanému bitu, D1 odpovídá zpoždění jedním členem D tj. druhému vysílanému bitu atd. Mnohočlen zprávy A(D) stupně (k-1) pak bude zapsán takto:

A\left( D \right) = a_{k - 1} D^{k - 1}  + a_{k - 2} D^{k - 2}  + {\rm  }...{\rm  } + {\rm a}_{\rm 1} D^1  + a_0 D^0

Tento způsob zápisu budeme dále používat. Zabezpečující skupinu lze zapsat jako mnohočlen následovně:

R\left( D \right) = e_{r - 1} D^{r - 1}  + e_{r - 2} D^{r - 2}  + {\rm  }...{\rm  } + e_{\rm 1} D^1  + e_0 D^0

S bitovými posloupnostmi zapsanými ve tvaru mnohočlenů lze pracovat podle pravidel algebry mnohočlenů, tj. lze je sčítat, násobit, dělit. Výsledek je shodný jako při stejných operacích s dvojkovými čísly.

Při použití cyklických kódů skupinu zabezpečovacích prvků ej resp. odpovídající zabezpečující mnohočlen R(D), získáme na vysílací straně pomocí, tzv. generujícího mnohočlenu G(D).

Abychom získali prostor pro připojení počtu r zabezpečujících prvků ej za informační prvky, přiřadíme k posloupnosti informačních bitů ai nejprve r nulových míst. To odpovídá mnohočlenu vytvořeném součinem

D^r A(D){\rm   = }a_{k - 1} a_1 a_0 {\rm   }\underbrace {0{\rm  }0{\rm  }...{\rm  }0}_r{\rm  }

Tento součin vydělíme generujícím mnohočlenem G(D):

\frac{{D^r A(D)}}{{G(D)}} = P(D) + \frac{{R(D)}}{{G(D)}}

Podíl P(D) nemá další význam. Zajímá nás zbytek tohoto dělení vyjádřený mnohočlenem R(D), který použijeme jako zabezpečující mnohočlen. Může být nejvýše stupně (r-1) neboť dělitel G(D) je stupně r.

Takový postup se na vysílací straně realizuje pro každý jednotlivý blok vysílané zprávy A(D). Mnohočlen zabezpečené zprávy představující vysílanou bitovou posloupnost délky n = k + r tedy bude:

F\left( D \right) = D^r A\left( D \right) + R\left( D \right)

což je mnohočlen stupně [(k - 1) + r]. Tím přidáme zabezpečující bity ej namísto přidaných nulových míst.

Mnohočlen takto zabezpečené zprávy F(D) má významnou vlastnost – je dělitelný generujícím mnohočlenem G(D) beze zbytku. Tato vlastnost je využita na přijímací straně ke kontrole správnosti přijaté zprávy. Na přijímací straně se tedy přijatý blok (D) vydělí daným generujícím mnohočlenem G(D). Bude-li zbytek tohoto dělení nenulový, pak to bude příznakem chyby v přijatém bloku. Bude-li zbytek tohoto dělení nulový, pak se chyba nevyskytla, přitom všem není vyloučen výskyt eventuální nedetekovatelné chyby.

Generující mnohočlen G(D) musí být primitivním mnohočlen stupně r obdobně jako mnohočlen používaný pro skrambler. A stejně jako u skrambleru se používá i ke generování zabezpečení u cyklického kódu posuvný registr.