我正在开发一个Java项目,我需要在65微秒内实现FFT转换。 FFT的输入是2 ^ 14个实数。我已经尝试过evey Java FFT库,我可以在互联网上找到它,比如JTransforms和Apache Common Math,但它们都不能达到这个速度。最快的库是JTransforms,但它仍然需要大约1毫秒。那么有人能告诉我是否有可能在JAVA中达到这样的速度(65微秒)?据我所知,在这种情况下,C库FFTW可以足够快,但我不能在这里使用JNI,我需要一个纯Java实现,因为它将在网站中部署为Applet。
P.S。我的工作是用FFT将2 ^ 14个音频帧转换到频域,然后对它们应用声学回声消除算法(MDF)。 2 ^ 14由普通房间的标准回声延迟决定。
感谢!!!
答案 0 :(得分:2)
执行时间在很大程度上取决于主机配置,并且小程序在客户端计算机上执行。这意味着不同的客户可能会观察到不同的表现。并且在中等配置下,在65微秒内不太可能获得2 ^ 14个数字的FFT。
在这里,您可以看到these benchmarks最好的库,如FFTW。即使使用FFTW,在具有2.80 Ghz,具有4Gb内存的Intel Core i7 CPU的计算机上计算2 ^ 13点FFT也需要50多微秒。
答案 1 :(得分:1)
您是否尝试过重复执行转换? Java通常在运行时收集有关代码热点的信息后开始优化。第一次(少数)执行将需要更长时间。您还可以尝试使用服务器VM(请参阅Real differences between "java -server" and "java -client"?)
在你尝试JNI之前,先研究一下它的开销,因为这可能需要超过65μs。
1msvs.65μs似乎差别太大,因此我怀疑代码没有被VM优化。