1
0
ak9im-proto2/solution.tex

290 lines
10 KiB
TeX
Raw Normal View History

2023-02-27 04:21:41 +01:00
Jazyky zvolené pre vypracovanie práce boli \href{https://go.dev/}{Go} (výpočty)
a Python (vizualizácie).
2023-02-27 03:56:47 +01:00
Pseudonáhodné dáta reprezentujúce signál boli vygenerované programom Matlab -
2022-11-13 21:20:59 +01:00
Simulink\footnotemark{}.
\\
\\
Kód je dostupný na nasledujúcom odkaze:\\
2023-02-27 04:21:41 +01:00
\url{https://git.dotya.ml/wanderer/ak9im/src/p2}.
2022-11-13 21:20:59 +01:00
\\
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 <project location>
>> 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{<project location>}, následne sme si so
zachytených vzoriek (jednorozmerné polia rovnakej dĺžky) vytvorili
2023-02-27 03:56:47 +01:00
\textit{maticu}. Táto matica bola nakoniec zapísaná príkazom
2022-11-13 21:20:59 +01:00
\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.
2023-02-27 03:56:47 +01:00
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
2023-02-27 04:21:41 +01:00
spracovávať (vizualizácie).
2023-02-27 03:56:47 +01:00
Go balíček \texttt{csv} zo štandardnej knižnice takýto nárok/problém nemá,
2023-02-27 04:21:41 +01:00
takže bolo možné po \textit{odstránení} hlavičky dáta zo súboru v Go programe
2023-02-27 03:56:47 +01:00
načítať a skonvertovať to natívnych typov (\texttt{[]float64}...) pomocou
funkcionality balíčka štandardnej knižnice \texttt{strconv}. Pre referenciu viď
2023-02-27 04:21:41 +01:00
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).
2022-11-13 21:20:59 +01:00
\newpage
\subsection{Získané signály}
\begin{figure}[ht]
\centering
2023-02-27 03:56:47 +01:00
\includegraphics[width=.57\textwidth]{res/signal_u}
2022-11-13 21:20:59 +01:00
\caption{Náhodne vygenerovaný signál pred aplikáciou filtra - u}
\label{fig:signalorig}
\end{figure}
\begin{figure}[ht]
\centering
2023-02-27 03:56:47 +01:00
\includegraphics[width=.57\textwidth]{res/signal_y}
2022-11-13 21:20:59 +01:00
\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
2023-02-27 03:56:47 +01:00
\includegraphics[width=.57\textwidth]{res/autocorrelation_u}
2022-11-13 21:20:59 +01:00
\caption{Autokorelačná funkcia u}
\label{fig:autocorrelation-u}
\end{figure}
\subsubsection{Autokorelačná funkcia y}
\begin{figure}[ht]
\centering
2023-02-27 03:56:47 +01:00
\includegraphics[width=.57\textwidth]{res/autocorrelation_y}
2022-11-13 21:20:59 +01:00
\caption{Autokorelačná funkcia y}
\label{fig:autocorrelation-y}
\end{figure}
\newpage
\subsubsection{Vzájomne korelačná funkcia}
\begin{figure}[ht]
\centering
2023-02-27 03:56:47 +01:00
\includegraphics[width=.57\textwidth]{res/mutual_correlation_uy}
2022-11-13 21:20:59 +01:00
\caption{Vzájomne korelačná funkcia uy}
\label{fig:mutualcorrelation-uy}
\end{figure}
\begin{figure}[ht]
\centering
2023-02-27 03:56:47 +01:00
\includegraphics[width=.57\textwidth]{res/mutual_correlation_yu}
2022-11-13 21:20:59 +01:00
\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
2023-02-27 03:56:47 +01:00
\textbf{u} & 1.1583640130324268647 & 0.015851330298377188 \\
\textbf{y} & 0.015851330298377188 & 0.0247634923750309523 \\
2022-11-13 21:20:59 +01:00
\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
2023-02-27 03:56:47 +01:00
filtrom oproti pôvodnému signálu hlavne v rozptyle, ale zmeny zachytila aj
stredná hodnota.
2022-11-13 21:20:59 +01:00
\begin{table}[!hbt]
\centering
\begin{tabular}{r|cc}
& \textbf{u} & \textbf{y} \\
\hline
2023-02-27 03:56:47 +01:00
\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} \\
2022-11-13 21:20:59 +01:00
\end{tabular}
\caption{Súhrn štatistických charakteristík}
\label{table:stats}
\end{table}
2023-02-27 03:56:47 +01:00
Hodnota koeficientu korelácie je mierne kladná, čo znamená jemný náznak
tvrdenia, že signály spolu súvisia.
2022-11-13 21:20:59 +01:00
2023-02-27 03:56:47 +01:00
\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}
2023-02-27 04:02:48 +01:00
Výpočet hodnôt impulznej odozvy \texttt{g()} pomocou korelačnej analýzy:
hodnoty impulznej funkcie vypočítame diskretizáciou Wiener-Hopfovej rovnice.
2023-02-27 03:56:47 +01:00
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}
2023-02-27 04:02:48 +01:00
Odhad pomocou \texttt{gCST} sa od odhadov pomocou \texttt{gCustom} a
\texttt{gSIT} výrazne líši.
2022-11-13 21:20:59 +01:00
\newpage
\section{Záver}
2023-02-27 04:03:03 +01:00
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.
2022-11-13 21:20:59 +01:00