Ich würde eine normalisierte Autokorrelation durchführen , um die Periodizität zu bestimmen. Wenn es mit der Periode periodisch ist , sollten Sie Peaks bei jedem P- Abtastwert im Ergebnis sehen. Ein normalisiertes Ergebnis von "1" impliziert eine perfekte Periodizität, "0" impliziert in dieser Periode überhaupt keine Periodizität, und Werte dazwischen implizieren eine unvollständige Periodizität. Subtrahieren Sie den Mittelwert der Datensequenz von der Datensequenz, bevor Sie die Autokorrelation durchführen, da dies die Ergebnisse verzerrt.PP
Die Peaks neigen dazu, sich zu verringern, je weiter sie vom Zentrum entfernt sind, weil sie weniger überlappende Samples haben. Sie können diesen Effekt abschwächen, indem Sie die Ergebnisse mit dem Kehrwert des Prozentsatzes überlappender Stichproben multiplizieren.
Dabei istU(n)die nicht vorgespannte Autokorrelation,A(n)die normalisierte Autokorrelation,nder Versatz undNdie Anzahl der Abtastwerte in der Datensequenz, die Sie auf Periodizität prüfen.
U( n ) = A ( n ) ≤ N| N- n |
U( n )A ( n )nN
EDIT: Dies ist ein Beispiel, um festzustellen, ob die Sequenzen periodisch sind. Das Folgende ist Matlab-Code.
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'))
Der "unverzerrte" Parameter für die xcorr-Funktion weist sie an, die in meiner obigen Gleichung beschriebene Skalierung durchzuführen. Die Autokorrelation ist jedoch nicht normalisiert, weshalb der Peak im Zentrum bei 0,25 statt bei 1 liegt. Das spielt jedoch keine Rolle, solange wir bedenken, dass der Center-Peak eine perfekte Korrelation ist. Wir sehen, dass es keine anderen entsprechenden Peaks außer an den äußersten Rändern gibt. Diese spielen keine Rolle, da sich nur eine Stichprobe überlappt, was nicht aussagekräftig ist.
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'))
Hier sehen wir, dass die Sequenz periodisch ist, weil es mehrere unverzerrte Autokorrelationspeaks mit der gleichen Größe wie der mittlere Peak gibt.
Jims Antwort ließ mich darüber nachdenken, wie ich das statistisch testen könnte. Dies führte mich zum Durbin-Watson-Autokorrelationstest .
Die Verallgemeinerung davon ist zu bilden:
und mein versuch dies in scilab umzusetzen ist:
Wenn ich das Ergebnis für unsere beiden Beispielsequenzen zeichne:
Dann ist es klar, dass die zweite Sequenz eine Korrelation bei Verzögerungen von 4, 8 usw. und eine Antikorrelation bei Verzögerungen von 2, 6 usw. aufweist.
quelle