numpy.correlate 命令的文档说,两个数组的互相关被计算为信号处理的一般定义:
z[k] = sum_n a[n] * conj(v[n+k])
情况似乎并非如此。看起来相关性被翻转了。这意味着公式最后一项中的符号被切换
z[k] = sum_n a[n] * conj(v[nk])
或者两个输入向量的顺序错误。给定公式的简单实现是:
x = [1.0, 2.0, 3.0]
y = [0.0, 0.5, 2.0]
y_padded = numpy.append( [0.0, 0.0] , y)
y_padded = numpy.append(y_padded, [0.0, 0.0] )
crosscorr_numpy = numpy.correlate(x, y, mode='full')
crosscorr_self = numpy.zeros(5)
for k in range(5):
for i in range(3):
crosscorr_self[k] += x[i] * y_padded[i+k]
print crosscorr_numpy
print crosscorr_self
您可以很容易地看到结果向量的顺序错误。当它没有产生我预期的结果时我非常困惑,并且很确定(在与我的同事讨论之后)这是一个错误。