有谁知道 HLSL/GLSL/cg 中的逆 FFT 的实现...?
它会为我节省很多工作。
最好的,海因里希
您是否已经有 FFT 实现?您可能已经知道,但是可以通过反转 N 个输入的顺序、对这些输入进行 FFT 并将结果除以 N 来计算逆。
DirectX11 附带一个用于计算着色器的 FFT 示例(请参阅DX11 八月 SDK 发行说明)。正如 PereAllenWebb 指出的那样,这也可以用于逆 FFT。
编辑:如果你只是想要一个快速的 FFT,你可以试试在 GPU 上运行的 CUFFT。它是 CUDA SDK 的一部分。AMD 的 AMCL 也有一个 FFT,目前还没有 GPU 加速,但很可能很快就会添加。
早在 2005 年,我就在 7800GTX 硬件上实现了 1D FFT。这是在 CUDA 等之前,所以我不得不求助于使用 Cg 并手动实现 FFT。
我有两个 FFT 实现。一个是 Radix2 时间抽取 FFT,另一个是 Stockham Autosort FFT。对于较大尺寸(> 8192),stockham 的执行速度比 CPU(当时为 3GHz P4 单核)快约 2-4 倍,但对于较小尺寸,CPU 速度更快,因为它不必将数据移入/移出 GPU .
如果您对着色器代码感兴趣,请随时与我联系,我将通过电子邮件发送。它来自个人项目,因此不受任何商业版权保护。我想 CUDA(和类似的)实现会大大优于我的实现,但是从学习的角度来看,你不能比自己编写或研究代码更好!
也许您可以看看 OpenCL,它是图形(和其他)硬件上通用计算的标准。
维基百科文章包含标准 FFT 的 OpenCL 示例:
http ://en.wikipedia.org/wiki/OpenCL#Example
如果您使用的是 OS X 10.6 的 Mac,您只需安装开发人员工具即可开始 OpenCL 开发。我还听说硬件供应商已经在 Windows 上提供了基本的 OpenCL 驱动程序支持。