\chapter{Teoretický pohled na čárový kód a jeho snímání}
\label{sec:theory}
Tato kapitola uvede definici čárového kódu jako jednorozměrný signál. Bude popsáno konvoluční zkreslení a další rušivé jevy, které snímání čárového kódu doprovázejí.

Budou rozlišovány dva způsoby vyjádření čárového kódu.
\begin{description}
	\item[Vyjádření v prostorové oblasti]{Signál je popsán jako funkční závislost dráhy $r$, tj. vzdálenosti měřené po trajektorii pohybujícího se snímače čárového kódu. Signály (a s nimi spojené proměnné a konstanty) budou značeny dolním indexem \uv{$\text{r}$}.}
	\item[Vyjádření v časové oblasti]{Signál je popsán jako funkční závislost času. Dolní index \uv{$\text{r}$} nebude použit.}
\end{description}
Vztah mezi prostorovým a časovým vyjádření je dán závislostí dráhy na čase.

Důraz bude kladen především na magnetické čárové kódy (nicméně uvedené poznatky ve velké míře platí i pro čárové kódy optické).

\section{Čárový kód jako signál}
\label{sec:theory:barcode-as-a-signal}
Čárový kód lze považovat za prostorové zachycení jednorozměrného \emph{obdélníkového} signálu $c(r)$ (obr.~\ref{fig:theory:barcode-as-a-signal}). Nezávisle proměnná $r$ představuje vzdálenost měřenou na trajektorii napříč čárovým kódem.

\fig{img/barcode-as-a-signal}{Čárový kód jako jednorozměrný signál}{fig:theory:barcode-as-a-signal}{1}

Signál $c(r)$ je \emph{dvouúrovňový} (\en{bilevel}), tj. jeho okamžitá hodnota nabývá jedné ze dvou možných úrovní ($0$ a $1$), přechod mezi nimi nastává prostřednictví nekonečně strmé hrany.

Způsob, jakým je informace v čárovém kódu zakódována, je označuje jako tzv. \emph{symbolika}. Jedním z důležitých parametrů symboliky je např. \emph{modul}, tj. počet možných šířek proužků a mezer (např. kód na obr.~\ref{fig:theory:barcode-as-a-signal} má modul $2$).

Možné vyjádření signálu $c(r)$ je jako součet hran \cite[vzorec (2)]{joseph-barcode-peak}
\begin{align}
	c_r(r) = \sum_{i = 0}^{n - 1}(-1)^i U(r - r_i),	\label{eq:theory:bilevel-sum-of-steps}
\end{align}
kde hrana je generována funkcí jednotkového skoku $U(\cdot)$, $r_i$ značí polohu hrany a $n$ jejich celkový počet. Toto vyjádření vynucuje užitečné omezující podmínky.
\begin{itemize}
	\item{První hrana signálu je náběžná (přechod z okolí na první proužek kódu).}
	\item{Polarita po sobě jdoucích hran se musí střídat (po náběžné hraně musí následovat sestupná a naopak).}
\end{itemize}

Při snímání čárového kódu působí řada rušivých vlivů, které způsobují, že signál produkovaný snímačem (obr.~\ref{fig:intro:bbce-barcode-analog-output}) se velmi liší od ideálního dvouúrovňového průběhu. Rušivé vlivy jsou popsány v následujících sekcích.

\section{Konvoluční zkreslení}
\label{sec:theory:conv-distortion}
Čárový kód je na podkladovém materiálu natištěn s určitou neostrostí. Snímání je rovněž neostré, neboť citlivost snímače není soustředěna do nekonečně malého bodu, ale rozprostírá se do okolí. Signál získaný ze snímače je \emph{rozmazán} (obr.~\ref{fig:theory:convolution-distortion}, zatím bez dalšího komentáře).

Rozmazání signálu $c_r(r)$ lze popsat pomocí konvoluce
\begin{align}
	y_r(r) = (c_r \star h_r)(r),
