\chapter{Kódovanie}
	\section{Úvod}
	Kódovanie je proces, ktorý sa používa vo všetkých komunikačných systémoch. Počas prenosu signálu informačným kanálom v~reálnom živote dochádza z~rôznych príčin k~šumu. To znamená, že počas prenosu správy dôjde k~chybe a~prijatá správa je rozdielna od vyslanej. Preto vznikali systémy, ktoré zaistili detekciu vzniknutých chýb, či dokonca ich opravu.  Tieto systémy by sme mohli rozdeliť do dvoch kategórií a to protichybové systémy ARQ (Automatic repeat request), ktoré dokážu chybu iba detekovať. Chyba je opravená opakovaním prenosu. Druhou kategóriou sú systémy FEC (Forward error correction), ktoré sú schopné chybu nielenže detekovať, ale následne aj opraviť bez opakovania prenosu. V~tejto kapitole si priblížime blokové a konvolučné kódy. Tieto kódy sú využívané ako prostriedok realizácie v systémoch FEC \cite{lit7}.

	\section{Konvolučné kódy}
	Konvolučné kódy spracovávajú informačné bity sériovo, pričom vstupná dĺžka informačných blokov \(k\) je väčšinou male číslo (1, 2, 3\,\dots), pričom výstupné \(n\)-bitové slová závisia nielen od aktuálnej \(k\)-tici informačných bitov, ale tiež aj na predchádzajúcich \(k\)-ticiach.
	
	Konvolučné kódy by sme mohli rozdeliť do dvoch základných skupín a~to nerekurzívne konvolučné kodéry (NRC) a~rekurzívne konvolučné kodéry (RSC). Základným prvkom týchto kodérov je posuvný register, ktorý uchováva predchádzajúce hodnoty bitového toku a~logické členy XOR. Tieto kodéry môžeme popísať tromi základnými parametrami (\(n\), \(k\), \(m\)), kde \(n\) označuje počet výstupných bitov, \(k\) počet vstupov kodéra a~\(m\) počet pamäťových buniek kodéru. Na obr.\,\ref{fig:obr1} vidíme zapojenie NRC kodéru s~parametrami (2, 1, 2). Z~týchto parametrov je možné zistiť informačnú rýchlosť (kódový pomer) \(R\) a~dĺžku kódového ohraničenia \(K\). Informačná rýchlosť udáva pomer počtu bitov vstupných a~výstupných z~kodéru a~je definovaná ako \cite{lit16}
\begin{equation}
	R = \frac{k}{n}.
\end{equation}
Dĺžka kódového ohraničenia udáva, ako dlho sa bit podieľa na procese kódovania \cite{lit16}
\begin{equation}
	K = m + 1.
\end{equation}
Konvolučný kodér môžeme tiež popísať pomocou vytváracej matice, ktorá bude mat tvar
\begin{equation}
	\boldsymbol{G}(D) =
	\begin{bmatrix}
		G_{(1)}^{(1)}(D), G_{(2)}^{(1)}(D)
	\end{bmatrix}.
\end{equation}
Vytváracie mnohočleny sa rovnajú nasledujúcim rovniciam, kde \(D\) nám označuje pamäťové bunky kodéra
\begin{equation}
	G_{(1)}^{(1)}(D) = 1 + D + D^{3},
	\label{eq:RSCpoly1}
\end{equation}
\begin{equation}
	G_{(2)}^{(1)}(D) = 1 + D^{2} + D^{3}.
	\label{eq:RSCpoly2}
\end{equation}
Z~NRC kodéra môžeme odvodiť RSC kodér a~to tak, že jeden zo zabezpečovacích výstupov privedieme na vstup, ako spätnú väzbu a~druhý nastavíme ako systematický.
\begin{figure}[h]%
	\centering
	\includegraphics[width=1\textwidth]{NRC}%
	\caption{NRC kodér (2, 1, 3)}%
	\label{fig:obr1}%
\end{figure}

Na obr.\,\ref{fig:obr2} môžeme vidieť RSC kodér odvodený z~NRC kodéra na obr.\,\ref{fig:obr1}. Kde \(u\) nám označuje vstup kodéra. Bity prichádzajúce na tento vstup bez akejkoľvek zmeny prechádzajú na výstup \(v_1\) a sú označované ako systematické bity. Na výstupe \(v_2\) sa nachádzajú bity paritné. \(D\) označuje pamäťové bunky a symbol \(\oplus\) XOR sčítanie modulo 2. Prepínač je v polohe \(A\) pri príchode vstupného kódového slova. Potom sa prepínač prepne do polohy \(B\). po dobu \(m\) krokov, kde \(m\) je počet pamäťových buniek kodéru. Týmto bude zaistené, že pamäťové bunky kodéra budú vynulované a~ku vstupnej nezabezpečenej postupnosti je pridaných \(m\) zabezpečovacích bitov. Vytváracia matica pre tento kodér bude mať tvar
\begin{equation}
	\boldsymbol{G}(D) =
	\begin{bmatrix}
		1, \frac{G_{(1)}^{(1)}(D)}{G_{(2)}^{(1)}(D)}
	\end{bmatrix}
	,
\end{equation}
kde \(G_{(1)}^{(1)}(D)\) a~\(G_{(2)}^{(1)}(D)\) sú vytváracie mnohočleny NRC kodéru (rov.\,\ref{eq:RSCpoly1},\,\ref{eq:RSCpoly2}).
Konvolučné kódy môžu byť popísané aj grafickou formou a~to stavovým, mriežkovým (trellis) alebo stromovým diagramom.
\begin{figure}[ht]%
	\centering
	\includegraphics[width=1\textwidth]{RSC}%
	\caption{RSC kodér (2, 1, 3)}%
	\label{fig:obr2}%
