gpt4 book ai didi

c++ - 如果我填充数据,CUDA CUFFT/IFFT 会产生不同的结果吗?

转载 作者:行者123 更新时间:2023-11-28 01:21:24 26 4
gpt4 key购买 nike

我有一个信号,我正在对其进行 FFT,与自身进行卷积,然后将 IFFT 返回到时域。信号长8192。如果我将信号填充到 16384 (N*2) 并执行操作,我会得到正确的输出。然而,这有必要吗?但是当我尝试使用 C2C FFT 变换并坚持使用 8192 时,我在整个过程中都有类似的数据,直到 IFFT。 (当使用 8192 时,它只有 16384 数据中的每第二个点)。

我已经通过 matlab 运行它并得到了相同的结果所以我怀疑它更多地与数学有关而不是实现,但是因为我在 cuda 中这样做,欢迎任何建议,我不介意如有必要,以某种形状填充数据,但数据在我执行 IFFT 之前都很好。

注意,我知道我并没有在 GPU 上进行所有计算,这只是为了消除错误并让我看到代码在做什么。

代码链接:http://pasted.co/e2e5e625

这是我应该得到的 This is what i should get

如果我不填充,这就是我得到的。 enter image description here

最佳答案

I have a signal that I am doing an FFT to, doing an convolution with itself and then an IFFT back to the time domain.

查看您的代码,您不是在频域中进行“与自身的卷积”,而是自身的乘法。

整个操作序列(FFT、乘法、IFFT)将对应于计算信号在时域中与其自身的循环卷积。如果首先将信号填充到至少 2*N-1 的长度(这恰好是在之后存储所有线性卷积系数所需的最小大小),则循环卷积仅等同于线性卷积IFFT)。

您可以使用较小的 FFT 大小(即小于 2*N-1,但至少 N)通过使用 Overlap-add method 计算线性卷积.

关于c++ - 如果我填充数据,CUDA CUFFT/IFFT 会产生不同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com