4

私は 65 マイクロ秒で FFT 変換を達成する必要がある Java プロジェクトに取り組んでいます。FFTの入力は2^14実数です。JTransforms や Apache Common Math など、インターネットから入手できるすべての Java FFT ライブラリを試しましたが、この速度を実現できるものはありません。最速のライブラリは JTransforms ですが、それでも約 1 ミリ秒かかります。では、JAVA でそのような速度 (65 マイクロ秒) を達成できるかどうか教えていただけますか? 私が知っているように、この場合、C ライブラリ FFTW は十分に高速ですが、ここでは JNI を使用できず、Web サイトにアプレットとして展開されるため、純粋な Java 実装が必要です。

PS私の仕事は、FFTを使用して2 ^ 14オーディオフレームを周波数ドメインに転送し、それらに音響エコーキャンセルアルゴリズム(MDF)を適用することです。2^14 は、通常の部屋の標準的なエコー遅延によって決まります。

ありがとう!!!

4

2 に答える 2

2

実行時間はホストコンピューターの構成に大きく依存し、アプレットはクライアントコンピューターで実行されます。つまり、クライアントが異なれば、パフォーマンスも異なる可能性があります。また、中程度の構成では、65マイクロ秒で2^14の数値のFFTが得られる可能性はほとんどありません。

ここでは、FFTWのような最高のライブラリのこれらのベンチマークを見ることができます。FFTWを使用しても、2.80 Ghz、4Gbのメモリを搭載したIntelCorei7CPUを搭載したマシンで2^13ポイントのFFTを計算するには50マイクロ秒以上かかります。

于 2012-08-29T21:34:06.570 に答える
1

変換を繰り返し実行しましたか? Java は通常、ランタイムがコードのホットスポットに関する情報を収集できるようになった後に最適化を開始します。最初の (数回の) 実行には時間がかかります。サーバー VM を使用することもできます ( 「java -server」と「java -client」の本当の違いを参照してください) 。

JNI を試す前に、オーバーヘッドについて調べてください。実際には 65 マイクロ秒以上かかることがあります。

1ms と 65µs の差は大きすぎるように思われるため、コードが VM によって最適化されていないと思われます。

于 2012-08-29T21:24:15.857 に答える