\end{figure}
	
	\newpage
	\section{Blokové kódy}
		 Hlavnou myšlienkou blokových kódov je vloženie takého množstva paritných bitov, aby bol dekodér schopný následne detekovať a~opraviť chyby. Ich najdôležitejšia vlastnosť je fixná dĺžka kódového slova \(n\). Môžeme ich rozdeliť na kódy systematické, to sú také, ktoré majú rozloženie informačných a~zabezpečovacích miest v~kódovom slove realizované podľa určitého systému a~v~každom slove rovnako. Druhou skupinou sú kódy nesystematické, konštrukcia týchto kódov nepredpokladá rozdelenie kódového slova na informačné a~zabezpečovacie miesta. 
		
		Kódové slovo môžeme rozdeliť na \(k\) informačných bitov a~\(r\) paritných (zabezpečovacích) bitov. Zabezpečovací proces je definovaný tzv. vytváracou (generujúcou) maticou alebo vytváracím polynómom. Príkladom blokových kódov definovaných vytváracím polynómom sú napr. BCH (Boseho-Chaudhuriho-Hocquenghemovy) kódy. BCH (\(n\), \(k\)), alebo tiež aj BCH(\(n\), \(k\), \(d_{\text{min}}\)), kde \(d_{\text{min}}\) označuje minimálnu Hammingovu vzdialenosť. Hammingova vzdialenosť je definovaná, ako počet odlišných znakov v~dvoch \(n\) znakových slovách \cite{lit4}. BCH kódy sú definované vytváracím polynómom \(g\)(x) (rov.\,\ref{eq:BCHpoly}). Tieto kódy môžu byť binárne alebo nebinárne, príkladom nebinárnych BCH kódov sú RS kódy.\cite{lit6}
\begin{equation}
	g(x) = g_0 + g_1 x + g_2 x^2 + ... + g_{n-k-1} x^{n-k-1} + g_{n-k} x^{n-k}.
\label{eq:BCHpoly}
\end{equation}
		Polynómy sú zadávané v osmičkovej sústave \(g(x)_{\text{octal}} = 23\), pretože ich dĺžka pri reálnom zápise je veľká. Následne ich je potrebné previesť do binárnej sústavy \(g(x)_{\text{bin}} = 10011\) a potom na polynóm \(g(x) = x^4 + x + 1\). Na obr.\,\ref{fig:BCHkoder} \cite{lit5} môžeme vidieť všeobecné zapojenie systematického kodéra pre BCH (\(n\), \(k\), \(d_{\text{min}}\)), kde \(\oplus\) je XOR, teda modulo 2 sčítanie a~\(\otimes\) je násobenie.
\begin{figure}[ht]%
\centering
\includegraphics[width=1\textwidth]{BCH}%
\caption{Kodér BCH (\textit{n}, \textit{k}, \textit{d}\textsubscript{min}) s (\textit{n} - \textit{k}) posuvnými registrami.}%
\label{fig:BCHkoder}%
\end{figure}

\chapter{Turbo kódy}
	\section{Úvod}
		Claude Shannon vo svojom článku, ktorý bol zverejnený v~roku 1949 prezentoval matematické základy pre komunikáciu pomocou kanálu za prítomnosti šumu a~definoval \textit{Shannon limit}. Tento limit nám udáva teoretickú maximálnu kapacitu pre daný informačný kanál a~úroveň šumu. Pomocou konvolučných a~blokových kódov pre detekciu chýb, ktoré boli stále prepracovanejšie sa darilo postupne približovať k~tomuto teoretickému maximu. Bohužiaľ cenou za toto približovanie bola neustále narastajúca výpočtová náročnosť dekódovania a~tieto kódy sa stávali nepraktickými. Ešte v~roku 1990 bol rozdiel medzi teoretickou hranicou a~praktickými implementáciami okolo 3\,dB. Práve tento dôvod nútil hľadať nové kódy, ktoré mali schopnosť blížiť sa Shannonovmu limitu. Riešením bola nová skupina kódov, ktoré boli pomenované Turbo kódy.
			
		Claude Berrou, Alain Glavieux a~Punay Thitimajshima, ktorí navrhli turbo kódy, v~roku 1993 predstavili článok \cite{lit1}, v~ktorom ukázali, že turbo kódy sa dokážu priblížiť ku Shannonovmu limitu iba na 0,7\,dB pri bitovej chybovosti \(10^{-5}\). Bežne sa v~turbo kódoch používa kód konvolučný a~to RSC. Ovšem používajú sa aj kódy blokové BCH, ktoré majú kódový pomer blížiaci sa jednej. Aj napriek tomu, že turbo kódy vychádzajú z~konvolučných a~blokových kódov dokážu čeliť vysokej výpočtovej zložitosti dekódovania a~to tým, že na kódovanie používajú typicky dva alebo viac jednoduchších blokových či konvolučných kodérov a~prekladač, ktorý je bližšie priblížený v kap.\,\ref{prekladanie}. Dekódovanie nastáva v~iteráciách na základe pravdepodobnostného modelu a matematických princípov Bayesovskej štatistiky. Ovšem turbo kódy majú aj svoje nevýhody. Hlavnou nevýhodou je vysoká latencia, ktorú zapríčiňuje iteračný spôsob dekódovania a využívajú zložité dekódovacie algoritmy ako algoritmus SISO (Soft-Input Soft-Output) a MAP (Maximum A-Posteriori). Tiež nie sú presne dané optimálne parametre pre kodér a~dekodér, čo sťažuje výber vhodných parametrov, ktorých je enormné množstvo možných kombinácií.  
		
		Od roku 1993 nastal intenzívny vývoj a~výskum turbo kódov, dnes pod týmto názvom môžeme objaviť viac kódov a najpoužívanejším turbo kódom je kód, ktorý tvoria dva paralelne zreťazené moduly. Vývoj týchto kódov pomohol k~ich aplikácii do technológií ako napr. 3G, 4G mobilné siete, digitálna satelitná komunikácia alebo WiMAX \cite{lit26}.
	\section{Turbo kódovanie}
	Základná štruktúra turbo kodéru je znázornená na obr.\,\ref{fig:turbokoder}. Vstupné bity sú označené ako \(u_k\), bity na systematickom výstupe ako \(v_{1k}\), bity na paritných výstupoch ako \(v_{2k}\) respektíve \(v_{3k}\) a~výstupné multiplexované dáta ako \(v\). Väčšinou tento kodér tvoria dva paralelne zapojené RSC kodéry, ktoré sú identické a~medzi nimi je prekladač kap.\,\ref{prekladanie}. Výstupy kodérov môžu byť zúžené (puncturing) kap.\,\ref{zuzovanie} a~následne sú multiplexované do výstupnej sekvencie \(v = v_{10} + v_{20} + v_{30} + v_{11} + v_{21} + v_{31}\dots v_{1k} + v_{2k} + v_{3k}\).
