Correlación cruzada en Python

Marion Paul Kenneth Mendoza 10 octubre 2023
Correlación cruzada en Python

La correlación cruzada es un método de procesamiento de señales esencial para analizar la similitud entre dos señales con diferentes retrasos. No solo puede tener una idea de qué tan bien coinciden las dos señales, sino que también obtiene el punto de tiempo o un índice en el que son más similares.

Este artículo discutirá múltiples formas de procesar la correlación cruzada en Python.

Correlación cruzada en Python

Podemos usar Python solo para calcular la correlación cruzada de las dos señales. Podemos usar la fórmula a continuación y traducirla a un script de Python.

Fórmula:

R_{fg}(l) = \sum_{n=0}^{N} f(n)g(n+l)

Código de ejemplo:

sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]

# Pre-allocate correlation array
corr = (len(sig1) - len(sig2) + 1) * [0]

# Go through lag components one-by-one
for l in range(len(corr)):
    corr[l] = sum([sig1[i + l] * sig2[i] for i in range(len(sig2))])
print(corr)

Producción :

[14, 14, 10, 10, 14]

Ahora, veamos varios paquetes de Python que usan la correlación cruzada como función.

Utilice el módulo NumPy

El módulo estándar de Python para computación numérica se llama NumPy. No es sorprendente que NumPy tenga una técnica de correlación cruzada incorporada. Si no tenemos instalado NumPy, podemos instalarlo con el siguiente comando:

pip install numpy

Código de ejemplo:

import numpy as np

sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]

corr = np.correlate(a=sig1, v=sig2)

print(corr)

Producción :

[14 14 10 10 14]

Utilice el módulo SciPy

Cuando NumPy falla, SciPy es el paquete principal a considerar. Incluye técnicas prácticas para numerosas disciplinas científicas y de ingeniería.

Pero primero, debemos importar el software de procesamiento de señales relacionado con la correlación cruzada. Luego, la señal se rellena automáticamente al principio y al final por la correlación cruzada SciPy.

Como resultado, en comparación con nuestro código Python puro y el módulo NumPy, proporciona una respuesta de señal más amplia para la correlación cruzada. Por lo tanto, eliminamos estos componentes de relleno para que el resultado sea equivalente en nuestro caso de prueba.

Si no tenemos instalado SciPy, podemos instalarlo con el siguiente comando:

pip install scipy

Código de ejemplo:

import scipy.signal

sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]

corr = scipy.signal.correlate(sig1, sig2)

# Removes padded Correlations
corr = corr[(len(sig1) - len(sig2) - 1) : len(corr) - ((len(sig1) - len(sig2) - 1))]

print(corr)

Producción :

[14 10 10]
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn