15

オーディオPCMデータを取得して、そのピークを見つけたいと思います。具体的には、ピークが発生する頻度と時間を返したいと思います。

これについての私の理解は、PCMデータを取得して配列にダンプし、複雑な部分を0に設定して実際の値として設定する必要があるということです。次にFFTを取得すると、配列が返されます。配列内の各数値が大きさの値である場合、各数値に関連付けられている頻度を取得するにはどうすればよいですか?また、実数部と複素数部の大きさを取得しますか、それとも複素数値を破棄しますか?

最後に、1つの曲のピークを見つけたい場合は、小さなウィンドウをFFTに設定して、すべてのオーディオにスライドさせますか?そのウィンドウの大きさに関する提案はありますか?

4

3 に答える 3

15

PCMデータのサンプルレートがFの場合、FFTの最高周波数成分はF/2です。PCMデータが44100Hzでサンプリングされたとすると、FFT値は0Hz(DC)から22050Hzまで実行されます。N個のサンプル(Nは2の累乗)から始める場合、FFTは0からF/2までのすべての正の周波数を表すN/2値を返すか、-からの負の周波数も含むN値を返す場合があります。 F / 2から0。各配列項目がどの周波数にマッピングされているかを確認するには、FFTアルゴリズムの仕様を確認する必要があります。

ピークを見つけるには、FFT値の大きさを調べる必要があります。したがって、各複素数値の実数部と虚数部の2乗を追加する必要があります。

N個のPCMサンプルのFFTが、正の周波数を表すN/2個の複素数値を返すとします。その場合、2つの複雑なサンプル間の距離はF /2NHzです。F=44100HzおよびN=1024サンプルの場合、これは21.5Hzになります。これが周波数分解能です。より低い周波数のビートを見つける必要がある場合は、FFTウィンドウを拡張する必要があります。

于 2009-08-13T14:36:10.940 に答える
4

さて、入力波を表す複素数のサイズ512の生の配列は、FFTで処理されると、虚数部をゼロに置き換え(使用目的に応じて)、実数部を残して、配列をサンプルレートでFFTに渡します。 :8192Hz。

これで、512個のFFT実数の配列ができました。各値は無理数であり、すべての無理数はいくつかの有用な値を表します。

基本周波数を取得するには、サンプルレートをバッファサイズで割る必要があります。

8192/512 = 32;

32はFFT値の分解能であり、32の倍数である数値の近くの高振幅周波数を知るようになっていることを意味します。

の波があるかのように

周波数:3 48 23128振幅:10 5 12 8 dB(ref = 1)

FFT後、次のようになります。

周波数:0 32 64128振幅:9 8 2 8

FFTは周波数領域であり、周波数に従って配置されます。反対側の時間領域は、音楽を聴く時間ごとに2番目の0から2番目のNまで配置されることを意味します。

FFTは、周波数0から周波数Nまでの周波数でアレンジされた場合にのみリッスンできます。

つまり、周波数を昇順で並べます。FFTにナノ秒以下を取得するように、オーディオから実際のサンプルをすべて取得するわけではないため(無限に近づいています)、幸いなことに、FFTはオーディオからサンプルを取得します。 (1 /サンプルレート)秒ごとにサンプルを取得します。このサンプルはバッファリングされ(この場合は512)、各512サンプルがFFTにバッファリングされ、出力は512FFT値になります。

FFTは周波数をアレンジするため、時間サンプルを混乱させます。サンプルは周波数に従ってアレンジされます。

サンプルレートをバッファサイズで割った基本周波数であるレギュラーベースで表示される周波数。この場合、8192/512=32です。

したがって、周波数パワーは32周波数ごとに表示され、最も近い周波数のパワーは、パワー周波数がインデックスにどれだけ近いかに応じて表示されます。

より高いサンプルレートを使用することで、高解像度を実現できます。

周波数を表示するために、振幅に対応する昇順でインデックスを印刷します。

振幅=20log10(出力/参照)

各インデックスの横に印刷された振幅は、周波数のパワーを示し、解像度の精度に応じてより正確になります。

結論として、FFTは振幅のインデックスを生成し、各振幅は対応するインデックス(周波数)のパワーを表します。

于 2009-12-18T19:42:59.403 に答える
3

あなたは実際にスペクトログラムを探しているかもしれません。それは基本的に時間軸に沿ってスライドする小さなウィンドウ内のデータのFFTです。これを実装するソフトウェアがある場合は、労力を節約できる可能性があります。これは、時間とともに変化する音響信号を分析するために一般的に使用されるものであり、音を見るのに非常に便利な方法です。また、たとえば、FFTのウィンドウデータを使用すると、スペクトログラムはおそらく正しくなりますが、正しく実行するのは難しくなります(それほど難しくはありません)。

于 2009-08-13T21:22:41.450 に答える