La cross-correlation function es la clásica solución de procesamiento de señales. Si tiene acceso a Matlab, vea la función XCORR. max(abs(xcorr(Signal1, Signal2, 'coeff')))
le daría específicamente lo que está buscando y existe un equivalente en Python también.
La correlación cruzada asume que la "similitud" que está buscando es una medida de la relación lineal entre las dos señales. La definición para las señales de longitud finita de valor real con el índice de tiempo n = 0..N-1
es:
C[g] = sum{m = 0..N-1} (x1[m] * x2[g+m])
g
carreras de -N..N
(fuera de ese rango el producto dentro de la suma es 0).
Aunque ha pedido un número, la función es bastante interesante. El dominio de función g
se denomina dominio de retardo.
Si x1
y x2
están relacionadas por un desplazamiento de tiempo, la función de correlación cruzada tendrá su pico en el retardo correspondiente al desplazamiento. Por ejemplo, si tenía x1 = sin[wn]
y x2 = sin[wn + phi]
, entonces dos ondas sinusoidales en la misma frecuencia y fase diferente, la función de correlación cruzada tendría su pico en el desfase correspondiente al cambio de fase.
Si x2
es una versión a escala de x1
, la correlación cruzada también se escalará. Puede normalizar la función a un coeficiente de correlación dividiendo por sqrt(sum(x1^2)*sum(x2^2))
, y llevarlo a 0..1
tomando un valor absoluto (esa línea de Matlab tiene estas operaciones).
Más en general, a continuación se muestra un resumen de lo que la correlación cruzada es buena/mala.
La correlación cruzada funciona bien para determinar si una señal está linealmente relacionada con otra, es decir, si
x2(t) = sum{n = 0..K-1}(A_n * x1(t + phi_n))
donde x1(t)
y x2(t)
son las señales de que se trate, A_n
son factores de escala, y phi_n
son los desplazamientos de tiempo. Las implicaciones de esto son:
- Si una señal es un tiempo versión desplazada de la otra
(phi_n <> 0 for some n)
la función de correlación cruzada será distinto de cero.
- Si una señal es una versión escalada de la otra
(A_n <> 0 for some n)
, la función de correlación cruzada será distinta de cero.
- Si una señal es una combinación de versiones escaladas y desplazadas en el tiempo de la otra (tanto
A_n
como phi_n
son distintas de cero para algunas n) la función de correlación cruzada será distinta de cero. Tenga en cuenta que esta es también una definición de filtro lineal.
Para obtener más concreta, suponga que x1
es una señal aleatoria de banda ancha. Deje x2=x1
. Ahora la función de correlación cruzada normalizada será exactamente 1 en g = 0, y cerca de 0 en todas partes. Ahora, deje x2
ser una versión (linealmente) filtrada de x1
. La función de correlación cruzada será distinta de cero cerca de g=0
. El ancho de la parte distinta de cero dependerá del ancho de banda del filtro.
Para que el caso especial de x1
y x2
sea periódico, se aplica la información sobre el desplazamiento de fase en la parte original de la respuesta.
Donde la correlación cruzada será no es de ayuda es si las dos señales no están relacionadas linealmente. Por ejemplo, dos señales periódicas a diferentes frecuencias no están relacionadas linealmente. Tampoco se extraen dos señales aleatorias de un proceso aleatorio de banda ancha en diferentes momentos. Tampoco hay dos señales que sean similares en forma pero con indexación de tiempo diferente; esto es como el caso de frecuencia fundamental desigual.
En todos los casos, la normalización de la función de correlación cruzada y observar el valor máximo le dirá si las señales están potencialmente relacionadas linealmente; si el número es bajo, como por debajo de 0.1, me sentiría cómodo al declararlos sin relación. Más alto que eso y lo analizaría con más cuidado, graficando las funciones de correlación cruzada tanto normalizadas como no normalizadas y mirando la estructura. Una correlación cruzada periódica implica que ambas señales son periódicas, y una función de correlación cruzada que es notablemente más alta alrededor de g=0
implica que una señal es una versión filtrada de la otra.
No es una mala sugerencia para algunos tipos de entrada, pero en realidad se deja la OP con el mismo problema: cómo comparar dos de los espectros. – dmckee
dmckee: excepto que las señales transformadas de Fourier serían comparables punto por punto sin cambios. Por cierto, "espectros" es el término incorrecto para las señales originales, ya que implicaría energía (o medida equivalente) en el eje x. – Svante