Ćwiczenia 4: Różnice pomiędzy wersjami
(Utworzono nową stronę "==Funkcja autokorelacji== === Korelacja i funkcja korelacji=== Dla przypomnienia: zagadnienia te poruszane były na Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#K...") |
m |
||
Linia 1: | Linia 1: | ||
+ | [[Analiza_sygnałów_-_ćwiczenia]]/AR_1 | ||
+ | |||
+ | |||
==Funkcja autokorelacji== | ==Funkcja autokorelacji== | ||
=== Korelacja i funkcja korelacji=== | === Korelacja i funkcja korelacji=== | ||
Linia 131: | Linia 134: | ||
===Twierdzenie Wienera–Chinczyna=== | ===Twierdzenie Wienera–Chinczyna=== | ||
[[Twierdzenie_Wienera-Chinczyna|Twierdzenie Wienera–Chinczyna]] mówi, że transformata Fouriera funkcji autokorelacji jest równa kwadratowi modułu transformaty Fouriera. | [[Twierdzenie_Wienera-Chinczyna|Twierdzenie Wienera–Chinczyna]] mówi, że transformata Fouriera funkcji autokorelacji jest równa kwadratowi modułu transformaty Fouriera. | ||
+ | |||
+ | |||
+ | [[Analiza_sygnałów_-_ćwiczenia]]/AR_1 |
Wersja z 09:24, 1 paź 2016
Analiza_sygnałów_-_ćwiczenia/AR_1
Spis treści
Funkcja autokorelacji
Korelacja i funkcja korelacji
Dla przypomnienia: zagadnienia te poruszane były na wykładzie
Kowariancja:
- [math]\sigma _{xy} = \int {(x(t)-\bar{x}) (y(t)-\bar{y}) dt }[/math]
Kowariancja dwóch zmiennych losowych jest miarą tego na ile dwie zmienne losowe mają podobne tendencje do zmian. Przykład: w zmiennej x parami podajemy wartość pierwszej i drugiej zmiennej
x = np.array([[0, 2], [1, 1], [2, 0]]).T
W tej postaci łatwo zauważyć, że gdy pierwsza zmienna rośnie to druga maleje:
>>> x array([[0, 1, 2], [2, 1, 0]])
Tę własność naszych zmiennych wyrażają elementy pozadiagonalne macierzy kowariancji:
>>> np.cov(x) array([[ 1., -1.], [-1., 1.]])
Współczynnik normalizacyjny:
- [math]\sigma _{ss} = \int {\left(s(t)-\bar{s}\right)^2 dt}[/math]
Implementacja w Pythonie: numpy.cov
Korelacja
- [math]\rho _{xy}= \frac{\sigma _{xy}}{\sqrt{\sigma _{xx} \sigma _{yy}}}[/math]
Implementacja w Pythonie: numpy.corrcoef
Funkcja korelacji wzajemnej
Dla sygnałów [math]x(t)[/math] i [math]y(t)[/math] sensowne jest rozszerzenie tych pojęć na wzajemne przesunięcia czasowe [math]\tau [/math]:
- [math]\sigma _{xy}(\tau ) = \int {x(t) y(t+\tau ) dt} [/math]
a szczególnym przypadkiem jest funkcja autokorelacji. Zwróćmy uwagę na związek funkcji korelacji ze splotem.
Implementacja w Pythonie: numpy.correlate
Dla skończonych dyskretnych sygnałów mamy estymatory korelacji:
- [math]R_{xy}(m) = E\lbrace x_{n+m}y^*_n \rbrace = E\lbrace x_{n}y^*_{n-m} \rbrace [/math]
kowariancji:
- [math]C_{xy}(m) = E\lbrace (x_{n+m}-\bar{x}) (y_n-\bar{y})^*\rbrace = R_{xy}(m) - \bar{x} \bar{y}^*[/math]
Funkcję [math]R[/math] można estymować z jednej realizacji procesu (zakładamy jego ergodyczność):
- [math] \widehat{R}_{xy}(m) = \left\lbrace \begin{array}{ll} \sum _{n=0}^{N-m-1}{x_{n+m} y_n^*} & m \ge 0 \\ \widehat{R}_{yx}^*(-m) & m \lt 0 \end{array} \right.[/math]
Badanie zależności między sygnałami przy pomocy funkcji korelacji
def gabor(t0=0.5, sigma = 0.1, f = 10, T = 1, Fs = 128, phi =0 ):
dt = 1.0/Fs
t = np.arange(0,T,dt)
s = np.exp( -0.5*((t-t0)/sigma)**2 )*np.cos(2*np.pi*f*t + phi)
return (s,t)
- wygeneruj dwa sygnały długości [math]T=2s[/math] próbkowane z częstością [math]f_s=128[/math] Hz przy uzyciu funkcji gabor. Oba gabory mają częstość [math]f=10[/math] Hz i [math]\sigma =0.1[/math] s. Oba sygnały s1 i s2 są centrowane na [math]t_0=0.5[/math] s
- oblicz funkcję korelacji wzajemnej z = np.correlate(s1,s2,mode='full')
- Jaka jest długość sygnału z?
- Wykreśl w funkcji odpowiednich skal czasu na dwóch subplotach: na górnym sygnały s1 i s2 a na dolnym z.
- Zaobserwuj położenie maksimum funkcji korelacji wzajemnej. Jaki jest związek oscylacji w funkcji korelacji wzajemnej z oscylacjami funkcji s1 i s2
Wskazówka: Związek między czasem t dla sygnałów s1 i s2 a skalą czasu dla korelacji f_corr_t można zapisać w Pythonie:
f_corr_t = np.zeros(2*len(t)-1)
f_corr_t[0:len(t)]= -t[len(t)::-1]
f_corr_t[len(t):]=t[1:]
- Powtórz punkty 1-5 zmieniając położenie sygnału s1 od 0.5 do 0.1 z krokiem 0.1, oraz sygnału s2 od 0.5 do 0.9 z krokiem 0.1. Zaobserwuj związek między położeniem maksimum funkcji korelacji wzajemnej a odległością między centrami gaborów.
- Wykonaj analogiczne iteracje zachowując stałe położenie gaborów (dla obu t0 = 0.5 zmieniaj natomiast częstość s2 [math]f[/math] od 10 Hz do 16 Hz co 2 Hz. Wymuś stały zakres osi y na -100:100(funkcja pylab.ylim((-100,100)))
*
Funkcja autokorelacji a widmo
Twierdzenie Wienera–Chinczyna
Twierdzenie Wienera–Chinczyna mówi, że transformata Fouriera funkcji autokorelacji jest równa kwadratowi modułu transformaty Fouriera.