Python de corrélation croisée
J'ai une paire de tableaux 1D (de longueurs différentes) comme suit:
data1 = [0,0,0,1,1,1,0,1,0,0,1]
data2 = [0,1,1,0,1,0,0,1]
Je voudrais obtenir le max de corrélation croisée de la série 2 en python. Dans matlab, les xcorr()
fonction sera de retour, il est OK
J'ai essayé les 2 méthodes suivantes:
numpy.correlate(data1, data2)
signal.fftconvolve(data2, data1[::-1], mode='full')
Les deux méthodes de me donner les mêmes valeurs, mais les valeurs que j'obtiens de python sont différents de ce qui vient de matlab. Python me donne des entiers valeurs > 1, alors que matlab donne réelle corrélation entre les valeurs 0 et 1.
J'ai essayé de normaliser les 2 tableaux premier (valeur moyenne/écart type), mais la corrélation croisée des valeurs que je reçois sont des milliers qui n'a pas l'air correct.
Matlab vous donnera également un décalage de la valeur à laquelle la corrélation croisée est le plus grand. Je suppose que c'est facile de faire cela à l'aide d'indices mais quel est le moyen le plus approprié de le faire si mes tableaux contiennent 10 de milliers de valeurs?
Je voudrais imiter le xcorr(
) fonction matlab a des idées sur comment je pourrais faire ça en python?
Reportez-vous sur cette stackoverflow.com/questions/6991471/...
J'ai vu ce thread il y a un moment et ont essayé toutes ces méthodes. numpy.corréler me donne des valeurs de n'importe où de 1 à 500. et matplotlib est xcorr() nécessite les 2 tableaux 1D être de la même longueur (la mienne ne l'est pas)
"Si x et y ne sont pas de la même longueur, le plus court vecteur est complété par des zéros à la longueur de la plus longue vecteur." À partir de Matlab xcorr de la documentation. Essayez peut-être qu'avec le matplotlib est xcorr ?
OriginalL'auteur Simon | 2014-09-14
Vous devez vous connecter pour publier un commentaire.
m'a donné même sortie que
donne dans matlab
l'ajout de "plein" de numpy.corrélation() fait le tour. Pour obtenir le max de décalage dans le temps je viens de l'appeler argmax() sur le retour de corrélation()
Juste pour clarifier, le décalage de 0 correspond au centre du tableau de sortie. Donc, si c = xcorr(arr1,arr2) , puis lag = argmax(c)-c.taille/2
OriginalL'auteur Cheeku
Ce code vous aider à trouver l'intervalle de temps entre deux canaux dans le fichier audio
En fait il n'y est une réponse ici, qui ne nécessite pas le lien.
Vous avez raison. C'est en fait un précieux indice.
OriginalL'auteur Chitra Barvekar