Je ferais une autocorrélation normalisée pour déterminer la périodicité. S'il est périodique avec la période vous devriez voir des pics à chaque échantillon dans le résultat. Un résultat normalisé de "1" implique une périodicité parfaite, "0" n'implique aucune périodicité du tout à cette période et les valeurs intermédiaires impliquent une périodicité imparfaite. Soustrayez la moyenne de la séquence de données de la séquence de données avant d'effectuer l'autocorrélation, car cela faussera les résultats.PP
Les pics auront tendance à diminuer plus loin du centre qu'ils obtiennent simplement parce qu'ils ont moins d'échantillons qui se chevauchent. Vous pouvez atténuer cet effet en multipliant les résultats par l'inverse du pourcentage d'échantillons qui se chevauchent.
U( n ) = A ( n ) ∗ N| N- n |
où est l'autocorrélation non biaisée, est l'autocorrélation normalisée, est l'offset et est le nombre d'échantillons dans la séquence de données dont vous vérifiez la périodicité.
U( n )A ( n )nN
EDIT: Ceci est un exemple de la façon de savoir si les séquences sont périodiques. Voici le code 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'))
Le paramètre "non biaisé" de la fonction xcorr lui dit de faire la mise à l'échelle décrite dans mon équation ci-dessus. L'autocorrélation n'est pas normalisée, cependant, c'est pourquoi le pic au centre est d'environ 0,25 au lieu de 1. Cela n'a pas d'importance, cependant, tant que nous gardons à l'esprit que le pic central est une corrélation parfaite. Nous voyons qu'il n'y a pas d'autres pics correspondants sauf aux bords les plus externes. Cela n'a pas d'importance car il n'y a qu'un seul échantillon qui se chevauchent, ce n'est donc pas significatif.
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'))
Ici, nous voyons que la séquence est périodique car il existe plusieurs pics d'autocorrélation non biaisés de même ampleur que le pic central.