\chapter{Praktická část}

\section{Úvod}

V~praktické části je popsána realizace jednotlivých dílčích bloků a jejich funkce. Při návrhu byl použit program MATLAB a~jeho nástroj Simulink, ve kterém byla vždy ověřena funkčnost komponenty a~vygenerován referenční výstup pro simulace v~programu iSim, ve kterém byla ověřena správnost VHDL popisu pomocí příslušného popisu \emph{testbench}. Každý blok byl testován samostatně, jeho výstup byl uložen do souboru a~načten v~programu MATLAB, kde byl vykreslen jeho průběh a~porovnán s~referencí. Na závěr praktické části srovnání naměřených hodnot s~navrženými a~zhodnocení výsledků. Celkový model obvodu pro Simulink lze nalézt na přiloženém CD \cite{simulink}.

%\section{Blokové schéma}

\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/Blokove_schema}
  \end{center}
  \caption{Blokové schéma}	
  \label{Obr_blok}
\end{figure}

%
\begin{table}[h]
\caption{Parametry amplitudového modulátoru}
\begin{center}
	\begin{tabular}{|l|l|l|}
  \hline
  {\bf Parametr} &{\bf Hodnota} \\
  \hline \hline
  Bitové rozlišení A/D převodníku					&			$8$ bitů							\\
	Hloubka modulace												&			$73 \%$								\\
	Pracovní kmitočet												&			$144 \, \jedn{MHz}$		\\
	Nosný kmitočet													&			$1,125 \, \jedn{MHz}$		\\
  \hline
	\end{tabular}
  \label{tab-parametry_AMmod}
  \end{center}
\end{table}

Blokové schéma je na obrázku \ref{Obr_blok}. Vstupní analogový signál (zvukový signál) je v~prvním kroku převeden na digitální signál, o~což se stará \emph{A/D převodník}. Následuje \emph{změna rozsahu signálu}, který upraví znaménkově vzorky vstupního signálu. Tyto vzorky jsou poté násobeny se vzorky funkce sinus, které jsou načítány z~náhledové tabulky ROM. Vzorky amplitudově modulovaného signálu mají na výstupu rozlišení 16 bitů, což přesahuje možnosti výstupního D/A převodníku. Proto jsou vzorky ještě zaokrouhleny dolů na 8 bitů. Posledním blokem je \emph{D/A převodník}, který převádí vzorky na analogový signál. Návrh a~simulace jednotlivých částí popsaných v~blokovém schématu jsou popsány v~následujících podkapitolách.

Velice důležitá je volba kmitočtu, na kterém celý obvod běží. Jako nejlepší řešení se jeví použít hodnotu $f = 144 \, \jedn{MHz}$, kterou lze syntetizovat pomocí komponenty \emph{DCM\_ADV} v~obvodu FPGA, z~oscilátoru umístěného na vývojové desce ML-506, který má na svém výstupu kmitočet $f = 200 \, \jedn{MHz}$. Tento kmitočet odpovídá i~vzorkovacímu kmitočtu nosného signálu funkce \emph{sinus}, který je $128 \times$ větší, než výstupní kmitočet nosné -- $1,125 \, \jedn{kHz}$ a~díky tomu je možné implementovat paměť ROM se 128 vzorky funkce sinus na jednu periodu. Výstupní kmitočet musí také splňovat normu pro pozemní rozhlasové vysílání (aby byl signál vysílán do správného kanálu). U~takto navrženého obvodu tedy nebude možné měnit kmitočet nosné. 
%
% ================================================================================================
\section{A/D převodník}
Aby mohl obvod FPGA pracovat s~analogovým signálem, je potřeba jej nejprve převést na digitální hodnotu. O~to se stará A/D převodník. 



Původní koncepce použít vstupní A/D převodník jako integrovaný obvod byla nahrazena efektivnějším řešením v~podobě $\Sigma - \Delta$ modulátoru prvního řádu (realizovaného v~obvodu FPGA) v~kombinaci s~analogovým integračním článkem RC, jako v~případě práce publikované v~\cite{straus}. Aby bylo možné toto zapojení realizovat, je potřeba, aby obvod FPGA obsahoval vstupní diferenční páry. To je také důvod, proč bylo zvoleno FPGA Virtex-5 od firmy Xilinx, které je umístěné na vývojové desce ML-506.
\begin{equation}
	f_s \geq 2f_m 
	\label{rov-nyq}
\end{equation}

Vzhledem k~tomu, že pro přenos amplitudově modulovaného audiosignálu v~pásmu středních vln je potřeba potlačit kmitočty $f > 4,5 \, \jedn{kHz}$ (viz kapitola \ref{sec-AM-radio}), pro zachování Nyquistova-Shannonova teorému (rovnice \ref{rov-nyq}) by teoreticky výstupní vzorkovací kmitočet mohl být $f_{s} > 9 \, \jedn{kHz}$. Vzorky s~takto nízkým vzorkovacím kmitočtem jsou poté násobeny se vzorky nosného signálu ($f_{s} = 144 \, \jedn{MHz}$). Toto řešení se ale ukázalo jako nevýhodné z~důvodu schodovitého tvaru amplitudově modulovaného signálu. Řešením tedy bylo zařadit do designu interpolátor, který by zvýšil vzorkovací kmitočet na výstupu A/D převodníku nebo zvýšit vzorkovací kmitočet A/D převodníku -- toto řešení bylo zvoleno. Parametry A/D převodníku jsou shrnuty v~tabulce \ref{tab-ADpozad}.
%
\begin{table}[h]
\caption{Parametry vstupního A/D převodníku}
\begin{center}
	\begin{tabular}{|l|l|l|}
  \hline
  {\bf Parametr} &{\bf Hodnota} \\
  \hline \hline
	Vstupní vzorkovací kmitočet $\Sigma-\Delta$ modulátoru				& 		$7,2 \, \jedn{MHz}$			\\
  Výstupní vzorkovací kmitočet					& 		$112,5 \, \jedn{kHz}$				\\
	Řád převzorkování (OSR)								& 		$64$												\\
	Propustné pásmo (Fpass) 							&			$2 \, \jedn{kHz}$						\\
	Nepropustné pásmo (Fstop) 						&			$4,5 \, \jedn{kHz}$					\\
	Bitové rozlišení											&			$8$ bitů 										\\
	Napěťový rozsah												&			$0$ až $2,5 \, \jedn{V}$		\\
	Odstup signálu od šumu (SNR)					&			$50 \, \jedn{dB}$						\\
  \hline
	\end{tabular}
  \label{tab-ADpozad}
  \end{center}
