Zrobiłbym znormalizowaną autokorelację, aby określić okresowość. Jeśli jest to okresowe z okresem , w wyniku powinny pojawić się piki przy każdej próbce P. Znormalizowany wynik „1” oznacza doskonałą okresowość, „0” w ogóle nie oznacza okresowości w tym okresie, a wartości pomiędzy oznaczają niedoskonałą okresowość. Przed wykonaniem autokorelacji odejmij średnią sekwencji danych od sekwencji danych, ponieważ spowoduje to odchylenie wyników.P.P.
Szczyty będą miały tendencję do zmniejszania się w miarę oddalania się od centrum, po prostu z powodu mniejszej liczby nakładających się próbek. Możesz złagodzić ten efekt, mnożąc wyniki przez odwrotność procentu nakładających się próbek.
gdzieU(n)to nie tendencyjna autokorelacja,A(n)to znormalizowana autokorelacja,nto przesunięcie, aNto liczba próbek w sekwencji danych, które sprawdzamy pod kątem okresowości.
U( n ) = A ( n ) ∗ N| N.- n |
U( n )A ( n )nN.
EDYCJA: Jest to przykład tego, jak stwierdzić, czy sekwencje są okresowe. Poniżej znajduje się kod Matlab.
s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
plot(xcorr(s1n, 'unbiased'))
Parametr „bezstronny” funkcji xcorr nakazuje wykonanie skalowania opisanego w moim równaniu powyżej. Autokorelacja nie jest jednak znormalizowana, dlatego szczyt w środku wynosi około 0,25 zamiast 1. Nie ma to jednak znaczenia, o ile pamiętamy, że środkowy pik jest idealną korelacją. Widzimy, że nie ma innych odpowiadających pików poza skrajnymi krawędziami. Nie mają one znaczenia, ponieważ nakłada się tylko jedna próbka, więc nie ma to znaczenia.
s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
plot(xcorr(s2n, 'unbiased'))
Widzimy tutaj, że sekwencja jest okresowa, ponieważ istnieje wiele niezależnych pików autokorelacji o tej samej wielkości co środkowy pik.