\begin{figure}[ht]%
	\centering
	\includegraphics[width=1\textwidth]{TurboKoder}%
	\caption{Zapojenie turbokodéru.}%
	\label{fig:turbokoder}%
\end{figure}
\FloatBarrier
Tento turbo kodér má informačnú rýchlosť 1/3 a vypočíta sa podľa vzťahu 
\begin{equation}
	\frac{1}{R_{\text{c}}} = \frac{1}{R_1} + \frac{1}{R_2} - 1.
	\label{eq:infrych}
\end{equation}
Informačná rýchlosť sa dá zmeniť pomocou zúženia a~to tak, že systematické bity sa ponechajú a~vynechané sú určité paritné bity. Ak by sme zúžili aj bity systematické znížili by sme výkonnosť kódu. 
	
	\section{Prekladanie} \label{prekladanie}
	Prekladanie (interleaving) je proces, pri ktorom dátovú sekvenciu preskupí prekladač (interleaver), čím zvýši Hammingova váhu kódového slova. Hammingovu váha je definovaná ako počet nenulových znakov v~kódovom slove. Minimálna Hamingova váha je najmenšia hodnota Hammingovej váhy zo všetkých slov okrem slova s nulovými prvkami \cite{lit7}. Tento proces napomáha pri korekcii skupinových chýb a~zabezpečí, že jednotlivé kodéry neprodukujú rovnakú postupnosť. Chyby sú rozdelené do viacerých blokov prenášanej postupnosti, čo zabraňuje prekročeniu zabezpečovacej schopnosti kódu. Kvalita prekladača súvisí s~celkovou efektivitou turbo kódu a~je jedným z~hlavných faktorov, vďaka čomu sa približujeme Shannonovmu limitu. Prekladačov existuje veľké množstvo a~každý má svoje špecifické vlastnosti, ktoré sú výhodné pre konkrétne komunikačné systémy. Najpoužívanejšími prekladačmi sú blokové, náhodné a tiež konvolučné prekladače.
	
	 Princíp blokového prekladača je, že vstupné bity sú zapisované do maticového tvaru po stĺpcoch a~následne sú čítané po riadkoch, čo môžeme vidieť na obr.\,\ref{fig:blokovyprekladac}. Z obrázka vidieť, že zapísaná postupnosť bitov do matice bola [0110\,\dots0100] a~bity budú čítané v~postupnosti [0010\,\dots0000]. Existuje viacej druhov blokových prekladačov a~každý má trochu odlišný princíp, ktorý vyhovuje rozdielnym komunikačným systémom (obdĺžnikový blokový prekladač, diagonálny blokový prekladač\dots). 
	\begin{figure}[ht]%
		\centering
		\includegraphics[width=0.4\textwidth]{BlokovyPrekladac}%
		\caption{Blokové prekladanie.}%
		\label{fig:blokovyprekladac}%
	\end{figure}
	
	Druhým typom sú náhodné prekladače. Vstupné bity sú zapísané do prekladača a~následne sú čítané na základe pseudonáhodnej sekvencie indexov. Princíp môžeme vidieť na obr.\,\ref{fig:nahodnyprekladac}. Prekladač načítal postupnosť [11001011] a~na výstupe sme dostali náhodnú postupnosť [01110101]. Samozrejme aj v~tejto skupine nájdeme viacej druhou prekladačov (pseudonáhodný prekladač, semi-random prekladač, uniformný náhodný prekladač\dots).   
	
\begin{figure}[ht]%
	\centering
	\includegraphics[width=0.7\textwidth]{NahodnyPrekladac}%
	\caption{Náhodný prekladač.}%
	\label{fig:nahodnyprekladac}%
\end{figure}
\FloatBarrier

Konvolučný prekladač (obr.\,\ref{fig:konvprekladac}) sa skladá zo sady posuvných registrov, ktoré majú pevné oneskorenie. Do konvolučného prekladača vstupujú bity z ľavej strany a cyklicky sú pridelené do jednej z možných ciest. Vstupný a výstupný prepínač prekladača sú synchronizované, takže v prípade, že sú prepínače v prvej pozícii bit okamžite prechádza na výstup prekladača. V druhej pozícii je bit uložený do pamäti a prepustený na výstup až v ďalšom cykle, keď sa prepínače dostanú do rovnakej pozícii. Posledná pozícia znamená pre bit, že bude mať oneskorenie dva cykli, kým sa dostane na výstup. Spätný prekladač bude pracovať analogicky, avšak bit, ktorý nemal žiadne oneskorenie, budem mať oneskorenie dva cykli a naopak bit s oneskorením dva cykli nebude mať žiadne \cite{lit25}.       
\begin{figure}[ht]%
	\centering
	\includegraphics[width=0.7\textwidth]{KonvPrekladac}%
	\caption{Konvolučný prekladač.}%
	\label{fig:konvprekladac}%
