2013-01-15 47 views
10

Tôi biết điều đầu tiên bạn đang làm là "tìm tài liệu bên trong", vấn đề là tài liệu không rõ ràng về nó.Sử dụng getSpectrum() trong thư viện Libgdx

tôi sử dụng thư viện để lấy FFT và tôi bắt đầu từ hướng dẫn ngắn này: http://www.digiphd.com/android-java-reconstruction-fast-fourier-transform-real-signal-libgdx-fft/

Vấn đề là nó sử dụng:

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

Cả hai "fft_cpx", "tmpi", "tmpr "là vector nổi. Trong khi "tmpi" và "tmpr" được sử dụng để tính toán độ lớn, "fft_cpx" không được sử dụng lại.

Tôi nghĩ rằng getSpectrum() là liên minh getReal và getImmaginary nhưng giá trị khác nhau. Có thể getSpectrum là các giá trị phức tạp, nhưng đại diện của chúng là gì?

Tôi thử không có mã số này fft_cpx=fft.getSpectrum(); và có vẻ như công việc đúng, nhưng tôi muốn biết nếu cần thiết và sự khác biệt giữa getSpectrum() và getReal() hoặc getImmaginary() là gì.

Đây là nó tài liệu: http://libgdx-android.com/docs/api/com/badlogic/gdx/audio/analysis/FFT.html

phao nào [] getSpectrum()

Returns: quang phổ của FourierTransform.forward cuối cùng() gọi.

phao nào [] getRealPart()

Returns: phần thực sự của FourierTransform.forward cuối cùng() gọi.

phao nào [] getImaginaryPart()

Returns: phần ảo của FourierTransform.forward cuối cùng() gọi.

Cảm ơn!

Trả lời

1

getSpectrum() trả về giá trị tuyệt đối của các số phức.

Được tính như sau:

for (int i = 0; i < spectrum.length; i++) { 
    spectrum[i] = (float)Math.sqrt(real[i] * real[i] + imag[i] * imag[i]); 
} 
Các vấn đề liên quan