KISS FFT プロットで、Y 軸に反映された重複ピークが表示されるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/8887896

  •  29-10-2019
  •  | 
  •  

質問

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

_____|________|_____

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

役に立ちましたか?

解決

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

詳細な説明は次のとおりです。 http://www.edaboard.com/thread144315.html

そしてこの本のp238~242を読んでください。素晴らしいので、購入してください。著者のウェブサイトに無料の PDF 版があると思います。 http://www.dspguide.com/

他のヒント

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

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

もう 1 つの可能性は、FFT が何らかの理由で長さ 512 のみだったということです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top