\end{figure}
\FloatBarrier 

	\section{Zúženie} \label{zuzovanie}
	Zúženie (puncturing) je proces, pri ktorom sa systematicky vymazávajú niektoré bity. Výhodou je zníženie šírky pásma, ktorá je potrebná na prenos informácie, avšak za cenu zníženia zabezpečovacej schopnosti kódu, čo je hlavnou nevýhodou \cite{lit6}. Preto je potrebné urobiť kompromis medzi konečnou dĺžkou kódového slova a~zabezpečovacou schopnosťou kódu. Pri zúžení turbo kódov sa vypúšťajú len paritné bity, aby nedošlo k zníženiu výkonu kódu a~to na základe zužovacej matici~\(\boldsymbol{I}\).
		
		Ako príklad si ukážeme turbo kodér z~obr.\,\ref{fig:turbokoder}, jeho informačná rýchlosť je \(R~=\frac{1}{3}\), zúžením by sme chceli zvýšiť túto informačnú rýchlosť na \(R~=~\frac{1}{2}\). Výstupné bitové postupnosti by boli \(v_{1k}\)~=~[01100111], pre systematický výstup a~pre paritné výstupy \(v_{2k}\)~=~[00011101], \(v_{3k}\)~=~[10001110]. Táto matica by mala tvar
	\begin{equation}	
		\nonumber
		\boldsymbol{I} =
		\begin{bmatrix}
			1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\
			1 & 0 & 1 & 0 & 1 & 0 & 1 & 0\\
			0 & 1 & 0 & 1 & 0 & 1 & 0 & 1
		\end{bmatrix}.
	\end{equation}
	To znamená, že bity na miestach, kde sú v~matici nuly by boli vypustené a~bity na miestach jednotiek prepustené. Systematický výstup by bol bez zmeny a~paritné výstupy by mali tvar \(v_{2k}\)~=~[0010] a \(v_{3k}\)~=~[0010]. Pred dekódovaním je nutné na vymazané miesta doplniť logické nuly. Všeobecne môžeme výstup kodéra popísať ako \(v~=~[v_{10},~v_{20},~v_{11},~v_{31},~v_{12},~v_{22},\dots,v_{1k},~v_{3k}]\).   		
	
\section{Turbo dekódovanie}
	V~prípade, že je použitý AWGN prenosový kanál je rozloženie porúch dané Gau\-ssovou distribúciou to znamená, že prijatý signál nebude v~tvare \(0\) a \(1\), ale bude pripomínať spojitý signál. Ak by sme tento signál porovnávali s~určitou prahovou úrovňou, mohlo by dôjsť k nesprávnemu vyhodnoteniu logickej úrovne a~tým by sa stalo dekódovanie neefektívne. Preto sa pri dekódovaní využíva tzv. mäkké výstupy LLR (\textit{Log Likelihood Ratio}), hodnota a-posteriori pravdepodobností a~znamienko pri tejto hodnote rozhoduje o~dekódovanom bite. V~praxi sa využívajú dva základné algoritmy, Viterbiho algoritmus SOVA (\textit{Soft Output Viterbi Algorithm}) a~druhý algoritmus MAP (\textit{Maximum A-Posteriori}). Tieto algoritmy budú bližšie priblížené v~nasledujúcich častiach tejto kapitoly.         
	
	
	Turbo dekodér obsahuje rovnaký počet konvolučných dekodérov, ako obsahuje turbo kodér konvolučných kodérov. Tiež je jeho súčasťou rovnaký interleaver ako bol použitý pri kódovaní a~jemu príslušný deinterleaver. Na obr.\,\ref{fig:turbodekoder}, ktorý je prevzatý z~lit.\,\cite{lit16}, môžeme vidieť zapojenie turbo dekodéra s~popisom jeho vstupov a~výstupov. Výstup z~prenosového kanála je demultiplexovaný do postupnosti bitov, respektíve hodnôt, ktoré reprezentujú tieto bity, pretože boli ovplyvnené prenosovým kanálom. Systematické bity sa označujú ako \(L_{\text{c}}y_{k\text{s}}\) a~paritné bity obidvoch kodérov ako \(L_{\text{c}}y_{k\text{l}}\), kde \textit{k} označuj poradie bitu \(k=1,2,3\dots N\). Do dekodéra tiež vstupuje vonkajšia informácia (a-priori) predchádzajúceho dekodéra \(L(u_k)\), ktorá slúži k výpočtu a-posteriori informácie \(L(u_k|y)\). V prípade, že výpočet vykonáva prvý dekodér, v~prvej iterácii je hodnota a-priori informácie pre všetky bity nulová. Aby a-posteriori informácia mohla slúžiť ako a-priori informácia pre nasledujúci dekodér je potrebné od nej odpočítať hodnotu systematického mäkkého vstupu \(L_{\text{c}}(y_{k\text{s}})\) a a-priori informáciu z predchádzajúceho dekodéru \(L(u_k)\) a to z~dôvodu aby tieto hodnoty neovplyvňovali výpočet. Výpočet sa vykonáva podľa vzorca (\ref{eq:apr}) \cite{lit6}.
\begin{equation}
	L_{\text{e}}(u_{k})=L(u_{k}|y)-L(u_k)-L_{\text{c}}y_{k\text{s}}. 
\label{eq:apr}
\end{equation}
V~momente, keď si dekodéry predávajú a-priori informáciu, musí byť táto informácia pomocou interleaveru alebo deinterleaveru upravená tak, aby hodnoty pravdepodobností zodpovedali systematickému mäkkému vstupu vstupujúcemu do dekodéru. Tento postup výpočtu sa iteratívne opakuje, až kým nieje séria iterácií dokončená a~následne sa určí tvrdý (hard) výstup z~dekodéra. Znamienko a-posteriori informácie nám určuje tvrdý výstup \(+\) pre bit 1 a \(-\) pre bit 0.
\begin{figure}[ht]%
	\centering
	\includegraphics[width=1\textwidth]{TurboDekoder}%
	\caption{Turbo konvolučný dekodér.}%
	\label{fig:turbodekoder}%