\end{align}
kde $y_r(r)$ je rozmazaný signál a $h_r(r)$ je tzv. \zk{zkPSF} (\zkratkatext{zkPSF}). \zk{zkPSF} je signál, který by byl produkován snímačem při čtení nekonečně úzkého proužku čárového kódu.

Na tvaru \zk{zkPSF} se dominantně podílí snímací prvek. U použitého snímače \cite[obr. A.19]{kadlcik-bbce} je \zk{zkPSF} dána tvarem magnetického pole snímací cívky. \zk{zkPSF} lze zpravidla aproximovat gaussovským impulzem, tj.
\begin{align}
	h_r(r) = \frac{K_0}{\sigma_r\sqrt{2\pi}}e^{-\frac{1}{2}\frac{r^2}{\sigma_r^2}},
\end{align}
kde $\sigma_r$ je rozptyl, udávající šířku \zk{zkPSF}, a $K_0$ je stejnosměrný přenos. Konvoluční zkreslení lze modelovat jako průchod signálu lineárním filtrem s přenosovou funkcí a odpovídající kmitočtovou charakteristikou (odvození v \ref{sec:gaussian-psf-laplace-derivation})
\begin{align}
	H_r(s_r)		&= \mathcal{L}\{h_r\} = K_0{}e^{\frac{1}{2}\sigma_r^2{}s_r^2},	\\
	H_r(\J\omega_r)	&= K_0{}e^{-\frac{1}{2}\sigma_r^2{}\omega_r^2}.
\end{align}
Snímač s gaussovskou \zk{zkPSF} působí jako výrazná dolní propust, následkem čehož dochází k zaoblení a prolnutí hran signálu (obr.~\ref{fig:theory:convolution-distortion}, $w_r$ je šířka nejužšího proužku a mezery).

\fig{sim/conv-distortion}{Ukázka konvolučního zkreslení způsobeného systémem s gaussovskou \zk{zkPSF} a jednotkovým stejnosměrným přenosem}{fig:theory:convolution-distortion}{1}

Při konstrukci snímače je snaha použít snímací prvek s úzkou \zk{zkPSF} (v případě snímače \cite[obr. A.19]{kadlcik-bbce} navinout snímací cívkou na tenké jádro).

Konvoluční zkreslení výrazně zhoršuje čitelnost čárového kódu, a proto bude věnována náležitá pozornost rekonstrukčním metodám.

\section{Nerovnoměrné stlačení signálu}
\label{sec:theory:compression}
Vztah mezi prostorovým ($y_r(r)$) a časovým ($y(t)$) vyjádřením signálu je dán časovou závislostí dráhy $r(t)$ pohybujícího se snímače na čase.
\begin{align}
	y(t) = y_r(r(t))
\end{align}
Jelikož je snímač po povrchu magnetického čárového kódu veden rukou uživatele, rychlost pohybu
\begin{align}
	v(t) = \frac{\dif{}r(t)}{\dif{}t},	\quad v(t) > 0
\end{align}
není konstantní, a tak jsou některé úseky signálu $y(t)$ vůči jiným v čase roztaženy či stlačeny (obr.~\ref{fig:theory:scaling}). Tímto je komplikováno dekódování čárového kódu, neboť je obtížnější rozlišit jednotlivé šířky proužků a mezer.

\fig{img/dist-scaling}{Nerovnoměrné stlačení signálu}{fig:theory:scaling}{1}

Pokud by z úseku signálu $y(t)$ byla extrahována \zk{zkPSF} (v časovém vyjádření), bylo by zjištěno, že její šířka je rovněž ovlivněna stlačením signálu (tj. šířka je nepřímo úměrná rychlost $v$ pohybu snímače; stejnosměrný přenos \zk{zkPSF} zůstává konstantní). Tato proměnnost šířky \zk{zkPSF} do určité míry komplikuje rekonstrukci signálu, neboť některé rekonstrukční metody předpokládají její neměnnost v rámci celého signálu $y(t)$.

