我正在实现一个算法,我需要计算两个一维向量之间的线性卷积和互相关a
并b
使用 FFT。如果a
ism
的长度和 的长度b
是n
,那么得到的卷积的总长度将为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 上)显示了如何修剪两个图像的相关性。
如何修剪一维输出向量,使其与输入向量的长度相同?