2009-06-10 82 views
7

我想知道是否有人知道快速(即O(N log(N)))方法計算平均平方差函數(ASDF)或平均幅度差函數(AMDF)週期性信號,或者甚至可能。快速平均方差函數

我知道可以使用FFT來計算週期性互相關。例如,在Matlab代碼,

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

相當於更快

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

是否有類似的 「快速」 算法

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

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

回答

6

您可以擴大航空自衛隊的定義如下:

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

其簡化爲

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

真棒。完善。在N = 1024的情況下,您的代碼在Matlab上運行速度提高550倍。 謝謝 – tkw954 2009-06-10 03:24:57