\end{table}

%
Blokové schéma A/D převodníku je na obrázku \ref{obr-ADblok}. Vstupní analogový signál je přiveden do $\Sigma - \Delta$ modulátoru, který jej moduluje na vzorkovacím kmitočtu $f_s~=~7,2 \, \jedn{MHz}$.
% Blokové schéma A/D
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth-2cm]{obr/AD-blokove-schema}
  \end{center}
  \caption{Blokové schéma vstupního A/D převodníku}	
  \label{obr-ADblok}
\end{figure}
 %
%\newpage
 Důležité je, aby tento kmitočet mohl být dosažen celočíselným vydělením hlavního kmitočtu $f = 144 \, \jedn{MHz}$. Další částí je CIC filtr s~decimačním faktorem $D = 32$, tzn., že na výstupu má $32 \times$ nižší vzorkovací kmitočet, než na vstupu -- $f_s = 225 \, \jedn{kHz}$. Posledním blokem je FIR filtr s~decimačním faktorem $D = 2$ a výstupním vzorkovacím kmitočtem $f_s = 112,5 \, \jedn{kHz}$.
%
%==================================================================================================
\subsection{$\Sigma - \Delta$ modulátor}

% Sigma-delta simulink blokové schéma
\begin{figure}[h!]
  \begin{center}
    \includegraphics[scale=1.8]{obr/sigma-delta-simul}
  \end{center}
  \caption{Blokové schéma $\Sigma - \Delta$ modulátoru v~nástroji Simulink \cite{simulink}}	
  \label{obr-sigmadeltasim}
\end{figure}
%
Pro potřeby simulace byl vytvořen model $\Sigma - \Delta$ modulátoru prvního řádu v~nástroji Simulink programu MATLAB, jehož blokové schéma je na obrázku \ref{obr-sigmadeltasim}. Jádro $\Sigma - \Delta$ modulátoru je použito z~modelu {\tt dspsdadc} obsaženého v~nástroji Simulink. Jako vstupní analogový signál je použit generátor sinusového průběhu o~kmitočtu $f~=~1 \, \jedn{kHz}$ a amplitudě $1 \, \jedn{V}$. Na výstupu komponenty \emph{Zero-Order Hold} je signál o číselných úrovních $+1$ a $-1$, takže tato hodnota může být v~simulaci přivedena přímo na vstup CIC filtru, který vyžaduje 2-bitový znaménkový signál. Vzorkovací kmitočet $\Sigma - \Delta$ modulátoru je $7,2 \, \jedn{MHz}$.


%\subsubsection{VHDL popis vstupního sigma-delta modulátoru}
% Schéma RC FPGA
\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.6]{obr/sigma-delta-in-fpga}
  \end{center}
  \caption{$\Sigma-\Delta$ modulátor prvního řádu v~obvodu FPGA \cite{straus}}	
  \label{Obr_SDfpga}
\end{figure}

Na obrázku \ref{Obr_SDfpga} je schéma zapojení integračního RC článku spolu s~obvodem FPGA \cite{straus}. Vstupní napětí je přivedeno na neinvertující vstup \emph{IN+} digitálního komparátoru v~obvodu FPGA. Na invertující vstup \emph{IN--} je přiveden výstup z~integrátoru, který je tvořen rezistorem a~kondenzátorem připojeným na zem. Standardy pinů u~diferenčního páru jsou LVDS\_25. Výstup z~komparátoru je přiveden na vstup D klopného obvodu, který běží na kmitočtu $144 \, \jedn{MHz}$. Pro generování $\Sigma-\Delta$ streamu o~kmitočtu $7,2 \, \jedn{MHz}$ je řízen děličkou kmitočtu $20 \times$, která je připojena na vstup CE (\emph{clock enable}). Na výstupu D klopného obvodu je $\Sigma-\Delta$ stream, který je dále zpracováván a~také přes výstupní buffer přiveden na analogový integrátor. U~výstupního bufferu jsou standardy pinů nastaveny na LVCMOS\_25. Tento standard umožňuje realizovat A/D převodník pro rozsah napětí $0$ až $2,5 \, \jedn{V}$. Aby bylo možné digitalizovat bipolární signál (např. linkový výstup) je vhodné obvod doplnit o~zapojení s~vazebním kondenzátorem, které je znázorněné na obrázku \ref{Obr_vazebni}. Vstupní signál \texttt{CE} z~děličky kmitočtu je přiveden na klopný obvod D, který jej zpožďuje o~jednu periodu hlavního kmitočtu a~ošetřuje tak případné zákmity. Výstupní signál \texttt{stream CE} z~klopného obvodu D značí při hodnotě \texttt{log 1} nový vzorek na výstupu $\Sigma - \Delta$ modulátoru. VHDL popis $\Sigma - \Delta$ modulátoru je zahrnut v~hlavní komponentě na přiloženém CD \cite{vhdl-main}.