\end{figure}
\FloatBarrier

\subsection{Soft output viterbi algoritmus (SOVA)} \label{sova}
V~tejto kapitole si predstavíme SOVA algoritmus, ktorý ako už bolo spomenuté používa pri dekódovaní mäkký výstup v~podobe a-posteriori pre každý dekódovaný bit. Nasledujúce body popisujú postup algoritmu a~spôsob výpočtu jednotlivých krokov. Ešte pred samotným dekódovaním je potrebné dáta prenesené cez prenosový kanál demupltiplexovať, aby zodpovedali postupnostiam bitov vysielaných z~jednotlivých kodérov.
\begin{enumerate}
	\item V~prvok kroku je v~každom úseku mriežkového grafu vypočítaná akumulovaná hodnota metriky danej cesty. Pre tento výpočet je v~algoritme SOVA použitý nasledujúci vzťah prebratý z~lit.\cite{lit18}
	\begin{equation}
		M_{t}^{(s)}=M_{t-1}^{(s)}+\frac{L_{\text{c}}}{2}u_{t}^{(s)} y_{t,1}^{(s)}+\frac{1}{2}\sum_{j=2}^{N}x_{t,j}^{(s)}y_{t,j}^{(s)}L_{\text{c}}+	\frac{1}{2}u_{t}^{(s)}L(u_{t}),
	\end{equation}
kde\newline
	\newline
	\begin{tabular}{lll}
	\(M_{t}^{(s)}\)&\dots &je hodnota akumulovanej metriky v čase \(t\) a v stave \(s\),\\
	\(u_{t}^{(s)}\)&\dots &je vysielaný systematický bit,\\
	\(x_{t,j}^{(s)}\)&\dots &sú vysielané paritné bity,\\
	\(y_{t,j}^{(s)}\)&\dots &sú bity prijaté z prenosového kanála,\\
	\(L(u_t)\)&\dots &je a-priori hodnota pre bit \(u_t\) získaná\\ 
	&&z predchádzajúceho kodéra,\\
	\(L_{\text{c}}\)&\dots &je spoľahlivosť prenosového kanála.
	\end{tabular} 
	
	\item V~prípade, že do jedného bodu (stavu) prichádzajú dve cesty sa pre výpočet akumulovanej metriky v~čase \(t+1\) využije vyššia hodnota. Zároveň sa vypočíta rozdiel týchto metrík \(\Delta_{t}^{s}\), ktorý nám určuje mieru spoľahlivosti, že sme urobili správne rozhodnutie. Môžeme uvažovať dve cesty \(\hat{c}_{t}^{s}\) a \(c_{t}^{s}\) smerujúce do stavu \(s\) v~čase \(t\), ktoré majú metriky \(M(\hat{c}_{t}^{s})\) a~\(M(c_{t}^{s})\). Ak je cesta \(\hat{c}_{t}^{s}\) vybratá ako preživajúca, pretože má vyššiu metriku, môžeme rozdiel týchto metrík definovať ako
	\begin{equation}
		\Delta_{t}^{s}=M(\hat{c}_{t}^{s})-M(c_{t}^{s}).
	\end{equation}
	\item Ďalší krok spočíva vo vyhľadaní najpravdepodobnejšej cesty mriežkovým grafom a~to tak, že v~každom bode vyberieme najvyššiu hodnotu akumulovanej metriky a~táto cesta sa berie ako najpravdepodobnejšia. Táto cesta nám reprezentuje dekódovanú bitovú postupnosť \(\tilde{u}~=~(\tilde{u}_1,\tilde{u}_2\dots\tilde{u}_{k})\) a~pre tieto bity sa bude počítať mäkký výstup dekodéru.
	\item Pre ďalšie výpočty je potrebné zistiť tzv. update sekvencie pre každý úsek. Update sekvencie nám určuje, ktoré bity \(\tilde{u}_{k}\) by zmenili svoju hodnotu v~prípade, že by bola ako prežívajúca cesta vybratá cesta konkurenčná. Hodnota 1 v~update sekvencie určuje odlišnú hodnotu bitu, pričom najmenej významný bit LSB (Least Significant Bit) je na pravej strane. To znamená, ak by bol update sekvencie (11001), bity \(\tilde{u}_1\), \(\tilde{u}_2\) a~\(\tilde{u}_5\) by zmenili svoju hodnotu. V~prípade, že prechádzame mriežkový graf z~ľavej strany narazíme na pozíciu \(k\), kde sa zlučuje najpravdepodobnejšia cesta s~cestou konkurenčnou. Hodnota tohoto bitu v~update sekvencie je stále 1 a~označujeme ho, ako najviac významný bit MSB (Most Significant Bit). Druhý najvýznamnejší je bit \(u_{k-1}\), až kým sa nedostaneme k~bitu LSB. 
	\item Pomocou hodnôt updatu sekvencie vypočítame a-posteriori \(L(u_{k}|y)\) pre jednotlivé bity a~to pomocou nasledujúceho vzorca prebratého z~lit.\cite{lit6}
	\begin{equation}
		L(u_k|y)=\tilde{u}_k\cdot\text{min}\Delta_{t}^{s}.
	\end{equation}
	Ako prvé je potrebné z~updatu sekvencie určiť hodnotu minimálneho rozdielu metrík \(\text{min}\Delta_{k}^{s}\), ktorá je daná ako minimálna hodnota rozdielu metrík zlučujúcich ciest pozdĺž najpravdepodobnejšej cesty. Ako príklad si ukážeme, keď budeme určovať minimálny rozdiel metrík pre bit \(\tilde{u}_{5}\). V~update sekvencie pre tento bit si zoberieme MSB, ktorý je vždy 1, následne zistíme druhý MSB bit z~updatu sekvencie pre bit \(\tilde{u}_{5+1}\) a~tretí MSB pre bit \(\tilde{u}_{5+2}\). Takto postupujeme až kým sa nedostaneme ku bitu \(\tilde{u}_{k}\). Hodnota bitu 1 v~sekvencii týchto bitov nám určuje, ktoré hodnoty rozdielu metrík pripadajú v~úvahu a~následne je z~týchto hodnôt vybratá minimálna hodnota. Táto hodnota nám určuje minimálnu hodnotu rozdielu metrík pre bit \(\tilde{u}_{5}\). Týmto postupom sme schopný zistiť a-posteriori pravdepodobnosť pre dekódovanú postupnosť a~v~nasledujúcom kroku vypočítať a-priori pravdepodobnosť pre ďalší dekodér.
	\item A-posteriori pravdepodobnosť je možné rozložiť do troch častí pričom platí vzorec (\ref{eq:rozl}) \cite{lit6}
	\begin{equation}
		L(u_{k}|y)=L(u_{k})+L_{\text{c}}y_{t,1}+L_{e}(u_{k}),
		\label{eq:rozl}
	\end{equation}
	kde\\\\
	\begin{tabular}{lll}
	\(L(u_{k})\)&\dots &je a-priori hodnota získaná z predchádzajúceho kodéra,\\
	\(L_{\text{c}}y_{t,1}\)&\dots &je systematická hodnota prijatá z prenosového kanála, ktorá\\ 
	&&je vynásobená parametrom \(L_{\text{c}}\),\\
	\(L_{\text{e}}(u_{k})\)&\dots &je konečná hodnota produkovaná dekodérom.
	\end{tabular}
	
	Po úprave tohoto vzorca dostávame vzťah pre výpočet a-priori pre nasledujúci dekodér
	\begin{equation}
		L_{\text{e}}(u_{k})=L(u_{k}|y)-L(u_{k})-L_{\text{c}}y_{t,1}.
		\label{eq:rozl2}
	\end{equation}
