286 lines
9.7 KiB
TeX
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.
|