\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.6]{obr/vstupni_vazebni}
  \end{center}
  \caption{Zapojení s~vazebním kondenzátorem pro A/D převodník}
  \label{Obr_vazebni}
\end{figure}

Z~obrázku \ref{Obr_SDfpga} je patrná odlišnost oproti blokovému schématu na obrázku \ref{Obr_SDblok} v~kapitole \ref{sec-sigma-delta-teorie}. S~integrátorem zapojeným před invertujícím vstupem digitálního komparátoru bylo dosaženo lepších výsledků než s~integrátorem za vstupním komparátorem. Podrobnosti lze nalézt v práci \cite{straus}.

%----------------------------------------------------------------------------------------
\clearpage
\subsection{CIC decimační filtr}
%
Decimační CIC filtr má za úkol převést vstupní 2-bitový signál se vzorkovacím kmitočtem $f_{s} = 7,2 \,  \jedn{MHz}$ na výstupní signál s~rozlišením 9-bitů a vzorkovacím kmitočtem $f_s = 225 \, \jedn{kHz}$.  Parametry návrženého filtru v~prostředí MATLAB jsou v~tabulce \ref{tab-CIC}. Kmitočtová charakteristika navrženého CIC filtru je na obrázku \ref{obr_CICfreq}. Zdrojový kód pro návrh lze nalézt v~příloze \ref{priloha-cic} a~na CD \cite{matlab-filter}.
Návrh proběhl v~programu MATLAB. Výhodou návrhu a~následného generování VHDL popisu je, že umožňuje syntézu pro FPGA obvody od různých výrobců. To je veliká výhoda oproti použití \emph{IP core} od firmy Xilinx, což by limitovalo použití pouze na obvody od této firmy.
%
\begin{table}[h]
\caption{Parametry navrženého CIC filtru}
\begin{center}
	\begin{tabular}{|l|l|l|}
  \hline
  {\bf Parametr} &{\bf Hodnota} \\
  \hline \hline
  Decimační faktor					(Decimation factor)				& 		32					\\
  Diferenční zpoždění				(Differential delay)			&			1						\\
  Počet sekcí								(Number of sections)			&			5						\\
  Šířka vstupního slova			(Input word length)				&			2 [bitů]		\\
  Šířka výstupního slova		(Output word length)			&			9 [bitů]		\\
	Vstupní vzorkovací kmitočet		($f_s$)			&			$7,2 \, \jedn{MHz}$		\\
	Výstupní vzorkovací kmitočet		($f_{out}$)			&			$225 \, \jedn{kHz}$		\\
  \hline
	\end{tabular}  
  \label{tab-CIC}
  \end{center}
\end{table}

% Charakteristika CIC
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/CIC_freq_charakteristika}
  \end{center}
  \caption{Kmitočtová charakteristika CIC filtru s decimačním faktorem 32}	
  \label{obr_CICfreq}
\end{figure}


% -----------------------------------------------------------------------------------
\newpage
\subsection{FIR filtr}
FIR filtr kompenzuje pokles přenosu CIC filtru v~propustném pásmu a zároveň zabezpečuje dostatečné potlačeních kmitočtů větších než $f = 4,5 \, \jedn{kHz}$, které filtr CIC sám nedokáže potlačit aniž by zajišťoval přijatelný tvar kmitočtové charakteristiky. Pokud by nebyly dostatečně potlačeny kmitočty vyšší než $4,5 \, \jedn{kHz}$, amplitudově modulovaný signál by svým spektrem zasahoval do sousedních kanálů, čímž by vznikalo rušení a navíc by vyšší kmitočty byly v~sousedním kanálu interpretovány jako kmitočty nižsí. 
% Parametry FIR MATLAB
\begin{table}[h]
\begin{center}
	\begin{tabular}{|l|l|l|}
  \hline
  {\bf Parametr}& {\bf Hodnota} \\
  \hline \hline
  Vstupní vzorkovací kmitočet 		(Sampling frequency)					& 		$225 \, \jedn{kHz}$		\\
	Výstupní vzorkovací kmitočet 		(Sampling frequency)					& 		$112,5 \, \jedn{kHz}$		\\
  Útlum v propust. pásmu					(Attenuation pass)						&			$0,1 \, \jedn{dB}$		\\
  Útlum v nepropust. pásmu				(Attenuation stop)						&			$55 \, \jedn{dB}$			\\
  Propustné pásmo							 		(Passband-edge frequency)			&			$2 \, \jedn{kHz}$			\\
  Nepropustné pásmo								(Stopband-edge frequency) 		&			$4,5 \, \jedn{kHz}$		\\
  Počet sekcí											(Number of sections)					&			$5$										\\
  Diferenční zpoždění							(Differential Delay)					&			$1$										\\
  Decimační faktor								(Decimation factor)						& 		$2$										\\
  Šířka vstupního slova						(Input Word 	Length)					&			$8$ bitů							\\
  Šířka výstupního slova					(Output Word Length)					&			$8$ bitů							\\
	Mód zaokrouhlování							(Round Mode)									&			\emph{nearest}				\\
	Šířka slova koeficientů					(Coefficient Word Length)			&			$13$ bitů				\\
	Řád filtru											(Order)												&			252				\\
  \hline
	\end{tabular}
  \caption{Parametry výsledného FIR filtru}
  \label{tab-FIR}
  \end{center}
\end{table}
Parametry výsledného FIR filtru navrženého v~prostředí MATLAB jsou v~tabulce \ref{tab-FIR}, přenos navrženého FIR filtru je na obrázku \ref{obr_FIRfreq}. Zdrojový kód použitý k~návrhu je příloze \ref{priloha-fir} a na přiloženém CD \cite{matlab-filter}. Odstup signálu od šumu (SNR) je důležitým dynamickým parametrem A/D převodníků a závisí  na něm rozlišení převodníku. Pro sinusový signál teoreticky platí vztah v~rovnici \ref{rov-snr-a}.  \cite{haze}
%
\begin{equation}
\label{rov-snr-a}
	SNR = (6,02N + 1,76) \, [\jedn{dB}]
