質問

ここで初めて、屠殺されたフォーマットについて事前に申し訳ありません。

だから私はDSPを完全に慣れていないので、フーリエ変換について非常に一般的な理解しかありません。 Android.media.audiofx.visualizerのVisualizerクラスを含むAndroid SDK 9のVisualizerアプリを構築しようとしています。http://developer.android.com/reference/android/media/audiofx/visualizer.html

メソッド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のように見えるはずです。しかし、これらの振幅を見ると、ミラー化されたデータは表示されません。 Googleは、出力がスペクトルの両側の0からNまでであることを示しているようです。したがって、(output.length-1)/2からデータをoutput.length-1に取得できるはずです。負の振幅はサンプルレートよりも速く動いており、正の振幅はサンプルレートよりも遅く動いています。これを正しく理解しましたか?

役に立ちましたか?

解決

FFT出力サンプルKの周波数は次のように与えられます。

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

どこ

  • Fs 時系列入力のサンプリング周波数です
  • N FFTを計算するために使用されるサンプルの数ですか

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

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

別の重要なポイントは、0.5*fsの重要性です。 ナイキスト頻度. 。信号は、ナイキスト周波数までの周波数のみを正確に表すことができ、その上のすべての周波数は、歪みを引き起こすスペクトルにエイリアス(折り畳まれて)戻ります。

したがって、視覚化のために心配する必要があるのは、サンプリングレートFSを持つ実際の信号の意味のあるサンプルであるため、0からFS/2の周波数の範囲に対応するFFT出力サンプルだけです。

他のヒント

誰でも役立つ場合は、Mediaplayerから出力を取得し、視覚化を表示するVisualizerを作成しました。通常の波形とFFTデータの両方で動作します。

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

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

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