在与 FFT 卷积之前在信号中间填充零?

问题描述

我遇到了一个使用 cuFFT 对两个信号进行简单卷积的示例。

https://github.com/NVIDIA/cuda-samples/blob/master/Samples/simpleCUFFT/simpleCUFFT.cu

它对两个信号执行零填充,以便它们的大小匹配在一起。但是当我打印填充输出时,它显示填充是在信号中间完成的,我不明白,因为通常它是在开始或结束时完成的。检查 padData 函数

  1. 为什么要在中间做填充?

  2. 如果两个信号长度相同,是否需要填充?

我不太熟悉信号处理技术。如果有人能向我解释这一点,我将不胜感激。

解决方法

如果您希望对复数 FFT 的相位结果保持不变,则任何零填充都需要围绕输入的开始进行循环对称。如果你只是在开头或结尾填充,相位结果可能会改变。

如果您希望频谱的复数 IFFT 产生严格的实数结果,则任何零填充都必须保持共轭对称(这意味着填充需要居中或对称,而不仅仅是在开始或结束处)。