2011-10-09 72 views
1

我在写一个Win32应用程序,只使用C++和WinApi调用。我需要在20ms的WAVEFORMATEX数据上运行8192点FFT。完成这个的最有效的方法是什么?什么是Window的FFT函数?

+1

我想你的意思是8192点FFT。 – Mysticial

+0

你是正确的,已编辑。 –

+2

http://msdn.microsoft.com/en-us/library/ee415925(v=vs.85).aspx –

回答

2

正如我们在评论充实,为XDSP功能MSDN文档可能与你有关。

这些函数似乎并不直接采用WAVEFORMATEX,但如果您可以将其转换为适当的格式,则可以使用FFT来执行您想要的操作。

请注意,它是DirectX SDK的一部分,所以您引入了新的依赖关系。

3

这是一个很长的时间,但我记得这个代码库作为是非常快速和容易的编译:

http://fftw.org/

+1

虽然 –

+0

许可可能是一个问题呃...我错过了GNU的邮票。看起来他们确实提供了支付许可证,但我的猜测是,它会是一臂之力。不要伤害他们,并要求。 http://fftw.org/faq/section1.html#nonfree – selbie

+1

我最后一次检查是5000美元的商业授权。 –

2

KISSFFT本身不是Windows api。但是它足够小,可以很好地嵌入到任何项目中 - 大约30kb的ANSI C源代码用于基本的复杂到复杂的转换。与其他超小型FFT库不同,它具有速度快,功能强大,精确等特点,可用于多线程程序。

其中一个关键特征是KISSFFT可以做混合基数(2,3,5倍数是最快的)。其他“螺栓固定”功能可在工具目录中找到。仅使用您需要的部分:多维变换,实数优化变换(即半谱),快速卷积等

speed对于大多数应用程序而言通常足够快 - 速度不及fftw或供应商图书馆,但比其余部分的建设快。

KISSFFT的accuracy与其他任何FFT库一样好。

许可证是3 clause BSD,它可以合法地用于频谱一端的商业应用程序或另一端的GPL应用程序。它只需要文档中的简单归因。