使用fft产生不准确结果的互相关

时间:2015-06-15 14:13:18

标签: r fft cross-correlation

上周我尝试发布这个问题,但由于没有回答,我决定用更简单,更直接的格式重写问题。

我使用r来计算两个时间序列之间的互相关。作为一个例子,我正在拍两个时间序列,这只是罪恶波暂时滞后:

x = rnorm(100)
y = rnorm(100)
#x = (x - mean(x))/sd(x) 
#y = (y-mean(y))/sd(y)
zeroPad = rep(0,200)
x0 = zeroPad    
y0 = zeroPad
x0[1:100] = x
y0[1:100] = y


ccf = ccf(x,y,lag.max = 100,plot=F)
ccf = ccf$acf
ccf2 = 2*Re(fft((1/length(x0))*fft(x0)*(1/length(x0))*fft(rev(y0)),inverse  =T))
ccf2 = c(ccf2[(length(ccf2)-length(x)+1):length(ccf2)],ccf2[1:length(x)])

plot(ccf,type="l")
lines(ccf2,col=2)

根据这篇文章:https://dsp.stackexchange.com/questions/736/how-do-i-implement-cross-correlation-to-prove-two-audio-files-are-similar 在其他情况下,输出ccf1和ccf2应该相同:其中一个在时域中以正常方式计算,另一个在频域中计算为卷积。但是,我得到的输出看起来像这样:

enter image description here

有谁知道为什么会出现这种错误/差异?在某些情况下,情况要糟糕得多 - 这只是一个容易重现的例子。

0 个答案:

没有答案