问题描述
我遇到了一个使用 cuFFT 对两个信号进行简单卷积的示例。
https://github.com/NVIDIA/cuda-samples/blob/master/Samples/simpleCUFFT/simpleCUFFT.cu
它对两个信号执行零填充,以便它们的大小匹配在一起。但是当我打印填充输出时,它显示填充是在信号中间完成的,我不明白,因为通常它是在开始或结束时完成的。检查 padData 函数。
-
为什么要在中间做填充?
-
如果两个信号长度相同,是否需要填充?
我不太熟悉信号处理技术。如果有人能向我解释这一点,我将不胜感激。
解决方法
如果您希望对复数 FFT 的相位结果保持不变,则任何零填充都需要围绕输入的开始进行循环对称。如果你只是在开头或结尾填充,相位结果可能会改变。
如果您希望频谱的复数 IFFT 产生严格的实数结果,则任何零填充都必须保持共轭对称(这意味着填充需要居中或对称,而不仅仅是在开始或结束处)。