\section{Model neurčitosti PSF}
\label{sec:theory:psf-uncertainity}
V časové oblasti je při snímání magnetických čárových kódů snímacím oscilátorem pevně dán pouze tvar \zk{zkPSF}, neboť závisí hlavně na rozložení magnetického pole kolem jeho cívky. Naopak šířka $\sigma$ ani stejnosměrný přenos $K_0$ \zk{zkPSF} pevně dány \emph{nejsou}. Šířka totiž závisí na rychlosti pohybu snímače po čárovém kódu, zatímco stejnosměrný přenos (v případě magnetických čárových kódů) na koncentraci feromagnetika v kódu (oba parametry $\sigma$ a $K_0$ pochopitelně závisí také na vlastnostech snímacího oscilátoru).

Pro spojitý případ (tj. ještě před vzorkováním signálu) lze skutečnou \zk{zkPSF} modelovat jako pevně danou referenční \zk{zkPSF} $h_0(t)$, která byla vhodně rozšířena (činitelem~$\sigma$) při zachování stejnosměrného přenosu a poté zesílena (ziskem $K_0$),
\begin{align}
	h(t) = K_0{}\cdot\frac{h_0\!\left(\frac{t}{\sigma}\right)}{\sigma},	\quad \int_{-\infty}^\infty h_0(t)\,\dif{}t = 1.	\label{eq:theory:psf-uncertainity:model}
\end{align}
Omezující podmínka $\int_{-\infty}^{\infty}h_0(t)\,\dif{}t = 1$ zajišťuje, aby si parametr $K_0$ v modelu zachoval svůj význam stejnosměrného přenosu.

Referenční \zk{zkPSF} $h_0(t)$ lze v případě magnetických čárových kódu zjistit například následovně. Snímacím oscilátorem je přečten tzv. \emph{fantom}, tj. vzorek speciálního \uv{čárového kódu}\footnote{Fantom nemusí být čárovému kódu vůbec podobný. Vhodným fantomem je například tenký ocelový nebo měděný drát zanořený do povrchu podkladového materiálu (aby pro snadné snímání nebyl narušen hladký profil povrchu), čímž v podstatě vzniká obdoba jednotkového impulzu.}, jehož vlastnosti (především rozměry) jsou známy. Z obdrženého signálu je vypočtena \zk{zkPSF}, která je dále multiplikativním faktorem normalizována, aby její stejnosměrný přenos byl jednotkový.

\section{Stejnosměrný drift signálu}
\label{sec:theory:dc-drift}
Snímací oscilátoru produkuje kmitočtově modulovaný signál. Vzhledem k malém kmitočtovému zdvihu (méně než \qty{100}{Hz_{pp}} \cite[tab.~7.1]{kadlcik-bbce}) a velké toleranci kmitočtu nosného signálu, lze tvrdit že užitečný signál je doprovázen obrovskou stejnosměrnou složkou o předem neznámé velikosti.

Zmíněná stejnosměrná složka není konstantní, ale pomalu se mění -- tzv. \emph{drift}. Příčinou je kolísající teplota součástek snímacího oscilátoru.

\fig{img/dist-dc-drift}{Stejnosměrný drift signálu}{fig:theory:dc-drift}{1}

Závislost driftující stejnosměrné složky na čase je obecně nelineární. Měření na snímači magnetického čárového kódu (snímací oscilátor popsaný v \cite[kap.~6.1]{kadlcik-bbce}) však ukazuje, že drift je dostatečně pomalý, a tak jej lze během krátkého (nejvýše několik sekund) časového úseku považovat za lineárně závislý na čase (obr.~\ref{fig:theory:dc-drift}).

\section{Pomaloběžný aditivní signál}
Snímací oscilátor popsaný v \cite[kap.~6.1]{kadlcik-bbce} reaguje i na cizí magnetická pole, včetně zemského (permeabilita jádra snímací cívky je těmito poli mírně ovlivňována).

