


Autokorelacja – narzędzie matematyczne stosowane w analizie procesów stochastycznych, szeregów czasowych oraz w przetwarzaniu sygnałów (np. obrazów czy dźwięków). Służy do badania stopnia zależności wartości danego procesu, szeregu lub sygnału w określonej chwili od jego wartości przesuniętych w czasie w tył lub w przód. Obliczenie autokorelacji pozwala na wykrycie regularnych struktur – takich jak okresowość – ukrytych w szumie. Daje to możliwość odfiltrowania istotnych danych od zakłóceń w celu dokładniejszej analizy lub poprawy jakości odbieranego sygnału.
Niech dany będzie proces stochastyczny , taki że jest wartością tego procesu w czasie .
Def. Jeśli proces jest stacjonarny w szerszym sensie (słabo stacjonarny), tzn. ma niezmienną z upływem czasu wartość oczekiwaną równą , skończoną wariancję równą , a jego autokowariancja zależy wyłącznie od przesunięcia w czasie, to współczynnik autokorelacji dwóch zmiennych czasowych oddalonych o opóźnienie ma postać:
gdzie oznacza wartość oczekiwaną, a licznik ułamka stanowi funkcję autokowariancji . W tym przypadku autokorelacja jest funkcją jednej zmiennej (opóźnienia ).
Def. Jeśli proces nie spełnia założeń stacjonarności w szerszym sensie, współczynnik autokorelacji dwóch zmiennych czasowych i zależy od konkretnych momentów czasu oraz i przyjmuje ogólną postać:
gdzie to wartości oczekiwane, a to odchylenia standardowe procesu odpowiednio w momentach czasu oraz .
Proces stacjonarny w węższym sensie (ściśle stacjonarny) charakteryzuje się niezmiennością całego łącznego rozkładu prawdopodobieństwa przy przesunięciu w czasie. Jeżeli proces ten posiada skończoną wartość oczekiwaną i skończoną wariancję, to automatycznie jest również stacjonarny w szerszym sensie; wówczas jego autokorelacja zależy wyłącznie od opóźnienia .
Istnieją jednak procesy ściśle stacjonarne mające rozkłady o tzw. grubych ogonach (np. rozkład Cauchy'ego), dla których wartość oczekiwana i wariancja nie istnieją – w ich przypadku klasyczny współczynnik autokorelacji nie może być zdefiniowany.
W przetwarzaniu sygnałów pojęcie autokorelacji jest stosowane najczęściej w sensie deterministycznym i bez normalizacji statystycznej (tj. bez odejmowania wartości średniej oraz bez dzielenia przez wariancję ).
(1) Dla sygnału ciągłego o skończonej energii funkcję autokorelacji definiuje się jako całkę splotową, będącą funkcją przesunięcia :
gdzie:
(2) Jeśli analizowany sygnał jest okresowy o okresie (przy czym ma skończoną moc, ale nieskończoną energię), autokorelację dla przesunięcia czasowego oblicza się jako średnią po jednym okresie:
Dla sygnału dyskretnego złożonego z próbek odległych w czasie o , estymatę funkcji autokorelacji dla przesunięcia o próbek (czyli przesuniętych w czasie o , ) określa wzór:
W praktyce inżynierskiej i numerycznej (np. przy użyciu biblioteki NumPy) wektor autokorelacji poddaje się skalowaniu, dzieląc go przez wartość uzyskaną dla zerowego przesunięcia (tj. dla dla procesu dyskretnego lub dla procesu ciągłego). Znormalizowaną funkcję autokorelacji definiuje wzór:
Proces ten stosuje się w celu:
Omówiono tu program, który realizuje numerycznie zadanie z zakresu cyfrowego przetwarzania sygnałów (ang. Digital Signal Processing – DSP): detekcję słabego sygnału okresowego ukrytego w silnym szumie (jako szum wybrano szum biały o rozkładzie normalnym). Program wykorzystuje do tego analizę korelacyjną (w dziedzinie czasu) oraz analizę spektralną (w dziedzinie częstotliwości).
Na grafikach, utworzonych za pomocą tego programu, pokazano: 1) biały szum gausowski, 2) mocno zaszumiony sygnał (w którym składowa użyteczna jest całkowicie niewidoczna), 3) obliczoną funkcję autokorelacji dla szumu białego, 4) obliczoną funkcję autokorelacji dla sygnału – przebieg funkcji autokorelacji ujawnia zaskakującą okresowość ukrytego sygnału, której nie da się odczytać z jego przebiegu czasowego, 5) gęstość widmową mocy (widmo) szumu białego, 6) gęstość widmową mocy (widmo) zaszumionego sygnału – widoczny jest wyraźny pik dla częstotliwości , który jednoznacznie identyfikuje częstotliwość ukrytego komponentu okresowego na tle równomiernego widma szumu.
Kod programu znajduje się w opisie pierwszej grafiki: trzeba kliknąć w tę grafikę i wybrać opcję „Więcej szczegółów”.
Sygnał ciągły zostaje poddany procesowi próbkowania (dyskretyzacji) z okresem próbkowania s, co definiuje częstotliwość próbkowania jako:
Zgodnie z twierdzeniem Nyquista-Shannona, maksymalna częstotliwość, jaką można zarejestrować bez aliasingu, wynosi:
Generowany sygnał dyskretny składa się z komponentu użytecznego (sinusoidy o częstotliwości ) oraz szumu losowego:
gdzie reprezentuje dyskretny szum biały o rozkładzie normalnym, średniej zero i wariancji . Ponieważ amplituda sinusoidy wynosi (co oznacza moc składowej zmiennej równą ), a moc szumu wynosi , stosunek mocy sygnału do szumu (SNR) jest bardzo niski i wynosi ().
Autokorelacja sygnału dyskretnego mierzy stopień powtarzalności i podobieństwa sygnału do samego siebie przesuniętego w czasie o opóźnienie wynoszące próbek. Teoretyczna funkcja autokorelacji dla sygnału jest definiowana wzorem:
Ponieważ sygnał wyjściowy jest sumą sinusoidy i szumu
to otrzymamy:
Dzięki liniowości operatora wartości oczekiwanej
możemy zapisać jako sumę czterech oddzielnych wartości oczekiwanych (wcześniej mnożąc odpowiednie wyrażenia w nawiasach):
Każdy z tych czterech składników pełni inną rolę fizyczną i matematyczną:
Ostatecznie mamy:
Wynik ten oznacza, że funkcja autokorelacji dla każdego jest funkcją okresowa, o okresie równym okresowi składowej sinusoidalnej sygnału, pozwalając na wyodrębnienie jej z szumu; wpływ szumu teoretycznie spada do zera.
Drugą metodą detekcji jest transformacja sygnału z dziedziny czasu do dziedziny częstotliwości za pomocą Dyskretnej Transformaty Fouriera (ang. Discrete Fourier Transformation – DFT), realizowanej algorytmem szybkiej transformaty Fouriera (ang. Fast Fourier Transformation – FFT):
Widmo gęstości mocy (ang. Power Spectral Density – PSD) definiuje rozkład mocy sygnału w dziedzinie częstotliwości:
Szum biały charakteryzuje się płaskim widmem (jednostajna gęstość mocy w całym pasmie), natomiast sygnał sinusoidalny skupia swoją energię, tworząc wyraźny, ostry prążek (pik) dokładnie dla częstotliwości .
Program implementuje powyższą teorię w języku Python przy użyciu bibliotek NumPy (obliczenia wektorowe) oraz Matplotlib (wizualizacja).
W kodzie zastosowano skończony, nieobciążony estymator funkcji autokorelacji dla przesunięć dyskretnych :
gdzie oznacza całkowitą liczbę próbek sygnału. Dzielenie przez kompensuje zmniejszającą się liczbę par próbek biorących udział w sumowaniu dla rosnących przesunięć .
W programie operacja ta została zoptymalizowana wektorowo poprzez pętlę wyznaczającą iloczyn skalarny (funkcja np.dot) na odpowiednio przyciętych wycinkach tablic:
for r in range(m):
kor_yn[r] = np.dot(yn[:N-r], yn[r:]) / (N-r)
kor_y[r] = np.dot(y[:N-r], y[r:]) / (N-r)
gdzie wycinek y[:N-r] odpowiada czynnikowi , natomiast przesunięty wycinek y[r:] reprezentuje czynnik .
Następnie przeprowadzana jest normalizacja względem punktu startowego :
W skrypcie operację tę realizują linie kor_yn_norm = kor_yn / kor_yn[0] oraz kor_y_norm = kor_y / kor_y[0].
np.fft.fft wyznaczana jest transformata spektralna. Ponieważ sygnał wejściowy jest rzeczywisty, jego widmo jest symetryczne. Program odrzuca częstotliwości ujemne (instrukcja freqs >= 0) i mnoży wynik jednostronny razy 2, aby zachować całkowitą energię sygnału w analizowanym pasmie.plt.plot.plt.axis([-20, m, -0.5, 1.1]). Zapobiega to nakładaniu się potężnej szpilki autokorelacji szumu dla na lewą ramkę wykresu.