2013-01-15 31 views
10

我知道你所要做的第一件事是「在文檔中尋找它」,問題是文檔不清楚它。在Libgdx庫中使用getSpectrum()

我使用該庫來獲得FFT和我從這個簡短的指南開始: http://www.digiphd.com/android-java-reconstruction-fast-fourier-transform-real-signal-libgdx-fft/

的問題是,它使用:

fft.forward(array); 
    fft_cpx=fft.getSpectrum(); 
    tmpi = fft.getImaginaryPart(); 
    tmpr = fft.getRealPart(); 

兩個 「fft_cpx」, 「TMPI」,「TMPR 「是浮動向量。雖然「tmpi」和「tmpr」用於計算幅度,但「fft_cpx」不再使用。

我認爲getSpectrum()是getReal和getImmaginary的聯合,但是值都是不同的。 也許getSpectrum是複雜的值,但它們的表示是什麼?

我嘗試沒有這行代碼fft_cpx=fft.getSpectrum();它似乎工作正確,但我想知道是否有必要和getSpectrum()和getReal()或getImmaginary()之間的區別是什麼。

這裏是單證: http://libgdx-android.com/docs/api/com/badlogic/gdx/audio/analysis/FFT.html

公衆持股量[] getSpectrum()

返回:最後FourierTransform.forward()調用的頻譜。

公衆持股量[] getRealPart()

返回:最後FourierTransform.forward()調用的實部。

公共浮[] getImaginaryPart()

返回:最後FourierTransform.forward() 呼叫的虛部。

謝謝!

回答

1

getSpectrum()返回複數的絕對值。

它是這樣計算

for (int i = 0; i < spectrum.length; i++) { 
    spectrum[i] = (float)Math.sqrt(real[i] * real[i] + imag[i] * imag[i]); 
}