\fig{img/dist-slow-signal}{Pomaloběžný aditivní signál}{fig:theory:slow-signal}{1}

S tím, jak při snímání čárového kódu prochází snímač s různými mag\-ne\-tic\-kými poli, se do užitečného signálu přidává pomalu se měnící, \emph{pomaloběžná}, složka (obr.~\ref{fig:theory:slow-signal}). Měření ukazuje, že její perioda se řádově odpovídá délce čárového kódu.

Kompenzace popsané složky není jednoduchá, nicméně její velikost je výrazně nižší než velikost užitečného signálu.

\section{Pomaloběžná amplitudová modulace}
Citlivost snímacího oscilátoru popsaného v \cite[kap.~6.1]{kadlcik-bbce} mírně závisí na sklonu cívky vůči povrchu čárového kódu. Užitečný signál je amplitudově modulován (obr.~\ref{fig:theory:slow-am}) pomalu kolísajícím signálem (dle měnícího se sklonu).

\fig{img/dist-slow-am}{Pomaloběžná amplitudová modulace}{fig:theory:slow-am}{1}

Pomaloběžná amplitudová modulace není příliš výrazná a při správném vedení snímače není v signálu pozorovatelná.

\section{Drsnost materiálu}
Drsnost podkladového materiálu se může ve výstupním signálu snímače projevit jako nežádoucí kvaziperiodický signál (viz obr.~\ref{fig:intro:bbce-barcode-analog-output}).

Například snímací oscilátor popsaný v \cite[kap.~6.1]{kadlcik-bbce} reaguje i na mechanický tlak působící na jádro snímací cívky. Kromě kolísajícího mechanického tlaku je s pohybem po drsném povrchu spojeno i rychlé odskakování snímacího prvku.

Vzniklý rušivý signál se projevuje jako rychlé zákmity (např. třetí vrchol zleva na obr.~\ref{fig:intro:bbce-barcode-analog-output}). Spektrum rušením se překrývá pouze s horní částí spektra užitečného signálu, a tak je lze částečně potlačit filtrací dolní propustí (mezní kmitočet dolní propusti však nesmí být příliš nízký, jinak dojde ke zhoršení konvolučního zkreslení).

\section{Fázový šum}
Jako snímač čárového kódu bude použit snímací oscilátor, generující kmitočtově modulovaný signál.

Kmitočtová demodulace z principu vyžaduje nějakou formu časové reference\footnote{V analogových demodulátorech funkci časové reference zastávají setrvačné prvky (např. indukčnost a kapacita rezonančního obvodu v koincidenčním demodulátoru).}, v případě této práce to bude vzorkovací kmitočet pro \zk{zkAD} převodník.

Obsahuje-li demodulovaný nebo vzorkovací kmitočet fázový šum, přenese se do demodulovaného signálu, neboť mezi fázovou a kmitočtovou modulací existuje úzký vztah. Fázový šum nelze po demodulaci odstranit lineární filtrací, protože jeho výkon je soustředěn na nízké kmitočty (kde se rovněž nachází čárový kód).

Pro omezení fázového šumu je vhodné vzorkování signálu \zk{zkAD} převodníkem \emph{netaktovat} kmitočtem, jež byl upravován pomocí \zk{zkPLL}.

\section{Kvantizační šum}
Číslicové zpracování signálu vyžaduje zaokrouhlení jeho okamžitých hodnot do ko\-neč\-né množiny čísel. Vzniklá zaokrouhlovací chyba (\emph{kvantizační šum}) má charakter signálu s pilovitým průběhem a kolísající periodou.

Úroveň kvantizačního šumu klesá o \qty{6}{dB} s každým zvýšením rozlišení číselné reprezentace o jeden bit. I při použití rozlišení pouhých \qty{8}{b} bude odstup kvantizačního šumu od signálu dostatečný, a proto kvantizační šum nebude činit potíže.
