1
0
Fork 0
ak9im-proto3/solution.tex
2023-03-15 19:19:42 +01:00

286 lines
9.7 KiB
TeX

Jazyky zvolené pre vypracovanie práce boli \href{https://go.dev/}{Go} (výpočty
a celková koordinácia), Matlab (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/p3}.
\\
Kód tohto protokolu je dostupný na nasledujúcom odkaze:\\
\url{https://git.dotya.ml/wanderer/ak9im-proto3}.
\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 so
zavedeným výstupom zdroja bieleho šumu}
\begin{figure}[ht]
\centering
\includegraphics[width=.80\textwidth]{res/model}
\caption{Simulinková schéma pre simuláciu pseudonáhodného signálu so
zavedeným výstupom zdroja bieleho šumu}
\label{fig:model}
\end{figure}
Parametre zdroja bieleho šumu:
\begin{description}
\item[Noise power $CoV$] 0.0001
\item[Sample time ($Ts$)] 0.01s
\item[Seed ($seed$)] 23341
\end{description}
\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, rovnako ako v prípade
protokolov 1 a 2.
\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{Spracovanie vzoriek - štruktúra programu}
Zachytené dáta (\texttt{out.u} aj \texttt{out.y}) boli uložené ako do súborov:
\begin{itemize}
\item \texttt{p3/data/m.csv} ako matica zložená z dvoch stĺpcových vektorov
($u, y$),
\item \texttt{p3/data/\{u,y\}.csv} zvlášť ako stĺpcové vektory.
\end{itemize}
\\
Program načíta tieto dáta, spočíta štatistické charakteristiky a následne:
\begin{itemize}
\item najskôr získa parametre ARX modelu $\theta_{r}$ a chybu odhadu
$\hat{e}_{r}$ pomocou \textbf{Rekurzívnej metódy najmenších štvorcov}
(RLSq) a
\item nakoniec zavolá Matlab skript \texttt{p3/matlab/explicit.m} pre výpočet
parametrov $\theta_{e}$ a chyby $\hat{e}_{e}$ pomocou \textbf{Explicitnej
metódy najmenších štvorcov} (ELSq).
\end{itemize}
\\
Pre výpočet explicitnej metódy bol zvolený Matlab (resp. Matlab skript volaný z
Go programu) z dôvodu v podstate neexistujúcej infraštruktúry pre zložitejšie
operácie s Toeplitzovými maticami v Go (knižnica \texttt{gonum}) a rovnako v
Pythone (knižnice \texttt{numpy}, \texttt{pandas}). Naopak, pre Matlab sú
spomínané výpočty hračkou.
Po ukončení výpočtov skript samostatne aj materský Go program zapíšu získané
dáta (štatistické charakteristiky, odhady parametrov modelu a chyby odhadov) do
súborov v priečinku \texttt{p3/data}.
Tieto sú ďalej použité na vizualizáciu (grafy v tomto protokole) pomocou Python
skriptu \texttt{p3/visualise.py}.
\newpage
\subsection{Získané signály}
\begin{figure}[ht]
\centering
\includegraphics[width=.79\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=.79\textwidth]{res/signal_y}
\caption{Signál po aplikácii filtra a po primiešaní bieleho šumu - y}
\label{fig:signalfiltered}
\end{figure}
\newpage
\subsection{Štatistické charakteristiky\ 1.\ a\ 2.\ stupňa}
Vypočítali sme štatistické charakteristiky prvého a druhého stupňa, 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})
\end{itemize}
% \newpage
\subsection{Štatistické charakteristiky - súhrn}
\begin{table}[!hbt]
\centering
\begin{tabular}{r|cc}
& \textbf{u} & \textbf{y} \\
\hline
\textbf{u} & 1.1583640130324268647 & 0.03705028274210936 \\
\textbf{y} & 0.03705028274210936 & 0.238500269470011544 \\
\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ť veľmi výrazné posuny signálu po
prechode filtrom oproti pôvodnému signálu hlavne v rozptyle, zmeny v strednej
hodnote sú relatívne malé.
\begin{table}[!hbt]
\centering
\begin{tabular}{r|cc}
& \textbf{u} & \textbf{y} \\
\hline
\textbf{$\hat{\mu}_{u,y}$ (stredná hodnota)} & -0.0731240350331255062 & -0.028904091125753022 \\
\textbf{$\hat{\sigma}^{2}_{u,y}$ (rozptyl)} & 1.1583640130324268647 & 0.23850026947001154 \\
\textbf{$\hat{r}(U,Y)$ (koeficient korelácie)} & \multicolumn{2}{c}{0.07048952128001121} \\
\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 (viď tiež obrázok~\ref{fig:correlation-uy}).
\newpage
\subsection{Korelácia}
\begin{figure}[ht]
\centering
\includegraphics[width=.79\textwidth]{res/uy_correlation}
\caption{Korelácia UY}
\label{fig:correlation-uy}
\end{figure}
\newpage
\newpage
\subsection{Rekurzívna metóda najmenších štvorcov (RLSq)}
\subsubsection{Theta}
\begin{figure}[ht!]
\centering
\includegraphics[width=.79\textwidth]{res/theta}
\caption{Vektor odhadov parametrov $\theta$ ARX modelu metódou RLSq}
\label{fig:theta}
\end{figure}
\subsubsection{Chyba predikcie}
\begin{figure}[ht!]
\centering
\includegraphics[width=.79\textwidth]{res/error}
\caption{Chyba predikcie parametrov $\hat{e}$ ARX modelu metódou RLSq}
\label{fig:theta}
\end{figure}
\newpage
\subsection{Explicitná metóda najmenších štvorcov (ELSq)}
\subsubsection{Theta}
\begin{table}[!hbt]
\centering
\begin{tabular}{r|cc}
& \textbf{$\hat{\theta}_0$} & \textbf{$\hat{\theta}_1$} \\
\textbf{$\hat{a}_1$} & 0.575438144524362 & 0.0749122150759669 \\
\textbf{$\hat{a}_2$} & -0.44843045758266 & -0.0349682737100377 \\
\textbf{$\hat{b}_1$} & 0.067213688016673 & 0.00632428295715472 \\
\textbf{$\hat{b}_2$} & 0.0380293534942219 & -0.0253526197208066 \\
\end{tabular}
\caption{Odhad parametrov $\theta$ ARX modelu metódou ELSq}
\label{table:explicittheta}
\end{table}
\begin{figure}[!ht]
\centering
\includegraphics[width=.70\textwidth]{res/explicit_theta}
\caption{Odhad parametrov $\theta$ ARX modelu metódou ELSq}
\label{fig:xplicittheta}
\end{figure}
% \newpage
\subsubsection{Chyba predikcie}
\begin{figure}[!ht]
\centering
\includegraphics[width=.68\textwidth]{res/explicit_error}
\caption{Chyba predikcie parametrov $\hat{e}$ ARX modelu metódou ELSq}
\label{fig:expliciterror}
\end{figure}
\newpage
\subsection{Porovnanie s Matlabovskou funkciou \texttt{c2dm}}
\begin{figure}[h]
\centering
\begin{varwidth}{\linewidth}
\begin{verbatim}
>> % matlab cmd prompt
>> [n, d] = c2dm(1, [2 5 1], 1, 'zoh');
\end{verbatim}
\end{varwidth}
\caption{Analyticky vypočítané parametre diskrétneho modelu zo spojitého
modelu pomocou \texttt{c2dm}}
\end{figure}
\begin{table}[!hbt]
\centering
\begin{tabular}{r|ccc}
\textbf{$n$} & 0 & 0.1223 & 0.0544 \\
\textbf{$d$} & 1.0000 & -0.9053 & 0.0821 \\
\end{tabular}
\caption{Parametre získané pomocou \texttt{c2dm(1, [2 5 1], 1, 'zoh')}}
\label{table:explicittheta}
\end{table}
\newpage
\section{Záver}
V tejto práci sme si vytvorili program, ktorý sa snažil predikovať na základe
vstupného a výstupného signálu parametre $\theta$ modelu ARX. Na predikciu
bola použitá \textit{medóda najmenších štvorcov}, resp. jej dve varianty:
\begin{itemize}
\item explicitná
\item rekurzívna
\end{itemize}
Rekurzívna metóda je schopná parametre modelu odhadnúť celkom presne, nakoľko
iteratívne v každom kroku vypočítava aj chybu predikcie kvôli prípadnej
korekcii.
Kumulatívne väčšej chyby na základe výsledkov sa dopúšťala explicitná varianta
metódy najmenších štvorcov.
\\
Autor mal relatívne ťažkosti interpretovať výsledok Matlabovskej funkcie
\texttt{c2dm}, takže sa zdrží porovnania s výsledkami dosiahnutými vlastnými
výpočtami.