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