Comment déterminer si un signal discret est périodique ou non?
12
Je veux savoir comment déterminer si une série de données est périodique ou non.
Je veux utiliser la transformée / série de Fourier. Mes données sont soit apériodiques
[111100001111000110010101010000101]
ou périodique
[11001100110011001100]
et j'ai besoin de décider lequel c'est automatiquement. Quels types d'analyses ou de calculs puis-je effectuer pour déterminer si un signal est périodique ou non?
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.
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.
Hé Jim, merci ... Je ne sais pas trop comment commencer à programmer cela, car partout où je recherche sur l'autocorrélation, je trouve des formules complexes, je ne sais pas vraiment par où commencer et comment détecter le pic avec la période P dans le code . Avec moi, j'ai une liste de valeurs V [] = {110011001100 ..} maintenant comment les mettre dans des formules d'autocorrélation et déterminer si c'est périodique ou non ... Pouvez-vous s'il vous plaît me donner un petit départ facile ... Merci beaucoup
safzam du
@safzam Si vous utilisez Matlab ou Python (numpy), ils ont déjà des fonctions d'autocorrélation. Si vous avez besoin de quelque chose en C / C ++ / Java / quoi que ce soit, essayez ici
Jim Clay
Par exemple, j'ai utilisé les deux signaux suivants s1 et s2: s1 = [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1] s2 = [1, 0, 1, 1, 1, 0 , 1, 0, 0, 0, 1] r1 = numpy.correlate (s1, s1, mode = 'full') r2 = numpy.correlate (s2, s2, mode = 'full') J'ai utilisé ces quatre lignes dans un code python. J'ai eu r1 = [1 2 1 2 4 2 3 6 3 4 8 4 3 6 3 2 4 2 1 2 1] et r2 = [1 0 1 1 2 0 3 2 3 2 6 2 3 2 3 0 2 1 1 0 1] les deux r1 et r2 donnent une même courbe en arc-en-ciel comme la forme .. Comment puis-je déterminer dans le code qu'un signal est peroidc ou presque périodique ou pas périodique du tout, merci
Si je trace le résultat de nos deux exemples de séquences:
Ensuite, il est clair que la deuxième séquence présente une corrélation à des retards de 4, 8, etc. et une anti-corrélation à des retards de 2, 6, etc.
Merci pour cette information. En fait, je fais un programme en python où j'obtiens beaucoup de listes de 0 et de 1. Je veux séparer des séries de rafales périodiques, aléatoires. J'essaie la logique ci-dessus en python mais la fonction "xcorr" n'est pas en python, alors j'ai utilisé la fonction numpy.correlate (lst, lst, mode = 'full'). De plus, les listes contiennent environ 70 000 listes de 0 et de 1 .. Je veux juste déterminer si cette liste est périodique ou non ... s'il y a un peu de périodicité, je peux l'éviter. tout autre indice plz. Merci d'avance.
La réponse de Jim m'a envoyé réfléchir à la façon de tester cela statistiquement. Cela m'a conduit au test d'autocorrélation Durbin-Watson .
La généralisation de celui-ci consiste à former:
et ma tentative d'implémenter cela dans scilab est:
Si je trace le résultat de nos deux exemples de séquences:
Ensuite, il est clair que la deuxième séquence présente une corrélation à des retards de 4, 8, etc. et une anti-corrélation à des retards de 2, 6, etc.
la source