1

我正在实现一个算法,我需要计算两个一维向量之间的线性卷积和互相关ab使用 FFT。如果aism的长度和 的长度bn,那么得到的卷积的总长度将为m + n - 1

但是,该算法要求卷积的输出与输入的长度相同。由于m = n,输入向量的长度相同。

在 Matlab 中,假设两个向量都被零填充到 length m + n - 1,卷积计算为:

ifft(fft(a).*fft(b))

或者,两个向量之间的互相关计算如下:

fftshift(ifft(fft(a).*conj(fft(b))))

输出是长度m + n - 1。我需要对向量进行零填充,以确保在使用 FFT 时不会发生循环卷积。

但是,我希望输出长度与输入长度相同。一个相关的问题(也在 stackoverflow 上)显示了如何修剪两个图像的相关性。

如何修剪一维输出向量,使其与输入向量的长度相同?

4

2 回答 2

1

在 MATLAB 中,conv(a, b, 'same')返回与 a 大小相同的卷积的中心部分。对于互相关,您可以使用xcorr,这将为您提供互相关结果。我想您需要自己裁剪结果以获得与输入相同的大小。

于 2012-09-05T15:13:31.467 回答
0

有公式:

c = a conv b;

其中,a、b、c在时域;转换到频域后,公式变为

C = A * B;

where, A, B and C are fft result of a, b, and c respectively, and all of them are in frequency domain; so c = ifft(C);

于 2012-11-08T05:57:19.273 回答