15

初めてここにいるので、フォーマットが乱雑になっていることを事前に申し訳ありません。

ですから、私はDSPにまったく慣れていないので、フーリエ変換についてはごく一般的な理解しかありません。android.media.audiofx.Visualizerhttp : //developer.android.com/reference/android/media/audiofx/Visualizer.htmlにVisualizerクラスを含むAndroidSDK9用のビジュアライザーアプリを構築しようとしてい ます。

getFft()メソッドのjavadocは、私が使用しているものです。

"現在再生中のオーディオコンテンツの周波数キャプチャを返します。キャプチャは8ビットの大きさのFFTです。FFTのサイズは指定されたキャプチャサイズの半分ですが、スペクトルの両側が返され、等しいバイト数になります。キャプチャサイズに合わせて」

まず、「スペクトルの両側」とはどういう意味ですか?この出力は標準のFFTとどのように異なりますか?

これがバイト配列の出力例です。getFft()は単純にするために124ポイントが与えられ、最初の31個のビンを取得しました。最初の31個のビンの大きさは次のとおりです。

{123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16, 11, -12, 12}

どんな助けや説明も大歓迎です!

編集: それで、たくさんのグラフを見つめた後、私の問題の一部は、Googleがどの単位が使用されているかを指定していないことのように見えます。他のほとんどすべての測定はmHzで行われますが、FTT出力もmHzであると想定するのは公平でしょうか?Visualizerクラスのソースコードを見ることができる場所はありますか?それで、内部で実際に何が起こっているのかを理解できるかもしれませんか?

私は先に進み、getFft()のすべての出力を取得しました

93, -2, -28, -16, -21, 19, 44, -16, 3, 16, -9, -4, 0, -2, 21, 16, -3, 1, 2, 4, -3, 5, 5, 10, 6, 4, -9, 7, -2, -1, 2, 11, -1, 5, -8, -2, -1, 4, -5, 5, 1, 3, -6, -1, -5, 0, 0, 0, -3, 5, -4, -6, -2, -2, -1, 2, -3, 0, 1, -3, -4, -3, 1, 1, 0, -2, -1, -1, 0, -5, 0, 4, -1, 1, 1, -1, 1, -1, -3, 2, 1, 2, -2, 1, 0, -1, -2, 2, -3, 4, -2, -2, 0, 1, -4, 0, -4, 2, -1, 0, -3, -1, -1, -1, -5, 2, -2, -2, 0, -3, -2, 1, -5, -2, 0, 0, 0, -2, -2, -1, -1, -1, -2, 0, 3, -3, -1, 0

したがって、これを正しく理解すると、ここでの出力は-Nから0からNになります。-Nから0は、0からNのようになります。しかし、これらの振幅を見ると、ミラーリングされたデータは表示されません。グーグルは、出力がスペクトルのちょうど両側で0からNでなければならないことを示しているようです。したがって、(output.length-1)/2からoutput.length-1にデータを取得できるはずです。負の振幅はサンプルレートより速く移動し、正の振幅はサンプルレートより遅く移動します。私はこれを正しく理解しましたか?

4

2 に答える 2

9

誰かに役立つ場合に備えて、MediaPlayerからの出力を取得して視覚化を表示するビジュアライザーを作成しました。通常の波形とFFTデータの両方で機能します。

https://github.com/felixpalmer/android-visualizer

getFft()の出力を視覚的に意味のあるものに変換するためのコードが含まれています。

于 2011-12-14T01:09:42.933 に答える
8

FFT出力サンプルkでの周波数は、次の式で与えられます。

Fk = k * Fs / N,    k = 0,1,...,N-1 

どこ

  • Fs時系列入力のサンプリング頻度です
  • NFFTの計算に使用されるサンプルの数です

スペクトルの両側は、FFTの出力の正と負の周波数を指します。FFTは、周波数出力をFsの周期で周期的にするように強制します。FFT出力を見ると、0からFsまでの周波数をカバーしています。FFT出力を0.5*Fs->Fsから-0.5*Fs-> 0にシフトする代わりに、-0.5*Fsから0.5*Fsの範囲でスペクトルを表示すると、周期性のために等しいため、多くの場合有利です。

オーディオ処理で使用するような実数値の信号の場合、負の周波数出力は正の周波数の鏡像になります。このため、実際の信号を分析する場合、スペクトルの片側のみが使用されることがよくあります。

もう1つの重要な点は、ナイキスト周波数として知られている0.5*Fsの重要性です。信号はナイキスト周波数までの周波数のみを正確に表すことができ、それを超える信号はエイリアシング(折り返し)されてスペクトルに戻り、歪みが発生します。

したがって、視覚化の目的で本当に心配する必要があるのは、0〜Fs / 2の周波数範囲に対応するFFT出力サンプルです。これらは、サンプリングレートFsの実際の信号にとって意味のあるサンプルだからです。

于 2011-01-19T04:55:13.313 に答える