\end{enumerate} 
Výstupné hodnoty sú následne interleavnuté a~prichádzajú na vstup druhého dekodéra, kde sa postup opakuje, až kým sa nedosiahne finálny počet iterácií.

\subsection{Maximum a-posteriori algoritmus (MAP)} \label{map}
Druhým algoritmom, ktorý sa využíva pri dekódovaní turbo kódov je tzv. MAP algoritmus. Rovnako ako algoritmus SOVA pri dekódovaní dátovej postupnosti využíva mäkký výstup tzv. a-posteriori pravdepodobnosť. Dekódovanie spočíva v~dvojitom prechode trellis diagramom a~to v~doprednom smere a~následne v~spätnom smere. Pri týchto prechodoch diagramom sa v~jednotlivých uzloch vypočítajú stavové pravdepodobnosti \(\alpha_t^{(s)}\) a~\(\beta_t^{(s)}\). V~nasledujúcich bodoch si popíšeme kroky algoritmu a~výpočty, ktoré sú v~týchto krokoch vykonávané.
\begin{enumerate}
	\item V~prvom kroku je vypočítaná stavová pravdepodobnosť \(\alpha_t^{(s)}\) v~doprednom smere. Táto pravdepodobnosť sa vypočíta pomocou nasledujúceho vzorca, ktorého odvodenie je možné vyhľadať v~lit.\cite{lit19}
	\begin{equation}
	\alpha_t^{(s)}=\sum_{j=0}^1 \alpha_{t-1}^{b(j,s)} \gamma_{t-1}^{b(j,s)},
	\label{eq:alfa}
	\end{equation}
	kde\\\\
	\begin{tabular}{lll}
	\(\alpha_t^{(s)}\)&\dots &je stavová pravdepodobnosť v čase \(t\) pre stav \(s\),\\
	\(\alpha_{t-1}^{(s)}\)&\dots &je stavová pravdepodobnosť v čase \(t-1\) pre stav \(s\),\\ 
	\(\gamma_{t-1}^{(s)}\)&\dots &je pravdepodobnosť prechodu z času \(t-1\) do času \(t\).
	\end{tabular}
	
	Pre výpočet pravdepodobnosti prechodu je použitý vzorec \ref{eq:gamma}, ktorého odvodenie je v~lit.\cite{lit19}
	\begin{equation}
	\gamma_t^{b(j,s)}=L(u_t)\text{exp}(u_t y_{t,1}+x_t y_{t,2}),
	\label{eq:gamma}
	\end{equation}
	kde\\\\
	\begin{tabular}{lll}
	\(L(u_t)\)&\dots &je a-priori pravdepodobnosť z predchádzajúceho dekodéru,\\
	\(u_t,x_t\)&\dots &je vysielaná dvojica bitov (systematický a paritný),\\ 
	\(y_{t,1},y_{t,2}\)&\dots &je priatá dvojica bitov (systematický a paritný).
	\end{tabular}
	\item Tento krok spočíva vo vypočítaní stavovej pravdepodobnosti \(\beta_t^{(s)}\) v~spätnom smere, pre ktorý platí nasledujúci vzorec \cite{lit19}
	\begin{equation}
	\beta_t^{(s)}=\sum_{j=0}^1 \beta_{t+1}^{f(j,s)} \gamma_t^{f(j,s)},
	\end{equation}
	kde jednotlivé symboly majú rovnaký význam ako vo vzorci \ref{eq:alfa}, len \(\beta\) nám označuje spätnú stavovú pravdepodobnosť.
	\item Po vypočítaní týchto hodnôt sme schopný určiť hodnotu mäkkého výstupu pomocou vzorca \ref{eq:makky}, prebratého z~lit.\cite{lit19}
	\begin{equation}
	L(u_k|y)=\log\left[\frac{\sum_s \alpha_t^{(s)}\gamma_t^{(1,s)}\beta_{t+1}^{f(1,s)}}{\sum_s \alpha_t^{(s)}\gamma_t^{(0,s)}\beta_{t+1}^{f(0,s)}}\right]
	\label{eq:makky}
	\end{equation}
	Tento mäkký výstup je možné rozložiť rovnako ako pri SOVA algoritme a~to podľa vzorca \ref{eq:rozl} a~následne podľa vzorca \ref{eq:rozl2} dopočítať a-priori pravdepodobnosť pre nasledujúci dekodér. 
