小编Gab*_*rer的帖子

在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();
Run Code Online (Sandbox Code Playgroud)

"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

public float [] getSpectrum()

返回:最后一个FourierTransform.forward()调用的频谱.

public float [] getRealPart()

返回:最后一个FourierTransform.forward()调用的实部.

public float [] getImaginaryPart()

返回:最后一个FourierTransform.forward()调用的虚部.

谢谢!

java android fft spectrum libgdx

10
推荐指数
1
解决办法
990
查看次数

FFT 之前或之后标准化信号有何区别?

我正在使用 Libgdx 库对 Android 应用程序中的加速度计信号进行 FFT。

我需要对信号进行归一化,因为我找到两个信号的点积,并且我希望其最大值为 1。

对于“归一化”,我的意思是信号的欧几里得范数是1。(欧几里得范数是向量模拟分量的乘积之和的平方根。当我找到它的值时,为了归一化信号,我将向量的所有分量除以标准值)。

点积位于频谱中,因此如果我在时域中对信号进行归一化,则频谱表示不是欧几里德归一化,那么我将再次进行欧几里德归一化。(我已经考虑在 FFT 之后按 1/N比例因子进行归一化,我认为这可能不会影响我的问题)。

如果我在 FFT 之前和之后进行欧几里得归一化,或者仅在 FFT 之后进行欧几里得归一化,会有什么区别?

编辑1:还要考虑Libgdx库中的FFT是复杂的DFT,并且我在输入中有真实信号,而输出信号对于0到(N/2)-1和N/2到N是对称的。我验证了Parseval定理如果我不应用窗口(如汉明窗口),则验证。那么,如果我使用 0 到 N/2-1 信号分量,我会得到 0 到 1 之间的点积吗?

android signal-processing fft normalization libgdx

0
推荐指数
1
解决办法
4718
查看次数