Jazyky zvolené pre vypracovanie práce boli \href{https://go.dev/}{Go} (výpočty) a Python (vizualizácie). Pseudonáhodné dáta reprezentujúce signál boli vygenerované programom Matlab - Simulink\footnotemark{}. \\ \\ Kód je dostupný na nasledujúcom odkaze:\\ \url{https://git.dotya.ml/wanderer/ak9im/src/p2}. \\ Kód tohto protokolu je dostupný na nasledujúcom odkaze:\\ \url{https://git.dotya.ml/wanderer/ak9im-proto2}. \footnotetext{Matlab bol používaný na systéme Arch Linux (btw\texttrademark) \href{https://bbs.archlinux.org/viewtopic.php?id=277970}{po} \href{https://bbs.archlinux.org/viewtopic.php?pid=2051175#p2051175}{prekonaní} \href{https://uk.mathworks.com/matlabcentral/answers/1798895-invalid-cross-device-link-18-when-saving-a-file-on-arch-linux}{viacerých} \href{https://www.mathworks.com/matlabcentral/answers/93703-why-do-i-receive-host-id-error-after-selecting-a-license-file-during-installation}{problémov} s~inštaláciou, aktiváciou, QT + Wayland, \texttt{libfreetype.so} a inými.} \subsection{Spojitý model} \begin{equation*} G(s) = \frac{1}{2s^2 + 5s + 1} \end{equation*} \subsection{Simulinkové schéma pre simuláciu pseudonáhodného signálu} \begin{figure}[ht] \centering \includegraphics[width=.80\textwidth]{res/model} \caption{Simulinkové schéma pre simuláciu pseudonáhodného signálu} \label{fig:model} \end{figure} Pre potreby tohto protokolu boli vygenerované nové dáta (neboli použité dáta vygenerované pre protokol 1). \newpage \subsection{Perióda vzorkovania} \begin{figure}[ht] \centering \includegraphics[width=.80\textwidth]{res/step_response} \caption{Prechodová charakteristika modelu podľa \texttt{step(1, [2 5 1])}} \label{fig:stepresponse} \end{figure} Prechodová charakteristika zobrazená na obrázku~\ref{fig:stepresponse} bola získaná príkazom \texttt{step(1 [2 5 1])} v Matlabe. V amplitúde nadobúda stabilne hodnotu $1$ po cca.~30 sekundách, perióda vzorkovania na výstupoch \textit{u} a \textit{y} bola teda podľa zadania zvolená na 3s (aktívna časť = 10 vzoriek $\rightarrow 30s / 10 = 3s$). Minimálny počet vzoriek bol predpísaný na 250, dĺžka vzorkovania bola preto nastavená na 750s. \newpage \subsection{Vybudenie sústavy pseudonáhodným signálom} Sústava zobrazená na obrázku~\ref{fig:model} bola vybudená pseudonáhodným signálom s rovnomerným (\textit{uniform}) rozložením hodnôt v intervale $<-1;1>$. Vzorkovaním signálu bolo získaných celkom 251 hodnôt. \begin{figure}[ht] \centering \includegraphics[width=.35\textwidth]{res/samplecount} \caption{Počet vzoriek zachytených na výstupoch \textit{u} a \textit{y}} \label{samplecount} \end{figure} \subsection{Uloženie zachytených vzoriek do CSV} Kvôli ďalšiemu spracovávaniu dát v Pythone bolo nutné dostať vzorky z Matlabu do CSV súboru. To sa dalo našťastie celkom jednoducho vykonať nasledujúcimi príkazmi: \begin{figure}[h] \centering \begin{varwidth}{\linewidth} \begin{verbatim} >> % matlab command prompt >> cd >> m = [out.u, out.y] >> writematrix(m, 'data/m.csv') \end{verbatim} \end{varwidth} \caption{Uloženie dát do CSV súboru} \end{figure} Najskôr sme sa premiestnili do \texttt{}, následne sme si so zachytených vzoriek (jednorozmerné polia rovnakej dĺžky) vytvorili \textit{maticu}. Táto matica bola nakoniec zapísaná príkazom \texttt{writematrix} \footnote{V predošlom protokole sa vyskytovala chyba, keďže som poznamenal, že bol použitý príkaz \texttt{matrixwrite}} do želaného súboru. Súbor bolo dodatočne potrebné manuálne upraviť - pridať mu CSV ``hlavičku'' s~názvami stĺpcov, aby ho bolo možné za pomoci knižnice \href{https://pandas.pydata.org/}{\texttt{Pandas}} ďalej bez problémov spracovávať (vizualizácie). Go balíček \texttt{csv} zo štandardnej knižnice takýto nárok/problém nemá, takže bolo možné po \textit{odstránení} hlavičky dáta zo súboru v Go programe načítať a skonvertovať to natívnych typov (\texttt{[]float64}...) pomocou funkcionality balíčka štandardnej knižnice \texttt{strconv}. Pre referenciu viď súbor \texttt{p2/data.go}. Po ukončení výpočtov program zapíše dáta do súborov v priečinku \texttt{p2/data}. Tieto sú ďalej použité na vizualizáciu (grafy v tomto protokole). \newpage \subsection{Získané signály} \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/signal_u} \caption{Náhodne vygenerovaný signál pred aplikáciou filtra - u} \label{fig:signalorig} \end{figure} \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/signal_y} \caption{Náhodne vygenerovaný signál po aplikácii filtra - y} \label{fig:signalfiltered} \end{figure} \newpage \subsection{Štatistické charakteristiky\ 1.\ a\ 2.\ rádu} Vypočítali sme štatistické charakteristiky prvého a druhého rádu, ktorými sú: \begin{itemize} \item stredná hodnota pre u, y (viď tabuľka~\ref{table:stats}) \item rozptyl pre u, y (viď tabuľka~\ref{table:stats}) \item koeficient korelácie (viď tabuľka~\ref{table:stats}) \item kovariančná matica (viď tabuľka~\ref{table:covmatrix}) \item autokorelačná funkcia pre u, y (obr.~\ref{fig:autocorrelation-u},~\ref{fig:autocorrelation-y}) \item vzájomne korelačná funkcia (obr.~\ref{fig:mutualcorrelation-uy},~\ref{fig:mutualcorrelation-yu}) \end{itemize} \newpage \subsection{Korelácia} \subsubsection{Autokorelačná funkcia u} \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/autocorrelation_u} \caption{Autokorelačná funkcia u} \label{fig:autocorrelation-u} \end{figure} \subsubsection{Autokorelačná funkcia y} \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/autocorrelation_y} \caption{Autokorelačná funkcia y} \label{fig:autocorrelation-y} \end{figure} \newpage \subsubsection{Vzájomne korelačná funkcia} \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/mutual_correlation_uy} \caption{Vzájomne korelačná funkcia uy} \label{fig:mutualcorrelation-uy} \end{figure} \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/mutual_correlation_yu} \caption{Vzájomne korelačná funkcia yu} \label{fig:mutualcorrelation-yu} \end{figure} \newpage \subsection{Štatistické charakteristiky - súhrn} \begin{table}[!hbt] \centering \begin{tabular}{r|cc} & \textbf{u} & \textbf{y} \\ \hline \textbf{u} & 1.1583640130324268647 & 0.015851330298377188 \\ \textbf{y} & 0.015851330298377188 & 0.0247634923750309523 \\ \end{tabular} \caption{Kovariančná matica} \label{table:covmatrix} \end{table} Zo zaznamenaných dát signálov sme spočítali odhady stredných hodnôt a rozptylov. V~tabuľke~\ref{table:stats} môžeme vidieť výrazné posuny signálu po prechode filtrom oproti pôvodnému signálu hlavne v rozptyle, ale zmeny zachytila aj stredná hodnota. \begin{table}[!hbt] \centering \begin{tabular}{r|cc} & \textbf{u} & \textbf{y} \\ \hline \textbf{$\hat{\mu}_{u,y}$ (stredná hodnota)} & -0.0731240350331255062 & -0.0109705557504332952 \\ \textbf{$\hat{\sigma}^{2}_{u,y}$ (rozptyl)} & 1.1583640130324268647 & 0.0247634923750309523 \\ \textbf{$\hat{r}(U,Y)$ (koeficient korelácie)} & \multicolumn{2}{c}{0.09359167949834103} \\ \end{tabular} \caption{Súhrn štatistických charakteristík} \label{table:stats} \end{table} Hodnota koeficientu korelácie je mierne kladná, čo znamená jemný náznak tvrdenia, že signály spolu súvisia. \newpage \subsection{Impulzná odozva} Pomocou \textit{Control System Toolbox} (CST) a \textit{System Identification Toolbox} (SIT) sme vypočítali zo zadaného modelu \textbf{impulznú odozvu}. \begin{figure}[h] \centering \begin{varwidth}{\linewidth} \begin{verbatim} >> % define a system from the transfer function >> sys = tf(1, [2 5 1]) >> % get impulse response from CST >> ir = impulse(sys) >> % get impulse response from SIT >> ircra = cra(out.u, out.y) >> >> % save CST impulse response to file >> writematrix(ir, 'data/ir.csv') >> % save SIT impulse response to file >> writematrix(ircra, 'data/ircra.csv') \end{verbatim} \end{varwidth} \caption{Výpočet impulznej odozvy pomocou CST a SIT} \end{figure} \subsubsection{Výpočet impulznej odozvy} Výpočet hodnôt impulznej odozvy \texttt{g()} pomocou korelačnej analýzy: hodnoty impulznej funkcie vypočítame diskretizáciou Wiener-Hopfovej rovnice. Po dikretizácii Wiener-Hopfovej rovnice dostáváme: \begin{equation*} R_{uy} (\tau)=\sum_{i=1}^N R_{uu} (\tau - i\Delta t) g(i\Delta t) \Delta t \end{equation*} Výslednú impulznú charakteristiku vykreslenú na základe odhadu impulznej funkcie je možné vidieť na obrázku~\ref{fig:imp-res}. \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/impulse_func_estimate} \caption{Impulzná charakteristika pomocou funkcie \texttt{gCustom}} \label{fig:imp-res} \end{figure} \newpage \subsubsection{Porovnanie odhadov impulznej funkcie} Porovnanie odhadov impulznej funkcie \texttt{gCustom} s odhadom impulznej funkcie zo SIT (Matlab príkaz \texttt{cra(out.u, out.y)}) je možné vidieť na obrázku~\ref{fig:imp-res-comp}. \begin{figure}[ht] \centering \includegraphics[width=.57\textwidth]{res/impulse_func_estimate_comparison} \caption{Porovnanie odhadov impulznej funkcie pomocou \texttt{gCustom} a \texttt{cra} zo SIT} \label{fig:imp-res-comp} \end{figure} % \newpage Odhad impulznej funkcie podľa CST funkcie \texttt{impulse} je možné vidieť na obrázku~\ref{fig:imp-res-cst}. \begin{figure}[ht] \centering \includegraphics[width=.77\textwidth]{res/impulse-response} \caption{Impulzná charakteristika podľa \texttt{impulse} z CST} \label{fig:imp-res-cst} \end{figure} Odhad pomocou \texttt{gCST} sa od odhadov pomocou \texttt{gCustom} a \texttt{gSIT} výrazne líši. \newpage \section{Záver} Pomocou korelačnej analýzy sme sa pokúsili odhadnúť hodnoty impulznej funkcie. Pre porovnanie sme získali odhady impulznej funkcie \texttt{g()} pomocou funkcií programu Matlab \texttt{impulse} (Control System Toolbox) a \texttt{cra} (System Identification Toolbox). Najbližšie hodnotám \texttt{gCustom} skončila \texttt{gSIT}, hodnoty \texttt{gCST} sa od oboch výrazne odlišovali.