有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有可能为2^14个音频帧实现65微秒的FFT吗?

我正在从事一个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由正常房间中的标准回波延迟决定

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    你有没有尝试过反复执行转换?Java通常在运行时能够收集到有关代码热点的信息后开始优化。第一次(少数)处决将需要更长的时间。您还可以尝试使用服务器虚拟机(请参见Real differences between "java -server" and "java -client"?

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

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