viewgit/index.php:465 Only variables should be passed by reference [2048]

viewgit/index.php:466 Non-static method GeSHi::get_language_name_from_extension() should not be called statically [2048]

  1. \documentclass[mathserif,professionalfonts,compress,slidestop,10pt]{beamer}
  2.  
  3. \mode<presentation>
  4.  
  5. \usepackage[utf8x]{inputenc}
  6. \usepackage[italian]{babel}
  7. \usepackage{default}
  8. \usepackage{iwona}
  9. \usepackage[T1]{fontenc}
  10. % \usepackage{rotate}
  11.  
  12.  
  13. \usepackage{amsmath}
  14. \usepackage{tikz}
  15. \usepackage{subfigure}
  16.  
  17. % Comandi miei, ovvero piccole cose matematiche che
  18. % ci saranno utili in seguito.
  19. \newcommand{\R}{\mathbb{R}}
  20. \newcommand{\Z}{\mathbb{Z}}
  21. \newcommand{\N}{\mathbb{N}}
  22. \renewcommand{\hat}{\widehat}
  23. \renewcommand{\tilde}{\widetilde}
  24. \newcommand{\upsample}[1]{\makebox[0.85\width]{$\uparrow$}_{#1}}
  25. \newcommand{\downsample}[1]{\makebox[0.85\width]{$\downarrow$}^{#1}}
  26. \newcommand{\pausaindice}{
  27. \begin{frame} \frametitle{Outline}
  28. \tableofcontents[current]
  29. \end{frame}}
  30. % \newcommand{\downsample}[1]{\downarrow{#1}}
  31.  
  32. % Il nostro tema
  33. % \usetheme{CambridgeUS}
  34. \usetheme{Antibes}
  35. \usecolortheme{dolphin}
  36. \beamertemplateshadingbackground{blue!10}{blue!2}
  37. \setbeamercovered{transparent=15}
  38.  
  39. % Chi siamo e cosa facciamo
  40. \author{Leonardo Robol \\ \scriptsize \href{mailto:robol@poisson.phc.unipi.it}{\texttt{robol@poisson.phc.unipi.it}} \normalsize }
  41. \title{Wavelet e signal processing}
  42. \subtitle{Trasformata wavelet discreta tramite filter banks}
  43.  
  44. \begin{document}
  45.  
  46. % Pagina principale
  47. \begin{frame}[plain]
  48. \titlepage
  49. \end{frame}
  50.  
  51. % \begin{frame} \frametitle{Outline}
  52. % \tableofcontents[pausesections]
  53. % \end{frame}
  54.  
  55. %
  56. % Teoremi
  57. %
  58. \theoremstyle{plain} \newtheorem{teo}{Teorema}
  59. \theoremstyle{remark} \newtheorem{de}{Definizione}
  60. \theoremstyle{remark} \newtheorem{os}{Osservazione}
  61. \theoremstyle{remark} \newtheorem{problema}{Problema}
  62.  
  63. %
  64. % Cominciamo a capire cosa ci interessa di un segnale e come lo vogliamo
  65. % guardare.
  66. %
  67. \section{Manipolazione di segnali}
  68. \subsection{Segnali analogici e segnali digitali}
  69. \pausaindice
  70. % FRAME: Cosa sono i segnali
  71. \begin{frame}\frametitle{Segnali}
  72. Un \emph{segnale analogico x} è una funzione $x_{analog}: \R \to \R$. \\[15pt]
  73.  
  74. Quasi tutti i segnali ``nascono''
  75. in forma analogica ma vengono \emph{campionati} per essere rappresentati come
  76. \[
  77. \left\{ \begin{array}{ll}
  78. x_{digital}(n): & \Z \to \R \\
  79. x_{digital}(n)= & x_{analog}(nT) \\
  80. \end{array} \right.
  81. \]
  82. dove $T \in \R$ è l'\emph{intervallo di campionamento}. \\[15pt]
  83.  
  84. Questo permette di memorizzare un segnale analogico su un supporto digitale (i.e. un computer).
  85. \end{frame}
  86.  
  87. % FRAME: Shannon sampling theorem
  88. \begin{frame} \frametitle{Shannon sampling theorem}
  89.  
  90. Quando un segnale viene campionato molta ``informazione'' viene scartata. Se però il segnale
  91. è \emph{band-limited} allora questo non crea nessun problema, come ci dice il seguente teorema:
  92. \begin{teo}
  93. Ogni segnale analogico le cui frequenze non superano un dato $\omega_{max} \in \R_+$
  94. può essere ricostruito dal suo campionamento $x(nT)$ se $\frac{1}{T} > \frac{\omega_{max}}{\pi}$.
  95. \end{teo}
  96.  
  97. %% Commento allo shannon sampling theorem
  98. \begin{de}
  99. Il valore $\frac{\omega_{max}}{\pi}$ viene chiamato \emph{Nyquist period}.
  100. \end{de}
  101. \end{frame}
  102.  
  103. % FRAME: Aliasing
  104. \begin{frame} \frametitle{Aliasing}
  105.  
  106. % Un po' di spettacolo
  107. \transdissolve[duration=0.2]<2>
  108. \transdissolve[duration=0.2]<3>
  109.  
  110. Cosa succede quando non è soddisfatta l'identità $\frac 1 T > \frac{\omega_{max}}{\pi}$? \\[5pt]
  111.  
  112. \begin{itemize}
  113. \only<1-> {\item Sia $x(t) = sin(\omega x)$. }
  114. \uncover<2-> { \item Consideriamo il sampling $x(nT)$ con $T = \frac{3\pi}{2\omega}$. }
  115. \uncover<3-> { \item Si ottiene lo stesso sampling che per $\hat x_{alias}(t) = \sin(\frac{\omega}{3}t)$, e quindi il segnale non può
  116. venire ricostruito. }
  117. \end{itemize}
  118.  
  119. \begin{figure}
  120. \begin{tikzpicture}[domain=0:7,samples=150]
  121. \draw[->] (0,0) -- (8,0) node[anchor=west]{$t$};
  122. \draw[->] (0,0) -- (0,1.5) node[anchor=south]{$sin(\omega t)$};
  123.  
  124. % Disegno la funzione
  125. \only<1->{
  126. \draw[color=blue] plot[id=signal] function {sin(5*x)};
  127. }
  128.  
  129. % Disegno i puntini del sampling
  130. \visible<2->{
  131. \foreach \x in {0,1.8849,...,7}
  132. {\fill (\x, 0) circle (0.05cm);}
  133. \foreach \x in {0.94,4.71,...,7}
  134. {\fill (\x, -1) circle (0.05cm);}
  135. \foreach \x in {2.81,6.59,...,7}
  136. {\fill (\x, 1) circle (0.05cm);}
  137. }
  138.  
  139. % Disegno la funzione alias
  140. \visible<3-> {
  141. \draw[color=red] plot[id=aliasedsignal] function {-1 * sin( 1.666667 * x)};
  142. }
  143. \end{tikzpicture}
  144. \caption{Esempio di aliasing}
  145. \end{figure}
  146. \end{frame}
  147.  
  148. % FRAME: Cosa sono i filtri
  149. \subsection{Filtri e FIR}
  150. \begin{frame} \frametitle{Filtri}
  151. Supponiamo di avere il segnale campionato $x(nT)$; d'ora in poi
  152. supporremo $T = 1$ per semplicità.
  153.  
  154. \begin{de}
  155. Un \emph{filtro} è un'applicazione che manda $x(n)$ in un altro segnale $y(n)$.
  156. Diremo che un filtro è
  157. \begin{description}
  158. \item[causale] se $y(n)$ è funzione unicamente di $x(n), x(n-1), \ldots$;
  159. \item[FIR\footnote{che sta per finite impulse response.}] se $y(n)$ si può ottenere con un numero finito di
  160. campioni di $x(n)$ per ogni $n$;
  161. \end{description}
  162. \end{de}
  163.  
  164. I filtri FIR e causali sono interessanti perché possono essere calcolati
  165. in \emph{real--time}.
  166.  
  167. \end{frame}
  168.  
  169. % FRAME: Esempio di filtro
  170. \begin{frame} \frametitle{Esempio di filtro}
  171. Sia $h \in \R^{N+1}$ e consideriamo il filtro:
  172. \[
  173. x(n) \longrightarrow y(n) = \sum_{i=0}^{N} h_{i} x(n - i)
  174. \]
  175. Questo è sia FIR che causale. Consideriamo i seguenti segnali:
  176. \[
  177. \left\{ \begin{array}{l}
  178. x_0(n) = ( \ldots , 1 , 1 , 1 , 1 , 1 , \ldots ) \\
  179. x_1(n) = ( \ldots , 1 , -1 , 1 , -1 , 1 , \ldots ) \\
  180. \end{array} \right.
  181. \]
  182. ed i seguenti filtri:
  183. \[
  184. \left\{ \begin{array}{l}
  185. h_0 = ( \frac{1}{2}, \frac{1}{2} ) \\
  186. h_1 = ( \frac{1}{2}, - \frac{1}{2} ) \\
  187. \end{array} \right.
  188. \]
  189.  
  190. Si ottengono i seguenti output:
  191. \[
  192. h_0x_0 = x_0 \qquad h_1x_0 \equiv 0 \qquad h_0x_0 \equiv 0 \qquad h_1x_1 = x_1
  193. \]
  194.  
  195. \end{frame}
  196.  
  197. \begin{frame} \frametitle{Frequency response}
  198. %$h_0$ è un \emph{lowpass filter}, perché elimina le alte frequenze lasciando invariate quelle
  199. %basse, mentre $h_1$ è un \emph{highpass filter} perché mantiene le alte frequenze eliminando
  200. %quelle basse.
  201. %
  202. % Osserviamo che per ogni $\omega$ e per ogni $h$, $h * {e^{in\omega}} = H(\omega)e^{in\omega}$ e quindi
  203. % $e^{inw}$ è un autovettore per il filtro. Il suo autovalore $H(\omega)$ viene detto
  204. % \emph{frequency response} del filtro alla frequenza $\omega$.
  205.  
  206. Sia $x(n) = e^{in\omega}$. Questo è un autovettore per il filtro:
  207. \[
  208. h * \{e^{in\omega}\} = \sum_{i=0}^{N} h_i e^{i(n-i)\omega} =
  209. e^{in\omega} \underbrace{\sum_{i=0}^{N} e^{-i\omega}}_{\textrm{autovalore } H(\omega)}
  210. \]
  211.  
  212. \vskip 10pt
  213.  
  214. \uncover<2-> {
  215. Consideriamo un segnale generico $x(n)$, e la sua trasformata di Fourier $X(\omega)$.
  216.  
  217. La trasformata di Fourier $Y(\omega)$ del segnale $y(n)$ ottenuto dopo l'applicazione del filtro
  218. sarà
  219. \[
  220. Y(\omega) = X(\omega) H(\omega)
  221. \]
  222. }
  223. \end{frame}
  224.  
  225.  
  226. \begin{frame} \frametitle{Lowpass e Highpass}
  227.  
  228. % Nell'esempio precedente abbiamo
  229. \begin{figure}
  230. \subfigure{
  231. \begin{tikzpicture}[domain=0:1.57, samples=150,scale=1.5]
  232. \draw[->] (0,0) -- (1.9,0) node[anchor=west] {$\omega$};
  233. \draw[->] (0,-0.1) -- (0,1.1) node[anchor=south] {$H_0(\omega)$};
  234.  
  235. \draw[color=blue] plot[id=h0resp] function {cos(x)};
  236. \end{tikzpicture}
  237. }
  238. \subfigure {
  239. \begin{tikzpicture}[domain=0:1.57, samples=150,scale=1.5]
  240. \draw[->] (0,0) -- (1.9,0) node[anchor=west] {$\omega$};
  241. \draw[->] (0,-0.1) -- (0,1.1) node[anchor=south] {$H_1(\omega)$};
  242.  
  243. \draw[color=blue] plot[id=h1resp] function {sin(x)};
  244. \end{tikzpicture}
  245. }
  246.  
  247. \caption{Frequency response di $h_0$ ed $h_1$}
  248. \end{figure}
  249.  
  250. \begin{description}
  251. \item[$H_0(\omega)$] Il filtro $h_0$ si dice \emph{lowpass} perché lascia invariati i segnali
  252. a bassa frequenza, mentre elimina le componenti ad alta frequenza.
  253.  
  254. \item[$H_1(\omega)$] Analogamente $h_1$ si dice \emph{highpass}.
  255. \end{description}
  256.  
  257. \end{frame}
  258.  
  259. \subsection{Upsampling e downsampling}
  260. \begin{frame} \frametitle{Downsampling}
  261.  
  262. \begin{de}
  263. Diremo che $y(n)$ è il \emph{downsampling} di $x(n)$ e lo indicheremo con
  264. $y(n) = \downsample{k}x(n)$ se
  265. \[
  266. y(n) = x(kn) \quad \textrm{dove } k \in \N
  267. \]
  268. \end{de}
  269.  
  270. \begin{example}
  271. Applichiamo il downsampling ad un numero finito di samples:
  272. Se $x = (1, 5, 3, 2, 6, 4, 8) = x(0) \ldots x(6)$ si ha
  273. \[
  274. \downsample{3}x = (1, 2, 8) \qquad \downsample{2}x = (1,3,6,8)
  275. \]
  276. \end{example}
  277.  
  278. \end{frame}
  279. \begin{frame} \frametitle{Upsampling}
  280.  
  281. Per ``invertire'' il downsampling applicheremo l'\emph{upsampling}:
  282. \begin{de}
  283. Diremo che $x(n)$ è l'upsampling di $y(n)$ di un fattore $k$ e lo
  284. indicheremo con $x(n) = \upsample k y(n)$ se
  285. \[
  286. x(n) = \left\{ \begin{array}{ll}
  287. y(\frac{n}{k}) & \textrm{se } n \textrm{ è multiplo di } k \\
  288. 0 & \textrm{altrimenti}
  289. \end{array} \right.
  290. \]
  291. \end{de}
  292. \begin{os}
  293. Il downsampling è l'inverso dell'upsampling ma non viceversa, ovvero
  294. \[
  295. \downsample{k}\upsample{k} x(n) = x(n) \quad \textrm{ma} \quad \upsample{k}\downsample{k} x(n) \neq x(n)
  296. \]
  297. \end{os}
  298. \end{frame}
  299.  
  300.  
  301.  
  302.  
  303.  
  304. %
  305. %
  306. % %%%%%%%%%%%%%%%%%%
  307. % SEZIONE filter bank
  308. % %%%%%%%%%%%%%%%%%%
  309. %
  310. %
  311. %
  312. %
  313. \section{Filter Bank}
  314. \pausaindice
  315. \subsection{Cos'è una filter bank}
  316. \begin{frame} \frametitle{Struttura di una filter bank}
  317. Possiamo immaginare una \emph{filter bank} come una successione di filtri
  318. che, partendo, da uno o più segnali di input $x(n)$ produca uno o più segnali
  319. di output $y_{0}(n) \ldots y_{1}(n)$. \\[15pt]
  320. Questo esempio prende un input (in giallo) e restituisce tre output (in blu).
  321. \begin{figure}
  322. \begin{tikzpicture}[rounded corners=2pt, scale=0.5, thick, node distance=50pt]
  323. \tikzstyle{place}=[rectangle,draw=blue!80,fill=white!20]
  324. \tikzstyle{input}=[rectangle,draw=blue!80,fill=yellow!50]
  325. \tikzstyle{output}=[rectangle,draw=blue!80,fill=blue!20]
  326.  
  327. %% Disegnamo i pezzetti
  328. \node [input] (inputsignal) {$x(n)$};
  329. \node [place] (y0) [right of=inputsignal, yshift=25pt] {$y_0(n)$};
  330. \node [output] (y1) [right of=inputsignal, yshift=-25pt] {$y_1(n)$};
  331. \node [output] (y00)[right of=y0, yshift=20pt] {$y_{00}(n)$};
  332. \node [output] (y01)[right of=y0, yshift=-20pt] {$y_{01}(n)$};
  333.  
  334. %% .. e li colleghiamo
  335. \draw[->] (inputsignal.east) -- (y0.west);
  336. \draw[->] (inputsignal.east) -- (y1.west);
  337. \draw[->] (y0.east) -- (y01.west);
  338. \draw[->] (y0.east) -- (y00.west);
  339.  
  340. \end{tikzpicture}
  341. \caption{Esempio di filter bank}
  342. \end{figure}
  343. \end{frame}
  344.  
  345. \begin{frame} \frametitle{Perché una filter bank?}
  346.  
  347. Le filter bank ci permettono di scomporre (e ricomporre un segnale). Questo ci è utile per:
  348.  
  349. \vskip 20pt
  350.  
  351. \begin{description}
  352. \item[Analisi] Vorremmo avere il segnale in una forma che metta in evidenza
  353. la decomposizione in frequenze del segnale e contemporaneamente la localizzazione
  354. temporale degli ``eventi'';
  355.  
  356. \vskip 25pt
  357.  
  358. \item[Compressione] Vorremmo scomporre il segnale in piccole componenti più idonee ad
  359. essere compresse (ovvero che contengano dati omogenei);
  360. \end{description}
  361.  
  362. \end{frame}
  363.  
  364. \subsection{Analysis e Synthesis filter bank}
  365.  
  366. \begin{frame}
  367. \frametitle{}
  368. % Consideriamo i seguenti filtri e filter bank:
  369. % \[
  370. % h_0 = (\frac{1}{2}, \frac{1}{2}) \qquad h_1 = (\frac 1 2 , - \frac{1}{2}) \qquad
  371. % f_0 = (\frac{1}{2}, \frac{1}{2}) \qquad f_1 = (-\frac 1 2 , \frac{1}{2})
  372. % \]
  373.  
  374. \begin{figure}
  375. \begin{tikzpicture}[rounded corners=2pt, scale=0.5, thick, node distance=50pt]
  376. \tikzstyle{title}=[rectangle,draw=blue!80,fill=white!20]
  377. \tikzstyle{input}=[rectangle,draw=blue!80,fill=yellow!50]
  378. \tikzstyle{output}=[rectangle,draw=blue!80,fill=blue!20]
  379.  
  380. %% Disegnamo i pezzetti
  381. \node [input] (inputsignal) [xshift=10mm] {$x(n)$};
  382. \node [input] (y0) [right of=inputsignal, yshift=10pt, xshift=10mm] {$y_0(n) = h_0 * x(n)$};
  383. \node [input] (y1) [right of=inputsignal, yshift=-10pt, xshift=10mm] {$y_1(n) = h_1 * x(n)$};
  384.  
  385. \node [output] (y0down) [right of=y0, xshift=15mm] {$\tilde{y_0}(n) = \downsample{2}y_0(n)$};
  386. \node [output] (y1down) [right of=y1, xshift=15mm] {$\tilde{y_1}(n) = \downsample{2}y_1(n)$};
  387.  
  388. %% .. e li colleghiamo
  389. \draw[->] (inputsignal.east) -- (y0.west);
  390. \draw[->] (inputsignal.east) -- (y1.west);
  391.  
  392. \draw[->] (y0.east) -- (y0down.west);
  393. \draw[->] (y1.east) -- (y1down.west);
  394.  
  395. \end{tikzpicture}
  396. \caption{Analysis filter bank}
  397. \end{figure}
  398.  
  399.  
  400. \begin{figure}
  401. \begin{tikzpicture}[rounded corners=2pt, scale=0.5, thick, node distance=50pt]
  402. \tikzstyle{title}=[rectangle,draw=blue!80,fill=white!20]
  403. \tikzstyle{input}=[rectangle,draw=blue!80,fill=yellow!50]
  404. \tikzstyle{output}=[rectangle,draw=blue!80,fill=blue!20]
  405.  
  406.  
  407. %% Disegnamo i pezzetti
  408. \node [input] (inputsignal0) [xshift=10mm, yshift=3.5mm] {$\tilde{y_0}(n)$};
  409. \node [input] (inputsignal1) [xshift=10mm, yshift=-3.5mm] {$\tilde{y_1}(n)$};
  410.  
  411. \node[input] (inputsignal0up) [right of=inputsignal0, xshift=5mm] {$z_0(n) = \upsample{2} \tilde{y_0}(n)$};
  412. \node[input] (inputsignal1up) [right of=inputsignal1, xshift=5mm] {$z_1(n) = \upsample{2} \tilde{y_1}(n)$};
  413.  
  414. \node [output] (xn) [right of=inputsignal0up, xshift=25mm, yshift=-3.5mm] {$x(n) = f_0*z_0(n) + f_1*z_1(n)$};
  415.  
  416. %% .. e li colleghiamo
  417. \draw[->] (inputsignal0up.east) -- (xn.west);
  418. \draw[->] (inputsignal1up.east) -- (xn.west);
  419. \draw[->] (inputsignal0.east) -- (inputsignal0up.west);
  420. \draw[->] (inputsignal1.east) -- (inputsignal1up.west);
  421.  
  422.  
  423. \end{tikzpicture}
  424. \caption{Synthesis filter bank}
  425. \end{figure}
  426. \begin{problema}
  427. Trovare condizioni necessarie per ricostruire un segnale decomposto con l'analysis filter bank
  428. tramite la synthesis filter bank.
  429. \end{problema}
  430. \end{frame}
  431.  
  432. \begin{frame} \frametitle{Analysis filter bank}
  433.  
  434. Analizziamo un segnale ad una frequenza fissata $\{e^{in\omega}\}$.
  435.  
  436. \vskip 10pt
  437.  
  438. $\{e^{in\omega}\}$ è un autovalore per
  439. $h_0$ e $h_1$ e quindi dopo il primo passaggio dell'Analysis filter bank si ottiene
  440. \[
  441. y_0(n) = H_0(\omega)e^{in\omega} \qquad y_1(n) = H_1(\omega)e^{in\omega}
  442. \]
  443.  
  444. \vskip 15pt
  445. %
  446. % \begin{os}
  447. % Con questo filtraggio abbiamo separato le alte frequenze dalla basse frequenze; ora però
  448. % ci sono \textbf{il doppio} dei samples di prima e quindi il segnale occupa
  449. % il doppio dello spazio.
  450. % \end{os}
  451.  
  452.  
  453. Per liberarci dell'informazioni in eccesso ne scartiamo la metà effettuando un downsampling,
  454. ovvero ponendo
  455. \[
  456. \tilde y_0(n) = \downsample{2} y_0(n) \qquad \tilde y_1(n) = \downsample{2} y_1(n)
  457. \]
  458. \end{frame}
  459.  
  460. %
  461. %\begin{frame} \frametitle{Liberarsi della ridondanza}
  462. % Il problema dell'informazione in eccesso è stato sicuramente risolto, ma sarà possibile
  463. % recuperare il segnale originale? \\[15pt]
  464. %
  465. % Per fortuna la risposta è affermativa. Supponiamo ora di conoscere solamente i segnali
  466. % $\tilde y_0$ e $\tilde y_1$ ottenuti da questo processo, ovvero
  467. % \[
  468. % \tilde{y_0}(n) = H_0(\omega)e^{2in\omega} \qquad \tilde{y_1}(n) = H_1(\omega)e^{2in\omega}
  469. % \]
  470. %\end{frame}
  471.  
  472. \begin{frame} \frametitle{Il ritorno dell'aliasing}
  473.  
  474. \begin{problema} Cosa succede ad un segnale $\{e^{in\omega}\}$ se effettuiamo un downsampling
  475. seguito da un upsampling?
  476. \end{problema}
  477. \vskip 15pt
  478. \uncover<2-> {
  479. Osserviamo che per ogni $\omega$ vale la seguente uguaglianza
  480. \[
  481. \upsample{2}\downsample{2} \{e^{in\omega}\} = \{\frac{1}{2} ( e^{in\omega} + e^{in(\omega+\pi)})\}
  482. \]
  483. ovvero l'upsampling ci restituisce il segnale originale ``sporcato'' con dell'aliasing.
  484. }
  485.  
  486. \only<3-> {
  487. \[
  488. z_0(n) = \upsample{2}\downsample{2} h_0 * x(n) \qquad z_1(n) = \upsample{2}\downsample{2} h_1 * x(n)
  489. \]
  490. }
  491.  
  492. \end{frame}
  493.  
  494. \subsection{Ricostruzione del segnale}
  495. \begin{frame} \frametitle{La sintesi}
  496. % Osserviamo cosa succede ora se consideriamo
  497. \begin{eqnarray*}
  498. r(n) &=& f_0 * z_0(n) + f_1 * z_1(n) = \\
  499. &=& \frac{f_0}{2} * (\tilde{y_0}(n) + e^{in\pi}\tilde{y_0}(n)) + \frac{f_1}{2} * (\tilde{y_1}(n) + e^{in\pi}\tilde{y_1}(n)) = \\
  500. &=& \frac{f_0}{2} * H_0(\omega)(e^{in\omega} + e^{in(\omega + \pi)}) + \frac{f_1}{2} * H_1(\omega)(e^{in\omega} + e^{in(\omega + \pi)})
  501. \end{eqnarray*} \vskip 10pt
  502. e sviluppando in funzione del segnale iniziale $e^{in\omega}$ si ottiene che $r(n)$ si può scrivere come
  503. (consideriamo $-\omega = \omega + \pi$)
  504. % Fare un riqadro
  505. \[
  506. \frac{(F_0(\omega)H_0(\omega) + F_1(\omega)H_1(\omega))e^{in\omega} + (F_0(-\omega)H_0(\omega) + F_1(-\omega)H_1(\omega))e^{-in\omega}}{2}
  507. \]
  508. % e quindi $r(n)$ è combinazione lineare di $\{e^{in\omega}\}$ e di $\{e^{in(\omega + \pi)}\}$.
  509. \end{frame}
  510.  
  511. \begin{frame} \frametitle{La sintesi}
  512. La condizione per riottenere il segnale originale è $r(n) = x(n)$ che è equivalente a
  513. \[
  514. \left\{ \begin{array}{l}
  515. F_0(\omega)H_0(\omega) + F_1(\omega)H_1(\omega) = 1 \\
  516. F_0(\omega+\pi)H_0(\omega) + F_1(\omega+\pi)H_1(\omega) = 0
  517. \end{array}
  518. \]
  519. In realtà è sufficiente che la prima equazione valga $e^{-il\omega}$ per ogni $\omega$ e per qualche
  520. $l \in \N$. \\[5pt]
  521.  
  522. \vskip 10pt
  523.  
  524. In questo modo avremmo che $r(n) = e^{-il\omega}x(n) = e^{i(n-l)\omega}$, cioè è $x(n)$
  525. con un ritardo di $l$. \\[5pt]
  526.  
  527. \end{frame}
  528.  
  529. \begin{frame} \frametitle{Il caso di Haar}
  530. Ricordando i filtri $h_0, h_1, f_0, f_1$ che avevamo scelto all'inizio, calcoliamo le relative
  531. response function $H_0, H_1, F_0, F_1$.
  532.  
  533. \vskip 10pt
  534.  
  535. Ricordando la formula $H(\omega) = \sum_{k=0}^{N} h(k) e^{-ik\omega}$ si ottiene:
  536.  
  537. \vskip 10pt
  538. \[
  539. H_0(\omega) = \frac 1 2 ( 1 + e^{-i\omega} ) \qquad H_1(\omega) = \frac 1 2 (1 - e^{-i\omega})
  540. \]
  541. \[
  542. F_0(\omega) = 1 + e^{-i\omega} \qquad F_1(\omega) = -1 + e^{-i\omega}
  543. \]
  544. \end{frame}
  545.  
  546. \begin{frame} \frametitle{Il caso di Haar}
  547. Valutando le equazioni della PR condition si ottiene:
  548. \[
  549. \left\{ \begin{array}{l}
  550. F_0(\omega)H_0(\omega) + F_1(\omega)H_1(\omega) = e^{-i\omega} \\
  551. F_0(\omega+\pi)H_0(\omega) + F_1(\omega+\pi)H_1(\omega) = 0
  552. \end{array}
  553. \]
  554. La Filterbank di Haar ci permette quindi di decomporre e ricomporre esattamente un segnale
  555. con un ritardo di $1$! \\[10pt]
  556. \uncover<2> {
  557. \begin{example}
  558. Consideriamo il vettore $x = (6,4,5,2)$ ed verifichiamo che viene ricostruito
  559. esattamente.
  560. % i filtri $h_0$ e $h_1$:
  561. % \begin{eqnarray*}
  562. % y_0 = h_0 * x = (3,5,4.5.3.5,1) & y_1 = h_1 * x = (3,-1,0.5,-1.5,-1) \\
  563. % \tilde{y_0} = \downsample{2}y_0 = (3,4.5,1) & \tilde{y_1} = \downsample{2}y_1 = (3,0.5,-1) \\
  564. % z_0 = \upsample{2}\tilde{y_0} = (3,0,4.5,0,1,0) & z_1 = \upsample{2}\tilde{y_1} = (3,0,0.5,0,-1,0) \\
  565. % \end{eqnarray*}
  566. % $$ f_0 * z_0 + f_1 * z_1 = (0,6,5,4,2,0,0) $$
  567. %
  568. \end{example}
  569. }
  570. \end{frame}
  571.  
  572.  
  573.  
  574. %
  575. %
  576. % %%%%%%%%%%%%%%%%
  577. % SEZIONE WAVELETS
  578. % %%%%%%%%%%%%%%%%
  579. %
  580. %
  581. %
  582. %
  583.  
  584. \section{Wavelets}
  585. \pausaindice
  586. \subsection{Refinement equation}
  587. \begin{frame} \frametitle{Refinement equation}
  588. Cerheremo ora di estendere l'esempio precedente ad un procedimento generale per
  589. analizzare segnali. \\[15pt]
  590.  
  591. Introduciamo un'importante equazione detta \emph{Refinement equation}:
  592. \[
  593. \Phi(t) = 2 \sum_{k=0}^{N} h(k)\Phi(2t-k)
  594. \]
  595. dove $h$ è un lowpass filter di lunghezza $N$ e $\Phi(t)$ una funzione da $\R$ in $\R$.
  596. \end{frame}
  597.  
  598. \begin{frame} \frametitle{Trovare una soluzione}
  599. Supponiamo di aver fissato il filtro e di voler trovare una soluzione alla \emph{refinement equation}.
  600.  
  601. \begin{os} Se $\Phi(t)$ è soluzione, allora anche $\lambda \Phi(t)$ lo è. La normalizzazione
  602. che generalmente si utilizza è
  603. \[
  604. \int_{-\infty}^{\infty} \Phi(t) dt = 1
  605. \]
  606. \end{os}
  607.  
  608. Infatti se $\Phi(t)$ è soluzione allora è una funzione a supporto compatto, e quindi l'integrale è finito.
  609.  
  610. \end{frame}
  611.  
  612. \begin{frame} \frametitle{Il caso di Haar}
  613. \begin{example}
  614. Consideriamo ancora il filtro $h_0 = (\frac 1 2 , \frac 1 2)$. La refinement equation diventa
  615. \[
  616. \Phi(t) = \Phi(2t) + \Phi(2t - 1)
  617. \]
  618. e la soluzione è la funzione $\chi_{[0,1]}(t)$.
  619. \end{example} \vskip 15pt
  620.  
  621. Possiamo osservare un'altra interessante proprietà. \\[10pt]
  622.  
  623. Se $h$ e $j$ sono due filtri per cui $\Phi$ e $\Psi$ sono refinement function (ovvero soluzione
  624. della refinement equation) allora $\Phi * \Psi$ è una refinement function per $h*j$, ovvero per
  625. la composizione dei filtri.
  626. \end{frame}
  627.  
  628. \begin{frame} \frametitle{Come calcolare effettivamente la soluzione?}
  629. Per il caso del filtro di Haar abbiamo trovato la soluzione per verifica diretta. \\[10pt]
  630. Sfruttando l'osservazione precedente possiamo trovare la refinement function per una qualsiasi
  631. combinazione di filtri di cui la conosciamo singolarmente. Come possiamo risolvere il problema
  632. in generale? \\[15pt]
  633.  
  634. \uncover<2> {
  635.  
  636. Consideriamo il seguente metodo iterativo:
  637. \[
  638. \left\{\begin{array}{lcl}
  639. \Phi_0(t) &=& \chi_{[0,1]}(t) \\
  640. \Phi_{j+1}(t) &=& 2\sum_{k=0}^{N} h(k) \Phi_{j}(2t - k)
  641. \end{array} \right.
  642. \]
  643.  
  644. Se il metodo converge ad una funzione $\bar\Phi$ questa sarà soluzione
  645. della refinement equation. }
  646.  
  647. \end{frame}
  648.  
  649. \begin{frame} \frametitle{Condizioni per la convergenza}
  650. \begin{problema}
  651. Trovare condizione necessarie e sufficienti per la convergenza della successione $\Phi_k(t)$.
  652. \end{problema}
  653.  
  654. \vskip 10pt
  655.  
  656. Si può trovare una condizione sugli autovalori della matrice $2(\downsample{2})HH^{t}$, dove
  657. $H$ è la matrice di dimensione infinita associata al filtro $ h = (h_0 \ldots h_n) $, ovvero
  658.  
  659. \vskip 10pt
  660.  
  661. \begin{teo}
  662. La successione $\Phi_k(t)$ converge $\iff$ tutti gli autovalori di $2(\downsample{2})HH^t$ sono
  663. di modulo minore di $1$.
  664. \end{teo}
  665.  
  666.  
  667. %
  668. % \begin{example}
  669. % Se $ h = \frac 1 4 (1, 2, 1)$. Possiamo scrivere un pezzo della matrice $H$ (gli elementi rossi stanno
  670. % sulla diagonale):
  671. % \[
  672. % H = \left[ \begin{array}{ccccc}
  673. % & \alert 1 & & & \\
  674. % & 2 & \alert 1 & & \\
  675. % & 1 & 2 & \alert 1 &
  676. % \end{array} \right]
  677. % \]
  678. % \end{example}
  679. \end{frame}
  680.  
  681. \subsection{Spazi wavelet}
  682. \begin{frame} \frametitle{Un altro punto di vista}
  683. Scegliamo una funzione $\Phi(t) \in L^2(\R)$ e i seguenti sottospazi:
  684.  
  685. \vskip 5pt
  686.  
  687. \begin{description}
  688. \item[$V_0$] il sottospazio di $L^2(\R)$ generato degli shift di $\Phi$, ovvero dall'insieme
  689. $\{ \Phi(t-k) \: | \: k \in \Z \}$.
  690. \item[$V_1$] il sottospazio di $L^2(\R)$ generato dagli shift di $\Phi(2t)$.
  691. \only<1> { \item[$\vdots$] }
  692. \item[$V_j$] il sottospazio di $L^2(\R)$ generato dagli shift di $\Phi(2^j t)$.
  693. \only<1> { \item[$\vdots$] }
  694. \end{description}
  695. \uncover<2-> {
  696. \vskip 15pt
  697. Valgono le seguenti proprietà:
  698. \vskip 10pt
  699. \begin{description}
  700. \item[Invarianza per shift] $f(t) \in V_j \iff f(t - \frac 1 j) \in V_j$;
  701. \item[Downsampling] $f(t) \in V_j \iff f(2t) \in V_{j+1}$;
  702. \item[Refinement equation] $V_j \subseteq V_{j+1} \iff \textrm{esistono } a_1 \ldots a_k \: | \: \Phi(t) = \sum_{i=0}^{N} a_i \Phi(2t - i)$;
  703. \end{description}
  704. }
  705. \end{frame}
  706.  
  707. \subsection{Conclusioni e implementazione}
  708. \begin{frame} \frametitle{Due possibili scelte:}
  709.  
  710. \vskip 15pt
  711.  
  712. \begin{columns}
  713. \column{0.5\linewidth}
  714. \textbf{Trovare $\Phi(t)$ partendo dal filtro}
  715.  
  716. Possiamo assumere di aver fissato il filtro
  717. $h(0) \ldots h(k)$ e trovare $\Phi(t)$ con
  718. il metodo iterativo esposto prima.
  719.  
  720. \[
  721. \left\{ \begin{array}{lcl}
  722. \Phi_0(t) &=& \chi_{[0,1]}(t) \\
  723. \Phi_{j+1}(t) &=& 2\sum_{k=0}^{N} h_k \Phi(2t - k)
  724. \end{array} \right.
  725. \]
  726.  
  727. \column{0.5\linewidth}
  728. \textbf{Trovare il filtro partendo da $\Phi(t)$}
  729.  
  730. Possiamo scegliere $\Phi(t)$ in modo che i
  731. sottospazi $V_j$ siano uno contenuto nell'altro
  732. e poi porre i coefficienti del filtro $h(0) \ldots h(k)$ come
  733. il doppio degli $a_i$ in
  734. \[
  735. \Phi(t) = \sum_{i=0}^{N} a_i \Phi(2t-i)
  736. \]
  737. \end{columns}
  738. \end{frame}
  739.  
  740. \begin{frame} \frametitle{Valutazione dell'errore}
  741. Sia $f \in L^2(\R)$. Supponiamo di scrivere un'approssimazione di $f$ come
  742. \[
  743. \tilde f = \sum_{i} a_i \Phi(2^j t - i) \in V_j
  744. \]
  745. \`E possibile dare una maggiorazione dell'errore in funzione di $j$?
  746.  
  747. \vskip 10pt
  748.  
  749. \begin{teo}
  750. Per ogni $f \in L^2(\R)$ esistono dei coefficienti $\{a_{jk}\}$ tali
  751. che
  752. \[
  753. \| f - \sum_{-\infty}^{\infty} a_{jk} \Phi(2^jt - k) \| \leq C2^{-jp} \|f^{(p)}(t)\|
  754. \]
  755. \end{teo}
  756.  
  757. dove $p$ è la molteplicità dello zero di $H(e^{i\omega})$ per $\omega = \pi$.
  758. \end{frame}
  759.  
  760. \begin{frame} \frametitle{Spazi wavelet}
  761. Abbiamo costruito una struttura di spazi contenuti uno contenuto nell'altro
  762. \[
  763. V_0 \subseteq V_1 \subseteq \ldots \subseteq V_j \subseteq \ldots
  764. \]
  765.  
  766. \vskip 10pt
  767.  
  768. Ricordiamo che lo scopo della decomposizione wavelet è \textbf{separare i dettagli del segnale dal resto}.
  769.  
  770. \begin{example}
  771. Sia $f \in L^2(\R)$ e $f_j$ la sua proiezione ortogonale su $V_j$. Possiamo scrivere:
  772. \[
  773. f_j(t) = f_0(t) + \underbrace{(f_1(t) - f_0(t))}_{d_1(t)} + \ldots + \underbrace{(f_j(t) - f_{j-1}(t))}_{d_j(t)}
  774. \]
  775. In questo modo abbiamo scritto $f_j$ come una successione di approssimazioni sempre migliori.
  776. \end{example}
  777. \end{frame}
  778.  
  779. \begin{frame} \frametitle{Spazi wavelet}
  780.  
  781. Consideriamo per ogni $j$ lo spazio $W_j$ delle funzioni che stanno in $V_j$ e ortogonali a $V_{j-1}$, ovvero
  782. lo spazio dei dettagli $j$-esimi.
  783.  
  784. \begin{de}
  785. Una funzione $w(t)$ si dice \emph{wavelet} se per ogni $j$ si ha che $\{w(2^jt-k) \: | \: k \in \Z \}$ è
  786. una base per $W_j$.
  787. \end{de}
  788.  
  789. \vskip 10pt
  790.  
  791. \begin{teo}
  792. $w(t) = \sum_{i=0}^{N} h_1(k) \Phi(2t-k)$ dove $h_1$ è l'highpass filter della filter bank
  793. è una wavelet.
  794. \end{teo}
  795. \vskip 10pt
  796. Se ad esempio $h_0 = \left(\frac 1 2, \frac 1 2\right)$ e $h_1 = \left(\frac 1 2, - \frac 1 2\right)$ si ha
  797. che $w(t)$ è ortogonale a $\Phi(t-k)$ per ogni $k$.
  798. \end{frame}
  799.  
  800. \begin{frame} \frametitle{Conclusioni}
  801. La \textrm{DWT} scompone un segnale in ``details'' e ``averages'' riscrivendolo come
  802. una somma
  803. \[
  804. x(n) = \sum_{j} x_j(n)
  805. \]
  806. dove $x_j(t)$ sono dei segnali che contengono alte frequenze se $j$ è grande, e basse frequenze
  807. se $j$ è piccolo.
  808.  
  809. \vskip 15pt
  810.  
  811. Questo permette di rappresentare il segnale $x_0(n)$ con un \textbf{numero minore di sample} rispetto
  812. al campionamento del segnale originale.
  813.  
  814. \vskip 10pt
  815.  
  816. I segnali con $j$ grande avranno alte frequenze (e quindi necessiteranno di un gran numero di sample)
  817. ma saranno di \textbf{modulo inferiore} ai segnali principali.
  818. \end{frame}
  819.  
  820. \begin{frame} \frametitle{Un esempio pratico}
  821.  
  822. \vskip 45pt
  823. Mostriamo la decomposizione wavelet di un pezzo musicale. Dovremmo riconoscere le basse
  824. frequenze con un'ampiezza maggiore dei dettagli.
  825. \begin{center}
  826. \texttt{./dwt.py {-}{-}show file.raw}
  827. \end{center}
  828.  
  829. \vskip 30pt
  830. Il programma (insieme alle slide) è liberamente scaricabile tramite \texttt{git}: \\[10pt]
  831. \begin{center}
  832. \scriptsize
  833. \texttt{git clone http://poisson.phc.unipi.it/\symbol{126}robol/gits/SignalProcessing.git}
  834. \end{center}
  835. \end{frame}
  836.  
  837.  
  838. \end{document}
  839.