\[ \def\_#1{\mathbf{#1}} \def\x{\times} \def\R{\mathbb{R}} \def\mat#1{\begin{bmatrix}#1\end{bmatrix}} \def\matr#1{\begin{bmatrix*}[r]#1\end{bmatrix*}} \] ===== LS: Gong ===== (V.Franc, upravili O.Drbohlav, T.Werner, V.Voráček) //Časová řada// je posloupnost reálných čísel $y_0,y_1,\ldots$, která popisuje signál vzorkovaný v (ekvidistantních) časech $t=0,1,\ldots,T$. Naším cílem je odhadnout parametry //autoregresního modelu// \[ \hat{y}_t = a_0 + \sum_{i=1}^{p} a_i y_{t-i}, \qquad t \geq p, \] časové řady, že její každý prvek je lineární kombinace (se stejnými koeficienty) $p$ předcházejících prvků. Číslo $p\in\mathbb{N}$ je //řád modelu// a $\_a=(a_0, a_1,\ldots,a_p)\in\R^{p+1}$ jsou parametry. Odhadnutí parametrů z naměřeného vzorku \[ y_0,y_1,\ldots,y_T \] časové řady se nazývá //identifikace modelu//. Jedna metoda identifikace hledá takové parametry, které odpovídají naměřenému vzorku ve smyslu nejmenšího součtu čtverců odchylek hodnot modelu od nameřených dat. Tj. optimální parametry minimalizují číslo \[ \sum_{t=p}^T (\hat{y}_t-y_t)^2 . \] Získaný model se dá použít například pro kompresi časové řady. V tomto případě postačí uchovat podposloupnost $y_1,\ldots,y_p$ a odhadnuté parametry. Zbývající členy poslopnosti $y_{p+1},\ldots, y_T$ vygenerujeme rekurentním použitím modelu. Koeficient komprese je tedy $T/(2p+1).$ Na podobné myšlence je postavena komprese řečového signálu v reálném čase, která se používá například v mobilních telefonech. **Úkoly k vypracování:** - Napište funkci ''a = ar_fit_model(y,p)'', kde sloupcový vektor ''y'' délky $T$ je naměřený vzorek, skalár ''p'' je řád modelu, a sloupcový vektor ''a'' délky $p+1$ jsou odhadnuté parametry. Doporučujeme úlohu nejdříve zformulovat jako minimalizaci funkce \[ \|\_M\_a-\_b\|^2. \] - Napište funkci ''y_pred = ar_predict(a,y0,N)'', kde sloupcový vektor ''a'' jsou parametry, vstupní sloupcový vektor ''y0'' délky $p$ je počáteční podposloupnost, ''N'' je požadovaná délka predikované posloupnosti, a výstupní sloupcový vektor ''y_pred'' délky $N$ je predikovaná posloupnost. Templaty, včetně skriptu pro testování si stáhněte zde: {{./gong_matlab.zip|template pro matlab}}, {{./gong_python.zip|template pro python}}. Pro python spouštějte skript ''gong.py'', pro matlab ''du2.m''. Výsledný graf pro gong by měl vypadat jako níže. Pro další testování vymyslete jednoduché případy, u kterých umíte najít řešení i jinak. Například konstatní a lineární regrese (''p = 0,1''). {{./gong.png}}