0

入力としてオーディオ信号 (現在は正弦波) を受け取り、次のことを行うコードをいくつか書きました。

  1. n(1024) サンプルのフレームを取る
  2. FFT を適用
  3. iFFT を適用する
  4. 再生出力

このプロセスにより、出力信号は基本的に入力信号と同じになります。

さて、2回目の試みで私は次のことを行います:

  1. 入力からオーバーラップフレームを取得する
  2. ウィンドウ関数を適用する
  3. FFT
  4. iFFT
  5. 出力フレームを重ねる

ステップ 1 で、2 の累乗 (4、8、256...) のホップ サイズ (次のフレームを取得するためにジャンプするサンプル数) を使用してオーバーラップ フレームを取得すると、出力サウンドは滑らかで、元の入力サウンドに似ています。 、しかし、他のホップサイズでは、音が割れ始めます. これは、入力信号の任意の周波数で発生します。質問 1. ホップ サイズが 2^n の場合にのみ音が滑らかになるのはなぜですか? .

現在、私はハニング窓を使用しています。ホップサイズが大きい場合 (例: 512) は、ホップサイズが小さい場合 (例: 64) よりも出力音の音量が小さくなります。ホップ サイズが小さいということは、サンプルがより多くのフレームで再構築され、より多くの信号が追加されることを意味するため、これは予期された動作のようです。質問 2. 音量が元の信号に似るように、出力信号を適切にスケーリングする方法はありますか?

ありがとうございました!

4

2 に答える 2

2

これは起こるべきではありません。Overlap-add メソッドは、説明されている問題なしに信号を再構築できます。何をしているのか正確にはわかりません。私は少し前にそれを行いましたが、任意のホップ サイズとウィンドウ サイズで機能します。小さな秘密が適用されます。信号の前後にゼロを付けて連続信号を確保します。冷静に見ると、フレームを連結するだけでウィンドウ関数がフェードイン/フェードアウトのように機能することがわかります。いくつかのクリックに気付くか、出力信号は次のようになりますビブラートを使用すると、問題が実際にどこにあるのかを判断するのが少し難しくなります。

デバッグのためだけに、FFT と iFFT の手順をスキップして、信号が正しく構築されているかどうかを確認します。そうであれば、オーバーラップ加算プロセスが機能し、問題は FFT/iFFT にある可能性があります ...

于 2014-03-05T21:56:55.073 に答える