2 つの 1D ベクトル間の線形畳み込みと相互相関を計算し、FFTa
を使用する必要があるアルゴリズムを実装しています。b
の長さが で、 の長さが である場合a
、m
結果b
のn
畳み込みの合計の長さは になりますm + n - 1
。
ただし、このアルゴリズムでは、畳み込みの出力が入力と同じ長さである必要があります。であるためm = n
、入力ベクトルは同じ長さです。
Matlab では、両方のベクトルが length までゼロ パディングされている場合m + n - 1
、畳み込みは次のように計算されます。
ifft(fft(a).*fft(b))
あるいは、2 つのベクトル間の相互相関は次のように計算されます。
fftshift(ifft(fft(a).*conj(fft(b))))
出力の長さは ですm + n - 1
。FFT の使用時に循環畳み込みが発生しないように、ベクトルをゼロ パディングする必要があります。
ただし、出力の長さを入力の長さと同じにしたいと思います。関連する質問 (これも stackoverflow に関するもの) は、2 つの画像の相関関係をどのようにトリミングできるかを示しています。
入力ベクトルと同じ長さになるように 1D 出力ベクトルをトリミングするにはどうすればよいですか?