Использование getSpectrum() в библиотеке Libgdx

Я знаю, что первое, что вы делаете, это "искать его внутри документации", проблема в том, что документация не совсем понятна.

Я использую библиотеку для получения БПФ, и я начал с этого краткого руководства: 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 - это сложные значения, но каково их представление?

Я пробовал без этого linecode fft_cpx=fft.getSpectrum();, и кажется, что он работает правильно, но я хотел бы знать, если это необходимо, и в чем разница между getSpectrum() и getReal() или getImmaginary().

Вот это документация: http://libgdx-android.com/docs/api/com/badlogic/gdx/audio/analysis/FFT.html

public float [] getSpectrum()

Возвращает: спектр последнего вызова FourierTransform.forward().

public float [] getRealPart()

Возвращает: действительную часть последнего вызова FourierTransform.forward().

public float [] getImaginaryPart()

Возвращает: мнимая часть последнего FourierTransform.forward() звоните.

Thank в!

Ответ 1

getSpectrum() возвращает абсолютные значения комплексных чисел.

Он рассчитывается следующим образом

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