numpy.correlate コマンドのドキュメントによると、2 つの配列の相互相関は、次の方法で信号処理の一般的な定義として計算されます。
z[k] = sum_n a[n] * conj(v[n+k])
そうではないようです。相関関係が逆転しているように見えます。これは、式の最後の項の符号が入れ替わることを意味します。
z[k] = sum_n a[n] * conj(v[nk])
または、2 つの入力ベクトルの順序が間違っている可能性があります。与えられた式の簡単な実装は次のようになります。
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
結果のベクトルの順序が間違っていることは簡単にわかります。期待した結果が得られなかったときは非常に混乱しましたが、(同僚と話し合った後)これはエラーであると確信しています.