在Libgdx库中使用getSpectrum()函数

10

我知道你现在想的第一件事是“在文档中查找”,但是文档对此不是很清楚。

我使用这个库来获取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和getImaginary的并集,但值却完全不同。 也许getSpectrum的结果是复数值,但它们的表示方式是什么?

我尝试在没有fft_cpx=fft.getSpectrum();的情况下运行程序,结果似乎正常,但我想知道它是否真的必要,以及getSpectrum()、getReal()和getImaginary()之间有何区别。

文档位于: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()调用的虚部。

谢谢!

1个回答

1

getSpectrum()返回复数的绝对值。

计算方法如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接