cross-correlation function è la soluzione di elaborazione del segnale classica. Se hai accesso a Matlab, consulta la funzione XCORR. max(abs(xcorr(Signal1, Signal2, 'coeff')))
ti darebbe esattamente quello che stai cercando e un equivalente esiste anche in Python.
La correlazione incrociata presuppone che la "somiglianza" che stai cercando sia una misura della relazione lineare tra i due segnali. La definizione di segnali a lunghezza finita a valori reali con indice temporale n = 0..N-1
è:
C[g] = sum{m = 0..N-1} (x1[m] * x2[g+m])
g
piste da -N..N
(fuori di tale intervallo il prodotto all'interno della somma è 0).
Sebbene sia stato richiesto un numero, la funzione è piuttosto interessante. Il dominio di funzione g
è chiamato dominio di ritardo.
Se x1
e sono correlati da uno spostamento temporale, la funzione di correlazione incrociata avrà il suo picco al ritardo corrispondente allo spostamento. Ad esempio, se si disponesse di x1 = sin[wn]
e x2 = sin[wn + phi]
, quindi due onde sinusoidali alla stessa frequenza e fase diversa, la funzione di correlazione incrociata avrebbe il suo picco al ritardo corrispondente allo sfasamento.
Se x2
è una versione ridimensionata di x1
, anche la correlazione incrociata verrà ridimensionata. È possibile normalizzare la funzione in base a un coefficiente di correlazione dividendo per sqrt(sum(x1^2)*sum(x2^2))
e portarlo in 0..1
prendendo un valore assoluto (quella riga di Matlab ha queste operazioni).
Più in generale, di seguito è riportato un riepilogo di ciò che la correlazione incrociata è buona/cattiva.
correlazione incrociata funziona bene per determinare se un segnale è correlata linearmente ad un altro, cioè se
x2(t) = sum{n = 0..K-1}(A_n * x1(t + phi_n))
dove x1(t)
e x2(t)
sono i segnali in questione, A_n
sono fattori di scala, e phi_n
sono salti temporali. Le implicazioni di questo sono:
- Se un segnale è un tempo spostato versione dell'altro
(phi_n <> 0 for some n)
la funzione di cross-correlazione sarà diverso da zero.
- Se un segnale è una versione ridimensionata dell'altro
(A_n <> 0 for some n)
, la funzione di correlazione incrociata sarà diversa da zero.
- Se un segnale è una combinazione di versioni ridimensionate e time shift dell'altro (sia
A_n
e phi_n
non sono zero per un certo numero di n), la funzione di correlazione incrociata sarà diversa da zero. Si noti che questa è anche una definizione di un filtro lineare.
Per ottenere più concreto, supponiamo che x1
sia un segnale casuale a banda larga. Lasciare x2=x1
. Ora la funzione di correlazione incrociata normalizzata sarà esattamente 1 a g = 0, e vicino a 0 ovunque altro. Ora lasciare che x2
sia una versione (linearmente) filtrata di x1
. La funzione di correlazione incrociata sarà diversa da zero vicino a g=0
. La larghezza della parte diversa da zero dipenderà dalla larghezza di banda del filtro.
Per il caso speciale di x1
e x2
periodico, vengono applicate le informazioni sullo sfasamento nella parte originale della risposta.
Laddove la correlazione incrociata sarà non è utile se i due segnali non sono correlati linearmente. Ad esempio, due segnali periodici a frequenze diverse non sono correlati linearmente. Né sono due segnali casuali tratte da un processo casuale a larga banda in momenti diversi. Né sono due segnali di forma simile ma con indici di tempo diversi: questo è come il caso di frequenza fondamentale non equo.
In tutti i casi, la normalizzazione della funzione di correlazione incrociata e la visualizzazione del valore massimo indicano se i segnali sono potenzialmente correlati linearmente - se il numero è basso, come sotto 0,1, mi conviene dichiararli estranei. Più in alto di questo aspetto e lo esaminerei con maggiore attenzione, rappresentando graficamente le funzioni di correlazione incrociata normalizzate e non normalizzate e osservando la struttura. Una correlazione incrociata periodica implica che entrambi i segnali sono periodici e una funzione di correlazione incrociata che è notevolmente più elevata attorno a g=0
implica che un segnale è una versione filtrata dell'altro.
Non è un cattivo suggerimento per alcuni tipi di input, ma in realtà si lascia l'OP con lo stesso problema: come due confrontare a spettri. – dmckee
dmckee: con la differenza che i segnali trasformati di Fourier sarebbero confrontabili punto per punto senza spostamenti. A proposito, "spettri" è il termine sbagliato per i segnali originali, poiché ciò implicherebbe energia (o misura equivalente) sull'asse x. – Svante