\end{enumerate}
Keďže je MAP algoritmus veľmi náročný na výpočty, nezvykne sa využívať v~iteračných dekodéroch turbo kódov. Využívajú sa jeho modifikácie ako Log-MAP algoritmus, ktorý pracuje v~logaritmickej oblasti, kde je násobenie prevedené na sčítanie a~tým sa výrazne zredukuje jeho výpočtová náročnosť.   
	
\chapter{Využitie turbo kódov}
V~súčastnosti majú turbo kódy veľké množstvo aplikácií v~komunikačných systémoch a~to vďaka svojej výkonnosti. Ako bezpečnostné kódovanie sa využívajú pri drôtovej alebo bezdrôtovej komunikácii, pri ukladaní dát, pri komunikácii s~objektami vo vesmíre a~v~ďalších aplikáciách, kde je potrebné dosiahnuť spoľahlivého prenosu. V~tabuľke \ref{tab:aplkodov} môžeme vidieť najznámejšie aplikácie turbo kódov z~ich parametrami, tabuľka je prevzatá z~lit.\cite{lit8, lit20, lit21, lit22, lit12, lit13, lit14, lit24}.
\begin{table}[ht]
\centering
\caption{Aplikácia turbo kódov v komunikačných systémoch}
\begin{tabular}{|c|c|c|c|}
	\hline
	Aplikácia & Turbo kód & Polynómy & Kódový pomer\\
	\hline
	\makecell{UMTS\\(3GPP)} & \makecell{binárny,\\8-stavový} & 13, 15 & 1/3\\
	\hline
	\makecell{CDMA2000\\(3GPP2)} & \makecell{binárny,\\8-stavový} & 13, 15, 17 & 1/5, 1/4, 1/3, 1/2\\
	\hline
	\makecell{LTE\\(3G PP LTE)} & \makecell{binárny,\\8-stavový} & 13, 15 & 1/3, 1/2\\
	\hline
	\makecell{CCSDS\\(deep space)} & \makecell{binárny,\\16-stavový} & 23, 33, 25, 37 & 1/6, 1/4, 1/3, 1/2\\
	\hline
	\makecell{DVB-RCS\\(return channel)} & \makecell{duo-binárny,\\8-stavový} & 13, 15 & 1/3 až do 6/7\\
	\hline
	\makecell{DVB-RCT\\(return channel)} & \makecell{duo-binárny,\\8-stavový} & 13, 15 & 1/2, 3/4\\
	\hline
	\makecell{IEEE 802.16\\(WiMAX)} & \makecell{binárny,\\8-stavový} & 15, 13, 11 & 1/5, 1/3, 1/2\\
	\hline
	\makecell{IEEE 802.16e\\(Mobile WiMAX)} & \makecell{duo-binárny,\\8-stavový} & 15, 13, 11 & \\
	\hline
	\makecell{Eutelsat\\(Skyplex)} & \makecell{duo-binárny,\\8-stavový} & 15, 13 & 4/5, 6/7\\
	\hline
\end{tabular}
\label{tab:aplkodov}
\end{table}

\section{Mobilné siete tretej generácie} \label{LTE}
V~tejto časti kapitoly si priblížime mobilné siete tretej generácie, ktoré pre zabezpečenie prenášaných dát používajú turbo kódy. Medzi tieto systémy patrí UMTS (Universal Mobile Telecommunication System) a~LTE (Long Term Evolution), ktoré sú štandardizované skupinou telekomunikačných asociácií 3GPP (Third Generation Partnership Project) a~systém CDMA (Code Division Multile Access), ktorý štandardizovala skupina 3GPP2 (Third Generation Partnership Project 2).    

Medzi dva najrozšírenejšie 3G mobilné systémy patrí systém UMTS, ktorý je ďalším stupňom vývoja GSM sietí. Pri UMTS sa pre zabezpečenie prenášaných dát používajú konvolučné kódy a~tiež turbo kódy. Nasledujúce parametre využívané pri kódovaní sú prebraté z~lit.\cite{lit20} a~platia pre turbo kódy. UMTS ako kodér používa 8-stavový RSC kodér, ktorého vytváracie polynómy v~osmičkovej sústave sú 13 a~15, kde 13 je spätná väzba kodéru. Kódový pomer turbo kodéru je 1/3 s~kódovým obmedzením \(K=4\). Veľkosť blokov dát sa volí v~rozmedzí 40 až 5114 bitov. UMTS využíva interný inteleaver. Skladá sa z~bloku dát, ktorý je zapísaný do obdĺžnikovej matici a~následne sú bity preskupené podľa predpísaného algoritmu. Tento algoritmus je presne popísaný v~lit.\cite{lit20}.  

Druhým 3G systémom je CDMA, taktiež používa 8-stavový RSC kodér (obr.\ref{fig:CDMAkoder}), ktorého vytváracie polynómy v~osmičkovej sústave sú 13, 15, 17, kde 13 je polynóm spätnej väzby. Hlavný rozdiel medzi UMTS a~CDMA je v~prekladacom algoritme, povolenom rozsahom veľkosti blokov a~kódovým pomerom. Povolené veľkosti blokov dát sú od 186 po 20730 bitov, presné hodnoty týchto blokov je možné vyhľadať v~lit.\cite{lit21}. Kódový pomer využívaný pri turbo kódoch je 1/5, 1/4, 1/3 a 1/2. Interleaver pracuje tak, že blok dát je sekvenčne zapisovaný do poľa v~sekvencii adries a~následne je celá sekvencia čítaná podľa určenej postupnosti adries. Túto určenú postupnosť adries je možné vyhľadať v~lit.\cite{lit21}.  
\begin{figure}[ht]%
	\centering
	\includegraphics[width=1\textwidth]{CDMAkoder}%
	\caption{Turbo kodér používaný v CDMA.}%
	\label{fig:CDMAkoder}%