\end{equation}
%
Vzhledem k tomu, že požadujeme výstupní rozlišení filtru $N = 8$ bitů, můžeme počítat:
%
\begin{equation}
	SNR = (6,02N + 1,76) = 6,02 \cdot 8 + 1,76 \simeq 50 \, \jedn{dB}
	\label{rov-SNR}
\end{equation}
%
Tzn., že požadovaný odstup signálu od šumu je minimálně $50 \, \jedn{dB}$, neboli přenos filtru na kmitočtech větších než $f = 4,5 \, \jedn{kHz}$ musí být maximálně $-50 \, \jedn{dB}$. Z~kmitočtové charakteristiky na obrázku \ref{obr_FIRfreq} je patrné, že je tato podmínka splněna. \\



% Charakteristika FIR
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=(\columnwidth)]{obr/FIR_freq_charakteristika}
  \end{center}
  \caption{Kmitočtová charakteristika FIR filtru 252. řádu}	
  \label{obr_FIRfreq}
\end{figure}

%\clearpage

% Charakteristika kaskády
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=(\columnwidth)]{obr/Cascade_freq_charakteristika}
  \end{center}
  \caption{Kmitočtová charakteristika kaskádně zapojených filtrů}	
  \label{obr_kaskada1}
\end{figure}

% Charakteristika kaskády
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=(\columnwidth)]{obr/All_filters_freq_charakteristika}
  \end{center}
  \caption{Kmitočtová charakteristika CIC, FIR filtru a kaskádně zapojených filtrů}	
  \label{obr_kaskada2}
\end{figure}



Z~blokového schématu A/D převodníku na obrázku \ref{obr-ADblok} je zřejmé, že filtry CIC a~FIR jsou zapojeny kaskádně. Kmitočtová charakteristika takto kaskádně zapojených filtrů je na obrázku \ref{obr_kaskada1}. Přenos na kmitočtech vyšších než $4,5 \, \jedn{kHz}$ je menší než 50~$\jedn{dB}$ a tím je splněna podmínka z~rovnice \ref{rov-SNR} -- digitální filtrace vyhovuje pro 8-bitový A/D převodník\footnote{Vytvořený převodník má skutečně rozlišení 8-bitů pouze za předpokladu, že vstupní $\Sigma-\Delta$ modulátor má potlačení šumu v~pásmu do $4,5 \, \jedn{kHz}$ vyšší než $50 \, \jedn{dB}$. Odvození tohoto parametru přesahuje rámec bakalářské práce.}. Kmitočtové charakteristiky shrnuje obrázek \ref{obr_kaskada2}.

Průběhy v~jednotlivých částech A/D převodníku jsou na obrázku \ref{obr_prubehyAD}. Jedná se o výstup ze simulace v~programu Simulink. Na vstup $\Sigma-\Delta$ modulátoru je přiveden harmonický signál o~kmitočtu $1 \, \jedn{kHz}$ a~amplitudě $1 \, \jedn{V}$ (oranžová). Na jeho výstupu je $\Sigma-\Delta$ modulovaný signál (stream), který nabývá hodnot $+1$ a $-1$ (modrá) na kmitočtu $7,2 \, \jedn{MHz}$. Tento stream je přiveden na vstup CIC filtru, který má svém výstupu vzorky s~kmitočtem $225 \, \jedn{kHz}$ (červená). Ten je přiveden na vstup FIR filtru, na jehož výstupu jsou vzorky s~kmitočtem $112,5 \, \jedn{kHz}$ (zelená). Na výstupu FIR filtru je zřejmé, že je zpožený oproti vstupu. To je způsobeno vynásobením vzorků s~koeficienty, které trvá určitý počet vzorků.

% Signál sigma-delta, CIC, FIR
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/Prubehy_ADC}
  \end{center}
  \caption{Průběhy v~částech A/D převodníku ze simulace v~programu Simulink}	
  \label{obr_prubehyAD}
\end{figure}


%----------------------------------------------------------------------------------------
\clearpage
\subsection{VHDL popis}

Nástroj \emph{fdatool} v~programu MATLAB umožňuje z~navrženého filtru vygenerovat přímo jeho HDL popis (VHDL nebo Verilog). Výhodou CIC filtru je to, že narozdíl od filtru FIR jeho struktura neobsahuje žádnou násobičku. VHDL popis CIC filtru byl vegenerován pomocí výše zmíněného nástoje \emph{fdatool}. Generování VHDL popisu FIR filtru pomocí tohoto nástroje se ukázalo jako nevýhodné, protože při syntéze takto vzniklého kódu byl v~prostředí ISE 14.2 maximální dosažitelný pracovní kmitočet $28,328 \, \jedn{MHz}$, což je velice malá hodnota při porovnání s~hlavním pracovním kmitočtem $144 \, \jedn{MHz}$. Výsledek syntézy pro různé popisy FIR filtru shrnuje tabulka \ref{tab-FIR-comp}.

% Tabulka FIR filtr srovnání
\begin{table}[h]
\caption{Srovnání syntézy VHDL popisu FIR filtru}
\begin{center}
	\begin{tabular}{|l|l|l|l|l|}
  \hline
  {\bf Parametr} & {\bf ASIC Filter} & {\bf fdatool serial}  & {\bf Dostupné}\\
	& {\bf Generator} & & \\
  \hline \hline
		Maximální kmitočet 						&		$131,822 \, \jedn{MHz}$	&		$28,328 \, \jedn{MHz}$	&	--	\\
		Počet řezů(Slice register usage)					&		43					&		2337 $(7\%)$		& 32640					\\
		Počet LUT (Slice LUTs usage)							&		175					&		2527 $(7\%)$		& 32640					\\
  \hline
	\end{tabular}
  \label{tab-FIR-comp}
  \end{center}
