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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn