Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能实现2^14音频帧的65微秒FFT?_Java_Performance_Fft_Aec - Fatal编程技术网

Java 是否有可能实现2^14音频帧的65微秒FFT?

Java 是否有可能实现2^14音频帧的65微秒FFT?,java,performance,fft,aec,Java,Performance,Fft,Aec,我正在从事一个Java项目,在这个项目中,我需要在65微秒内实现FFT转换。FFT的输入是2^14个实数。我尝试了从互联网上找到的每一个Java FFT库,比如JTransforms和Apache Common Math,但没有一个能达到这样的速度。最快的库是JTransforms,但它仍然需要大约1毫秒的时间。那么有人能告诉我在JAVA中是否有可能达到这样的速度(65微秒)?正如我所知,C库FFTW在这种情况下可以足够快,但我不能在这里使用JNI,我需要一个纯Java实现,因为它将作为小程序部

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

另外,我的工作是用FFT将2^14个音频帧转换到频域,然后对其应用声学回波消除算法(MDF)。2^14由正常房间中的标准回波延迟决定


谢谢

您是否尝试过重复执行转换?Java通常在运行时能够收集到有关代码热点的信息之后开始优化。第一次(少数)处决将需要更长的时间。您还可以尝试使用服务器虚拟机(请参阅)

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


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

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


在这里你可以看到像FFTW这样最好的库。即使使用FFTW,在一台2.80 Ghz、内存为4Gb的Intel Core i7 CPU的机器上计算2^13点FFT也需要50微秒以上。

这是否取决于客户端工作站?您是否将其拆分并共享给线程?@tuğrulbüyükşkık 2^14点FFT很可能太小而不值得线程。是的,这取决于客户端PC的性能,但我在标准家用PC配置中对其进行了测试。你好,图鲁尔·比尤克,你能告诉我更多关于如何将其拆分的信息吗?你是对的,第一次运行大约2毫秒,然后减少到1毫秒。另外,因为我的代码将被打包到网站中的小程序中,我认为即使服务器虚拟机正常工作,我也无法在每个客户端站点上更改虚拟机。