\end{table}

Z~tabulky \ref{tab-FIR-comp} je patrné, že pracovní kmitočet FIR filtru z~nástroje \emph{Asic Filter Generator} lépe vyhovuje požadovanému pracovnímu kmitočtu. Vzhledem k~tomu, že FIR filtr nemůže běžet na pracovním kmitočtu $144 \, \jedn{MHz}$, je ve výsledné aplikaci celý blok digitální filtrace provozován na polovičním kmitočtu $72 \, \jedn{MHz}$.

Na obrázku \ref{obr_filter_schema} je schéma znázorňující propojení filtrů CIC a FIR. Oba filtry běží na kmitočtu $72 \, \jedn{MHz}$, který je získán vydělením hlavního kmitočtu dvěma. Vstupní signál \emph{stream} ze $\Sigma-\Delta$ modulátoru, který je typu \texttt{std\_logic\_vector} a~nabývá hodnot $0$ nebo $1$, je přiveden do kombinační logiky, která jej upravuje na 2-bitový signál, který nabývá hodnot $+1$ nebo $-1$, aby CIC filtr mohl pracovat se $\Sigma-\Delta$ modulovaným signálem. Vstupní signál \texttt{CE in} (\emph{clock enable}) ze $\Sigma-\Delta$ modulátoru značí, že se na vstupu objevil nový vzorek signálu a trvá po dobu jedné periody hlavního kmitočtu. Vzhledem k~tomu, že blok CIC filtru běží na polovičním kmitočtu, vstupní stavový automat (dále jen SA) zajišťuje, aby na svém výstupu měl signál \texttt{CE out}, který bude trvat jednu periodu kmitočtu, na kterém běží filtry ($72 \, \jedn{MHz}$) -- vztaženo k~hlavnímu kmitočtu, dvě periody. Dále je mezi filtry CIC a FIR zařazena kombinační logika, která ošetřuje krajní hodnoty na výstupu CIC filtru, které mohou v~nejhorším případě dosáhnout hodnot $+128$ a $-129$. Pokud se tak stane, na vstup FIR filtru je přivedena hodnota $+127$, resp. $-128$.

Další částí je výstupní SA, který umožňuje zpracování signálu z~FIR filtru blokem, který běží na kmitočtu $144 \, \jedn{MHz}$. Signál \texttt{CE out} z~výstupu FIR filtru je ve stavu \texttt{log 1} po dobu dvou period hlavního kmitočtu a další blok by zpracoval vzorek dvakrát. Výstupní SA zajistí, že stav \texttt{log 1} bude na výstupu pouze po jednu periodu hlavního kmitočtu. 

VHDL popis obou filtrů lze nalézt na přiloženém CD -- pro CIC filtr \cite{vhdl-cic}, pro FIR filtr \cite{vhdl-fir}, komponenty spojující tyto filtry \cite{vhdl-top-filter}, testbench pro CIC filtr \cite{vhdl-cic-tb}, testbench pro FIR filtr \cite{vhdl-fir-tb}, testbench pro spojení filtrů \cite{vhdl-filter-tb}.

\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.4]{obr/filter_schema}
  \end{center}
  \caption{Schéma zapojení propojení CIC a FIR filtru}	
  \label{obr_filter_schema}
\end{figure}

%----------------------------------------------------------------------------------------
%\clearpage
\section{Změna rozsahu}
\label{sec-rozsah}

Aby mohlo být v~samotném modulátoru provedeno násobení vzorků audiosignálu se vzorky nosného signálu a byl tak získán amplitudově modulovaný signál se spektrem nosné a oběma postranními pásmy, je výhodné, aby audiosignál dosahoval pouze kladných hodnot -- takto bude ovlivňovat pouze amplitudu nosné. Změna rozsahu je provedena vytvořením převodní náhledové tabulky. Na obrázku \ref{obr_signed_unsigned} je znázorněna převodní charakteristika pro změnu vstupního signálu \emph{signed} na výstupní signál \emph{unsigned}. 

V~nástroji simulink byl tento převod realizován komponentou \emph{MATLAB Function Block}, která umožňuje upravit signál pomocí funkce z~programu MATLAB, resp. přímo \emph{m-file}. Funkce získaná z~lineární regrese je v~rovnici \ref{rov-regrese}.
%
% Rovnice regrese
\begin{equation}
	y = 0,843 \cdot x + 147,91
	\label{rov-regrese}
\end{equation}
%
Minimální vstupní hodnota $-128$ odpovídá výstupní hodnotě $40$ a maximální hodnota na vstupu $127$ výstupní hodnotě $255$. To, jakou hodnotu na výstupu bude mít minimální hodnota ze vstupu určuje ve výsledku hloubku modulace (při maximálním rozkmitu signálu).

%
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/signed_unsigned}
  \end{center}
  \caption{Převodní charakteristika pro změnu rozsahu audiosignálu}	
  \label{obr_signed_unsigned}
\end{figure}
%
\begin{equation}
	m [\%] = \frac{S_{\rm max} - S_{\rm min}}{S_{\rm max} + S_{\rm min}} = \frac{255-40}{255+40} \doteq 73 \% 
	\label{rov-hloubka-am}
\end{equation}
%
Při minimální hodnotě $40$ a maximální hodnotě $255$ to odpovídá hloubce modulace $73 \%$ (viz rovnice \ref{rov-hloubka-am} \cite{biolek}). Na obrázku \ref{obr_signed_unsigned_prubeh} je znázorněn výstup z~předchozího bloku~--~FIR filtru (červeně) a výstupní signál po převodu rozsahu (modře) pro harmonický signál o~kmitočtu $f = 1 \, \jedn{kHz}$.

