Pour répondre à votre première question, numpy.correlate(a, v, mode)
réalise la convolution de a
avec l'inverse de v
et donnant les résultats écrêtés par le mode spécifié. Le site définition de la convolution , C(t)= - < i < a i v t+i où - < t < , permet d'obtenir des résultats de - à , mais il est évident que vous ne pouvez pas stocker un tableau infiniment long. Il faut donc l'écrêter, et c'est là que le mode intervient. Il existe trois modes différents : complet, identique et valide :
- Le mode "complet" renvoie les résultats pour chaque
t
où les deux a
y v
ont un certain chevauchement.
- Le mode "same" renvoie un résultat de la même longueur que le vecteur le plus court (
a
o v
).
- Le mode "valide" renvoie des résultats uniquement lorsque
a
y v
se chevauchent complètement. Le site documentation para numpy.convolve
donne plus de détails sur les modes.
Pour votre deuxième question, je pense numpy.correlate
es vous donne l'autocorrélation, il vous donne juste un peu plus aussi. L'autocorrélation est utilisée pour déterminer dans quelle mesure un signal, ou une fonction, est similaire à lui-même à une certaine différence de temps. Pour une différence de temps de 0, l'autocorrélation devrait être la plus élevée parce que le signal est identique à lui-même, vous vous attendez donc à ce que le premier élément du tableau de résultats de l'autocorrélation soit le plus grand. Cependant, la corrélation ne commence pas à une différence de temps de 0. Elle commence à une différence de temps négative, se rapproche de 0, puis devient positive. C'est ce que vous attendiez :
autocorrélation(a) = - < i < a i v t+i où 0 <= t <
Mais ce que vous avez obtenu, c'est :
autocorrélation(a) = - < i < a i v t+i où - < t <
Ce que vous devez faire est de prendre la dernière moitié de votre résultat de corrélation, et cela devrait être l'autocorrélation que vous recherchez. Une fonction python simple pour faire cela serait :
def autocorr(x):
result = numpy.correlate(x, x, mode='full')
return result[result.size/2:]
Vous aurez, bien sûr, besoin de vérifier les erreurs pour vous assurer que x
est en fait un tableau à 1 dimension. De plus, cette explication n'est probablement pas la plus rigoureuse mathématiquement. J'ai utilisé des infinis parce que la définition de la convolution les utilise, mais cela ne s'applique pas nécessairement à l'autocorrélation. Ainsi, la partie théorique de cette explication peut être légèrement bancale, mais j'espère que les résultats pratiques seront utiles. Ces pages sur l'autocorrélation sont très utiles, et peuvent vous donner une meilleure base théorique si vous n'êtes pas gêné par la notation et les concepts lourds.
0 votes
Voir aussi : stackoverflow.com/questions/12269834/ pour des informations sur l'autocorrélation normalisée.