\[ \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í:

  1. 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. \]
  1. 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: template pro matlab, 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).