4

我正在开发一个 Java 项目,我需要在 65 微秒内实现 FFT 转换。FFT 的输入是 2^14 个实数。我已经尝试过可以从 Internet 上找到的每个 Java FFT 库,例如 JTransforms 和 Apache Common Math,但没有一个可以达到这个速度。最快的库是 JTransforms,但仍然需要大约 1 毫秒。那么有人可以告诉我是否有可能在 JAVA 中达到这样的速度(65 微秒)?据我所知,在这种情况下,C 库 FFTW 可以足够快,但我不能在这里使用 JNI,我需要一个纯 Java 实现,因为它将作为 Applet 部署在网站中。

PS 我的工作是使用 FFT 将 2^14 音频帧传输到频域,然后对其应用声学回声消除算法 (MDF)。2^14 由普通房间的标准回声延迟决定。

谢谢!!!

4

2 回答 2

2

执行时间高度依赖于主机配置,小程序在客户端计算机上执行。这意味着不同的客户可能会观察到不同的表现。在中等配置下,不太可能在 65 微秒内获得 2^14 个数字的 FFT。

在这里,您可以看到FFTW 等最佳库的这些基准测试。即使使用 FFTW,在具有 2.80 Ghz、Intel Core i7 CPU 和 4Gb 内存的机器上计算 2^13 点 FFT 也需要超过 50 微秒。

于 2012-08-29T21:34:06.570 回答
1

您是否尝试过重复执行转换?Java 通常在运行时可以收集有关代码热点的信息后开始优化。第一次(少数)处决需要更长的时间。您也可以尝试使用服务器 VM(请参阅“java -server”和“java -client”之间的真正区别?

在您尝试 JNI 之前,请先研究一下它的开销,因为这实际上可能需要超过 65µs 的时间。

1ms 与 65µs 的差异似乎太大了,因此我怀疑代码没有被 VM 优化。

于 2012-08-29T21:24:15.857 回答