Případná kompenzace nelineární charakteristiky A/D převodníku by byla vhodná provést pomocí úpravy této náhledové tabulky.
%
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/signed_unsigned_prubeh}
  \end{center}
  \caption{Vzorky na vstupu a výstupu převodníku rozsahu}	
  \label{obr_signed_unsigned_prubeh}
\end{figure}
%
%
%
\newpage
\subsection{VHDL popis}
V~jazyce VHDL byla vytvořena pomocí skriptu v~programu MATLAB náhledová tabulka, jejíž část je znázorněná v~tabulce \ref{tab-VHDL-prevod}. Zdrojový kód z~\emph{m-file} z~programu MATLAB je v~příloze \ref{priloha-prevod} a~na přiloženém CD \cite{matlab-scale}. Celý VHDL popis lze taktéž nalézt na přiloženém CD \cite{vhdl-signal-scale}.
%
% Tabulka VHDL LUT převodu
\begin{table}[h]
\caption{Příklad VHDL popisu náhledové tabulky pro převod rozsahu}
\begin{center}
	\begin{tabular}{|l|l|}
  \hline
  	\texttt{"00101000"\,  {\color{blue} when} "10000000",   {\color{ForestGreen} --  40 ... -128}}		\\
		\texttt{"00101001"\,  {\color{blue} when} "10000001",   {\color{ForestGreen} --  41 ... -127}} 	\\
		\texttt{"00101010"\,  {\color{blue} when} "10000010",   {\color{ForestGreen} --  42 ... -126}} 	\\
		\texttt{"00101011"\,  {\color{blue} when} "10000011",   {\color{ForestGreen} --  43 ... -125}} 	\\
		\texttt{"00101011"\,  {\color{blue} when} "10000100",   {\color{ForestGreen} --  43 ... -124}} 	\\

  \hline
	\end{tabular}
  \label{tab-VHDL-prevod}
  \end{center}
\end{table}

%----------------------------------------------------------------------------------------
\newpage
\section{Náhledová tabulka (ROM) funkce sinus}
Vzorky nosného harmonického signálu jsou uloženy v~náhledové tabulce. Jedna perioda funkce sinus je navzorkována 128 vzorky s~rozlišením 8 bitů (viz obrázek \ref{obr-sinus_rom_vzorky}). Při čtení vzorků na hlavním pracovním kmitočtu $144 \, \jedn{MHz}$ představují nosný harmonický signál o kmitočtu $1,125 \, \jedn{kHz}$.
%
\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/sinus_rom_vzorky}
  \end{center}
  \caption{Vzorky funkce sinus v~paměti ROM}	
  \label{obr-sinus_rom_vzorky}
\end{figure}
%
Schéma zapojení náhledové tabulky je znázorněno na obrázku \ref{obr_sinus_zapojeni}. Čítač s~každou náběžnou hranou hlavního kmitočtu inkrementuje výstupní  7-bitovou adresu od 0 do 127. Tato adresa je přivedena do náhledové tabulky, ze které je s~náběžnou hranou přečten příslušný vzorek a přiveden na výstup. Vzhledem k~tomu, že výstupní vzorky jsou na hlavním pracovním kmitočtu, je zbytečné zavádět signál pro detekci nového vzorku \emph{clock enable}, protože nový vzorek je vždy detekován s~náběžnou hranou hlavního kmitočtu.
%
\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.4]{obr/Sinus_ROM}
  \end{center}
  \caption{Zapojení náhledové tabulky pro vzorky funkce sinus}	
  \label{obr_sinus_zapojeni}
\end{figure}
%
% --------------------------------------------------------
\newpage
\subsection{VHDL popis}
Generování VHDL popisu náhledové tabulky bylo provedeno pomocí skriptu \emph{m-file} v~programu MATLAB. Zdrojový kód souboru lze nalézt v~příloze \ref{sec-romsinus} a~na přiloženém CD \cite{matlab-rom-sinus}. Příklad výstupu z~programu MATLAB je uveden v~tabulce \ref{tab-sinus-ROM}. Kompletní VHDL popis této komponenty lze nalézt na přiloženém CD \cite{vhdl-rom-sinus}.

% Tabulka VHDL LUT sinus
\begin{table}[h!]
\caption{Příklad VHDL popisu náhledové tabulky vzorků funkce sinus \cite{vhdl-rom-sinus}}
\begin{center}
	\begin{tabular}{|l|l|}
  \hline
  	\texttt{("11111010"),  {\color{ForestGreen} --  66}}		\\
		\texttt{("11110111"),  {\color{ForestGreen} --  67}} 	\\
		\texttt{("11110100"),  {\color{ForestGreen} --  68}} 	\\
		\texttt{("11110001"),  {\color{ForestGreen} --  69}} 	\\
		\texttt{("11101110"),  {\color{ForestGreen} --  70}} 	\\

  \hline
	\end{tabular}
  \label{tab-sinus-ROM}
  \end{center}
\end{table}

%----------------------------------------------------------------------------------------
%
\clearpage
\section{Amplitudový modulátor}
Z~blokového schématu na obrázku \ref{Obr_blok} je patrné, že abychom dostali amplitudově modulovaný signál, je nutné mezi sebou vynásobit vzorky nosného signálu a vzorky upraveného audio signálu. Na obrázku \ref{obr_am_modul_schem} je znázorněno zapojení amplitudového modulátoru v~obvodu FPGA.
%
\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.7]{obr/AM_modulator_schema}
  \end{center}
  \caption{Zapojení amplitudového modulátoru v~obvodu FPGA}	
  \label{obr_am_modul_schem}
