0

リアルタイム ノイズ リダクションを実行する Android プログラムを作成しようとしています。全体のソースコードは長すぎますが要点はこうです:
mic -> FFT -> ノイズリダクションとゲイン計算 -> IFFT -> スピーカー
途中でノイズリダクション機能をバイパスすると、スピーカーはマイクに入力されたものをすべて通過します。この場合、音はクリアです。でもノイズリダクション機能を有効にすると、実際にノイズリダクションが効いているように感じます。ただし、出力は歪んでいるようです。この歪みの一部は、ノイズ リダクション アルゴリズム自体が原因である可能性がありますが、サウンドを注意深く聞くと、サウンドが「フレームをスキップ」しているかのように、ざらざらしたタイプの歪みに気付くことができます。サウンドに適用するために実装した他のタイプのデジタル フィルターを使用した実験の後、FFT に必要な非常に長いループが原因でこれが発生していることがわかりました。IFFTとノイズリダクション機能。プログラムが for ループに陥っている間は、スピーカーからの出力はありません。多くの for ループがあるため、この破損は目立ち、出力はざらざらした音になります。

プログラムが for ループに費やす時間をできるだけ少なくするために、これを高速化する方法はありますか? 他の種類のループは違いを生むでしょうか? ノイズリダクション機能の側の操作を独立した部分に分割し、別々のスレッドで計算する方法を何とか見つけることができれば、歪みを取り除くのに役立ちますか? または、スレッド数を増やすと同様の問題が発生しますか?

4

2 に答える 2

0

解像度を下げ、できる限りインライン化します。Java では、gc はリアルタイム操作を非常に遅くする可能性があるため、早期に割り当ててすべてを再利用してください。

それ以外はゆっくりするならゆっくり。

また、ループの内部を高速化/プロファイリングして、ボトルネックを減らします。

于 2013-10-17T07:18:34.267 に答える