2

FFTの使用について質問があります。Minim iで関数getBand(int i)を使用すると、特定の周波数の振幅を抽出して、そのきれいなマップを作成できます。よく働く。

ただし、これは好奇心の問題です。同じ周波数を使用して同じ曲を2回再生して抽出された値を見ると(振幅は同じである必要があります)、非常に異なる値が得られます-これはなぜですか?

0.0,0.0,0.0,0.0,0.0,0.08706585,0.23708777,0.83046436,0.74603105,0.30447206
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.08706585,0.4790409,0.9608221,0.83046436,0.74603105
4

2 に答える 2

3

両方のケースで入力がまったく同じであると確信していますか? 曲のランダムなセグメントを取得している場合、FFT の出力は曲の開始点によって大きく異なります。

于 2010-04-05T11:31:03.930 に答える
2

mp3 のデコードが不安定である可能性があり、および/または fft ルーチンのリードイン バッファリングが不安定である可能性があります (シリーズに先行する無音の長さが異なります)。この場合、リードインは 2 番目の出力で約 2 ステップ大きいように見えます。

次に、fft が実行される時間間隔が fft ウィンドウ サイズよりも長い場合、リードインの違いにより、fft ウィンドウがシリーズのまったく異なる部分に到達する可能性があります。これにより、後で非常に異なる値が説明される可能性があります。出力で。

「時間分解能」(一定時間ごとに実行される fft の量) を増やすか、fft ウィンドウのサイズを大きくすると、fft の測定がまばらに行われなくなり、状況はより明確になります。理想的には、ステップ外で実行されたスキャン間でパターンが一致することを期待する前に、それらがオーバーラップする必要があります。

于 2010-04-05T17:42:30.467 に答える