为什么 x 和 y 的卷积不同 ifft(fft(x)xfft(y))?

why convolution of x and y is different ifft(fft(x)xfft(y))?

我知道x和y在时域的卷积等于fft(x)乘以fft(y)在频域。 所以我尝试了如下使用 matlab 的简单示例。

xn=[1,2,3,4];
yn=[4,3,2,1];
zn=conv(xn,yn);

znr=ifft(fft(xn).*fft(yn));

我得到的结果如下。

zn = 4 11 20 30 20 11 4 zr = 24 22 24 30

我想知道为什么zn 不等于znr。 有知道原因的请解释一下。

在采取fft()时指定转换长度以您想要的方式配置解决方案可能是一种解决方案。由于通常卷积结果的长度等于卷积后的两个信号之和减去 1,因此在这种情况下我们可以将 Transform_Length 设置为 7。

xn = [1,2,3,4];
yn = [4,3,2,1];
zn = conv(xn,yn);

Transform_Length = length(xn) + length(yn) - 1;
znr = ifft(fft(xn,Transform_Length).*fft(yn,Transform_Length));

zn
znr

结果:

运行 使用 MATLAB R2019b