\end{figure}   

\newpage
Ďalšou technológiou, ktorá spadá do štandardu 3G je vysokorýchlostný internet v~mobilných sieťach GSM označovaný ako LTE. LTE je niekedy nesprávne označovaný ako 4G LTE, pričom nespĺňa podmienky ITU pre siete štvrtej generácie. Štvrtú generáciu dátových sietí predstavuje až štandard LTE Advanced. LTE využíva pre zabezpečenie dát turbo kódy a~tiež konvolučné kódy. Ako pri predchádzajúcich systémoch používaný je 8-stavový RSC kodér, ktorého vytváracie polynómy v~osmičkovej sústave sú 13 a~15 s~kódovým pomerom 1/3 a~podporované veľkosti blokov dát od 40 do 6144 bitov. Interlaver má pre každy bit z~bloku dát určené špecifické parametre, podľa, ktorých vypočíta výstupný index. Informácie o~LTE boli prebraté z~lit.\cite{lit22}, kde je možne vyhľadať aj tabuľku pre interleaver a~výpočet výstupného indexu bitu. 
 
\section{CCSDS -- Vesmírny komunikačný systém} \label{CCSDS}
Konzultačný výbor pre systémy spracovávajúce vesmírne dáta (CCSDS), bol založený v~roku 1982 a~jeho hlavnou úlohou bolo stanovenie medzinárodných štandardov pre vesmírnu komunikáciu so vzdialenými kosmickými sondami vo vesmíre. Tento systém používajú agentúry z~celého sveta (NASA, RSA, JAXA, ESA\dots) a~v~roku 1999 boli pre zabezpečenie prenosu dát zvolené turbo kódy, ako nová možnosť.

Systém využíva 16-stavový binárny RSC kodér (obr.\,\ref{fig:CCSDSkoder}), ktorého vytváracie polynómy sú 23, 33, 25 a 37, kde 23 tvorí spätnú väzbu kodérov. Využívané kódové pomery sú 1/6, 1/4, 1/3, 1/2 a~veľkosť blokov dát je volená z~hodnôt 1784, 3568, 7136, 8920 alebo 16382 bitov. Interleaver v~CCSDS pracuje pomocou permutácii bitu za bit pre celý blok dát a~výstupný index sa vypočíta algoritmom, ktorého parametre sú špecifické pre rôzne dĺžky blokov dát. Obrázok kodéra, parametre ako aj podrobný popis algoritmu pre interleaver s~jeho parametrami, sú prebraté z~lit.\cite{lit12}   
\begin{figure}[!ht]%
	\centering
	\includegraphics[width=1\textwidth]{CCSDSkoder}%
	\caption{Turbo kodér používaný v CCSDS.}%
	\label{fig:CCSDSkoder}%
\end{figure} 
\FloatBarrier

\section{Využitie turbo kódov v DVB}
DVB (Digital Video Broadcasting) je skupina štandardov pre vysielanie digitálnej televízie spravovaný konzorciom DVB Project. Existuje veľa druhov DVB, ktoré sa odlišujú spôsobom šírenia signálu. Bližšie si priblížime DVB-RCS, ktorý sa zaoberá spätným kanálom komunikácie cez satelit a~DVB-RCT, ktorý špecifikuje spätný kanál pre pozemnú digitálnu televíziu. Vzhľadom na to, že tieto systémy majú malý priestor na uplink je potrebné spoľahlivé protichybové zabezpečenie.

Obidva štandardy využívajú rovnaký turbo kodér (obr.\,\ref{fig:DVBkoder}) a~to duo-binárny, 8-stavový, ktorého vytváracie polynómy sú 13 a~15, kde 15 je polynóm spätnej väzby. Rozdiel je v~podporovaných dĺžkach dátových blokov a~kódovom pomere, kým DVB-RCS podporuje bloky od 96 až po 1728 bitov a~kódový pomer od 1/3 až do 6/7, pri DVB-RCT sú použité dátové bloky od 144 do 648 bitov a~kódový pomer 1/2, 3/4. Informácie o DVB-RCS a~DVB-RCT ako aj obr.\,\ref{fig:DVBkoder} sú prebraté z~lit.\cite{lit13, lit14}.
\begin{figure}[!ht]%
	\centering
	\includegraphics[width=1\textwidth]{DVB}%
	\caption{Turbo kodér používaný v DVB.}%
	\label{fig:DVBkoder}%
\end{figure}
\FloatBarrier

\section{WiMAX} \label{WiMAX}
WiMAX (Worldwide Interoperability for Microwave Access) je bezdrôtová technológia definovaná v~norme IEEE 802.16. Rozšírením tejto základnej normy na normu IEEE 802.16e prinieslo podporu mobility, označuje sa ako Mobile WiMAX. 

WiMAX používa 8-stavový binárny turbo kodér (obr.\,\ref{fig:WiMAXkoder}), ktorého vytváracie polynómy v~osmičkovej sústave sú 11, 13, 15, kde 15 je polynóm spätnej väzby. Kódový pomer sa určuje na základe použitej modulácie a~je v~rozmedzí od 1/5 po 1/2. Bloky dát sú volené od 12 po 1152 bitov. Interleaver určuje adresu bitu na základe veľkosti bloku a vypočíta ju podľa špeciálneho algoritmu. Presný postup algoritmu je možné vyhľadať v~lit.\cite{lit24}, odkiaľ sú prebraté informácie o~WiMAXe.  
\begin{figure}[!ht]%
	\centering
	\includegraphics[width=1\textwidth]{WiMAX}%
	\caption{Turbo kodér používaný vo WiMAXe.}%
	\label{fig:WiMAXkoder}%
\end{figure}    