\end{figure}
%
Na vstupu jsou zařazeny klopné obvody D. Celý blok opět běží na hlavním kmitočtu $144 \, \jedn{MHz}$. Vzorky audio signálu jsou na výstup klopného obvodu načteny vždy s~náběžnou hranou a vstupem \texttt{CE} v~úrovni \texttt{log 1}. Na výstupu násobičky jsou vzorky amplitudově modulovaného signálu DSB (viz kapitola \ref{sec-AM- teorie}). Za násobičkou je zařazen výstupní D klopný obvod. Průběh audio signálu na vstupu a~amplitudově modulovaného signálu na výstupu je zobrazen na obrázku \ref{obr_am_modul_prubeh}. Z~toho obrázku je zřejmé, že modulační audio signál tvoří obálku modulovaného signálu.

Zaokrouhlení je provedeno zahozením spodních 8 bitů. Výsledný signál má rozlišení 8 bitů, což je pro přenos amplitudově modulovaného audio signálu v~pásmu středních vln dostačující.

\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/am_prubeh}
  \end{center}
  \caption{Výstup z~násobičky}	
  \label{obr_am_modul_prubeh}
\end{figure}

VHDL popis amplitudového modulátoru lze nalézt na přiloženém CD \cite{vhdl-am}.

% --------------------------------------------------------------------------------------
\newpage
\section{D/A převodník}
Jako výstupní D/A převodník je použitý $\Sigma - \Delta$ modulátor prvního řádu, jehož výstup je přivedený na pin FPGA obvodu. z~blokového schématu na obrázku \ref{Obr_blok} je zřejmé, že D/A převodník převádí digitální vzorky amplitudově modulovaného signálu na analogovou veličinu (napětí). Na tento pin je připojena ještě dolní propust druhého řádu, která vyhlazuje nežádoucí složky spektra. 
\subsection{$\Sigma - \Delta$ modulátor}
Model z~programu Simulink výstupního $\Sigma - \Delta$ modulátoru je znázorněn na obrázku \ref{obr_sigma_delta_out_sim}.
%
\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.75]{obr/sigma_delta_out}
  \end{center}
  \caption{Model výstupního Sigma-Delta modulátoru v~nástroji Simulink \cite{simulink}}	
  \label{obr_sigma_delta_out_sim}
\end{figure}
%
\newpage
Vzorky z~násobičky s~rozlišením 8 bitů jsou přivedeny na vstup sumačního bloku, kde je proveden rozdíl s~výstupem ze zpětné vazby. Výstupem prvního sumačního bloku je 9 bitové číslo, které je přivedeno na druhý sumační blok, který společně se zpožďovacím obvodem tvoří integrátor. Na výstupu integrátoru je signál s~rozlišením 10 bitů, který je kvantifikátorem (lze si jej představit jako 1-bitový D/A převodník) převeden na hodnotu $1$, pokud je na vstupu kladná hodnota, resp. na hodnotu $-1$, je-li na vstupu záporná hodnota.

\subsection{VHDL popis}
VHDL popis výstupního $\Sigma-\Delta$ modulátoru a~testbench lze nalézt na přiloženém CD \cite{vhdl-sdout}, \cite{vhdl-sdout-tb}. 

\subsection{Dolní propust}
Výstup ze $\Sigma - \Delta$ modulátoru, resp. výstupní 1-bitový Sigma-Delta \emph{bitstream} obsahuje ve svém spektru amplitudově modulovaný signál a další šum. Proto je důležité odstranit vyšší kmitočty než je nosný kmitočet $1,125 \, \jedn{kHz}$ amplitudově modulovaného signálu. V~nástroji Simulink byla použita komponenta \emph{Analog Butterworth LP filter}. Výstup z~této komponenty je znázorněn na obrázku \ref{obr_lowpass_prubeh}. Zapojení pasivní dolní propusti s~obvodem FPGA je na obrázku \ref{obr_fpga_lowpass}.

\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/lowpass_out}
  \end{center}
  \caption{Výstup z~komponenty \emph{Analog Butterworth LP filter} v~nástroji Simulink}	
  \label{obr_lowpass_prubeh}
\end{figure}

\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=1.75]{obr/FPGA_lowpass}
  \end{center}
  \caption{Schéma zapojení pasivní dolní propusti s~obvodem FPGA}	
  \label{obr_fpga_lowpass}
\end{figure}

Hodnota rezistoru $120 \, \Omega$ byla zvolena a k~němu byla dopočítaná hodnota kondenzátoru podle rovnice \ref{rov-lowpass}. Hodnota je zaokrouhlena na nejbližší vyšší hodnotu z~řady E12, která je $1,2 \, \jedn{nF}$. Vzhledem k~toleranci součástek z~řady E12 $\pm 10 \%$ je tato odchylka zanedbatelná.
%
\begin{equation}
	C = \frac{1}{2 \pi f R} = \frac{1}{2 \cdot 3,14152654 \cdot 1,125 \cdot 10^{6} \cdot 120} = 1,178 \, \jedn{nF} \doteq 1,2 \, \jedn{nF}
	\label{rov-lowpass}
