3

私はFFTの概念の初心者なので、1024の信号を入力すると、0hzから22050Hz(44100Hzのサンプリングレートの場合)の範囲の513のビンが返されることを理解しています。CinderでKISSFFTを使用すると、getBinSize関数は1024信号の入力に対して予想される513値を返します。私が理解していないのは、なぜ重複したピークが現れるのかということです。20Hzから22000Hzの周波数を(順番に)通過するテストオーディオサンプルを実行すると、常に2つのピークが見られます。次のようになります。

__ _ __ |__ _ __ _ __ |__ _ __

オーディオが再生されると、ピークは互いに向かって移動しているように見えるため、2番目のピークは実際には最初のピークのミラーリングされた複製であるように見えます。私が経験したすべての例は、先に進んで513の値すべてをプロットしているようであり、このミラーリングの問題はないようです。何が欠けているのかわかりません。

4

2 に答える 2

9

わかりました、これを読んだ後、私は解決策を見つけました。ミラーリングの理由は、実数で FFT (実数 FFT) を使用するためです。誰もが知っているように、通常の FFT は複素数で機能します。したがって、実際の FFT では虚数部が 0 に「設定」され、中央付近でミラーリングが行われます (技術的に言えば、ミラーリングは 0 と N/2 付近になります)。

ここに詳細な議論があります: http://www.edaboard.com/thread144315.html (このページはもう利用できませんが、 archive.org にコピーがあります)

そして、この本 (第 12 章) の 238 ~ 242 ページを読んでください。素晴らしいので、購入してください。著者の Web サイトに無料の PDF 版があると思います: http://www.dspguide.com/

于 2012-05-24T19:55:40.813 に答える
1

おそらく、長さ 1024 の FFT の 1024 個の FFT 結果ビンすべての大きさをプロットしていますが、上半分は下半分の鏡像にすぎません (複素 fft への実数のみの入力では十分な自由度が得られないためです)。上半分を一意にします)。

ピークは、互いの鏡像が中心について互いに鏡像になると、互いに向かって移動します。

もう 1 つの可能性は、FFT の長さが 512 しかないということです。

于 2012-01-17T02:38:29.043 に答える