web-dev-qa-db-fra.com

Corrélation croisée normalisée dans Python

J'ai eu du mal ces derniers jours à essayer de calculer les degrés de liberté de deux paires de vecteurs (x et y) suivant la référence de Chelton (1983) qui est:

degrés de liberté selon Chelton (1983)

et je ne peux pas trouver un moyen approprié de calculer la fonction de corrélation croisée normalisée en utilisant np.correlate, j'obtiens toujours une sortie qui n'est pas entre -1, 1.

Existe-t-il un moyen facile de normaliser la fonction de corrélation croisée afin de calculer les degrés de liberté de deux vecteurs?

9

Bonne question. Il n'y a pas de moyen direct mais vous pouvez "normaliser" les vecteurs d'entrée avant d'utiliser np.correlate comme ceci et des valeurs raisonnables seront retournées dans une plage de [-1,1]:

Ici, je définis la corrélation telle qu'elle est généralement définie dans les manuels de traitement du signal.

c'_{ab}[k] = sum_n a[n] conj(b[n+k])

CODE: Si a et b sont les vecteurs:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

Les références:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html

https://en.wikipedia.org/wiki/Cross-correlation

enter image description here

9
makis