\end{equation}
%
% ================================================================================================
\clearpage
\section{Verifikace VHDL popisu}
VHDL popis všech dílčích bloků je nutné verifikovat, tzn. ověřit, jestli jejich vnitřní a výstupní signály jsou správné. Verifikace byla provedena v~simulačním nástroji iSim, který je obsažený ve výjovém prostředí ISE 14.2 od firmy Xilinx. Ze správně funkčního modelu v~nástroji Simulink byly vstupní a výstupní signály jednotlivých bloků uloženy do binárních souborů (typu \emph{int32}). Pro každý dílčí blok byl vytvořen testbench, ve kterém je vždy načten referenční vstup, který je přiveden na vstup VHDL modelu a výstup ze souboru je porovnán s~hodnotou na výstupu modelu. Vzhledem k~tomu, že pro popis FIR filtru nebyl použit nástroj \emph{fdatool} obsažený v~nástroji MATLAB, tyto výstupy nebylo možné touto metodou ověřit. Proto byl výstup z~nástroje iSim opět uložen do souboru, tento soubor byl načten v~programu MATLAB, kde byl vykreslen jeho průběh a~porovnán s~referenční hodnotou -- skript lze nalézt na CD \cite{matlab-read}. Stejný postup byl aplikován u~bloku pro násobení vzorků audio signálu a vzorků funkce sinus (amplitudový modulátor), protože při generování referenčního průběhu v~nástroji Simulink bylo použito rozdílné zaokrouhlování vzorků nosného kmitočtu (liší se maximálně o~LSB). Všechny výsledky simulace se shodují s~referenčními výstupy z~nástroje Simulink.

Na obrázku \ref{obr_testbench} je znázorněna verifikace filtru CIC v~simulačním prostředí iSim.

\begin{figure}[h]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/isim}
  \end{center}
  \caption{Verifikace CIC filtru v~prostředí iSim}	
  \label{obr_testbench}
\end{figure}

Na přiloženém CD se nachází testbench pro každý blok včetně testbenche, který ověřuje simulaci celé digitální části -- tj. bez vstupního $\Sigma-\Delta$ modulátoru \cite{vhdl-main-tb}. Skripty v~jazyce MATLAB pro načítání výstupních dat ze simulace VHDL popisu jsou taktéž přiloženy na CD \cite{matlab-read}.


% ================================================================================================
\clearpage
\section{Výsledný obvod}
Fotografie vstupního modulu s~pasivními součástkami pro integrátor $\Sigma - \Delta$ modulátoru a vstupním vazebním kondenzátorem umístěného na vývojové desce je na obrázku \ref{obr_foto_modul}.

\begin{figure}[h]
  \begin{center}
    \includegraphics[width=13cm]{obr/foto-modul}
  \end{center}
  \caption{Vstupní modul na vývojové desce ML-506}	
  \label{obr_foto_modul}
\end{figure}

Obsazenost dostupných hradel v~obvodu FPGA po implementaci celého designu je shrnuta v~tabulce \ref{tab-implementace}. Z~dostupných hradel v~obvodu je využito cca $1\%$.

% Tabulka FIR filtr srovnání
\begin{table}[h]
\caption{Využití prostředků dostupným v~FPGA obvodu Virtex-5 po implementaci }
\begin{center}
	\begin{tabular}{|l|l|l|l|}
  \hline
  {\bf Parametr} & {\bf Hodnota} & {\bf Dostupné}\\
  \hline \hline
		Počet řezů (Slice register usage)			&		284 $(1\%)$		& 32640					\\
		Počet LUT (Slice LUTs usage)					&		449 $(1\%)$		& 32640					\\
  \hline
	\end{tabular}
  \label{tab-implementace}
  \end{center}
\end{table}

% ================================================================================================
\clearpage
\section{Naměřené hodnoty}
\begin{figure}[h]
  \begin{center}
    \includegraphics[width=\columnwidth]{obr/AM_mereni}
  \end{center}
  \caption{Naměřené hodnoty vstupního a výstupního signálu}	
  \label{obr_am_mereni}
\end{figure}
%
Na vstup modulátoru byl z~generátoru Agilent 33210A přiveden harmonický signál o hodnotě $U_{\rm MAX} = 2,5 \, \jedn{V}$ a $U_{\rm MIN} = 0 \, \jedn{V}$ (vzhledem k~pokrytí maximální rozsahu vstupního A/D převodníku) a kmitočtu $f = 1 \, \jedn{kHz}$. Výstup modulátoru byl sledován pomocí osciloskopu Agilent DSO1002A.
% Tabulka VHDL LUT sinus
\begin{table}[h]
\caption{Hodnoty pro výpočet hloubky modulace na výstupu modulátoru}
\begin{center}
	\begin{tabular}{|l|l|l|}
  \hline
  	\textbf{Čas [s]}		&		\textbf{Napětí [V]}		\\
		\hline \hline
		$0,86$		&		1,76		\\
		$0,12$		&		1,30		\\
  \hline
	\end{tabular}
  \label{tab-am-mereni}
  \end{center}
\end{table}
%
\newpage
 Data získaná z~osciloskopu jsou na obrázku \ref{obr_am_mereni}. Z~obrázku je zřejmé, že amplitudově modulovaný signál je zpožděný oproti vstupnímu signálu. Toto zpoždění způsobuje z~velké části FIR filtr, který počítá jednotlivé vzorky. Z~naměřených hodnot bylo odečteno napětí v~místech, kde modulovaný signál dosahuje minimální a~maximální amplitudy. Tyto hodnoty jsou v~tabulce \ref{tab-am-mereni}. 
%
\begin{equation}
	m [\%] = \frac{S_{\rm max} - S_{\rm min}}{S_{\rm max} + S_{\rm min}} = \frac{0,86-0,12}{0,86+0,12} \doteq 76 \% 
	\label{rov-hloubka-am-vystup}
\end{equation}
%
Podle naměřených hodnot můžeme podle rovnice \ref{rov-hloubka-am-vystup} \cite{biolek} vypočítat hloubku amplitudové modulace (viz kapitola \ref{subsec-DSB}) na výstupu.
Vypočtená hodnota $m = 76 \%$ je hodnota odpovídající navrhované $m = 73 \%$ v~kapitole \ref{sec-rozsah}. Odchylka může být způsobena rušivýmy signály, které jsou nasuperponovány na výstupní signál, jelikož vývojová deska není navrhována na šíření analogových signálů.




