2009-06-10 6 views
7

Mi chiedo se qualcuno conosca un metodo veloce (cioè O (N log (N))) per calcolare la funzione di differenza quadratica media (ASDF) o la funzione di differenza di magnitudine media (AMDF) per un segnale periodico, o è addirittura possibile.Funzione di differenza quadratica media veloce

So che si può utilizzare la FFT per calcolare la correlazione incrociata periodica. Ad esempio, nel codice Matlab,

for i=1:N 
xc(i)=sum(x1*circshift(x2,i-1)); 
end 

è equivalente al molto più veloce

xc=ifft(fft(x1).*conj(fft(x2)); 

C'è una simile procedura "veloce" per

for i=1:N 
ASDF(i)=sum((x1-circshift(x2,i-1)).^2)/N; 
end 

o

for i=1:N 
AMDF(i)=sum(abs(x1-circshift(x2,i-1)))/N; 
end 

?

risposta

6

È possibile espandere la vostra definizione di ASDF come segue:

for i = 1:N 
    asdf(i) = (sum(x1.^2) - 2*sum(x1*circshift(x2,i-1)) + sum(x2.^2))/N; 
end 

che semplifica al

asdf = (-2*ifft(fft(x1).*conj(fft(x2))) + sum(x1.^2) + sum(x2.^2))/N; 
+1

impressionante. Perfezionare. Il tuo codice viene eseguito 550 volte più veloce su Matlab per N = 1024. Grazie – tkw954

Problemi correlati