0

我正在使用 Jtransforms 库,它似乎对我的目的来说很快。

在这一点上,我认为我对 FFT 的工作原理有了很好的了解,所以现在我想知道是否有任何形式的标准域用于音频可视化,如频谱图?

感谢 android 在 2.3 中的原生 FFT,我一直使用字节作为范围,尽管我仍然不清楚它是否已签名。(我知道java没有无符号字节,但谷歌本机实现了这些功能,波形是PCM 8bit无符号)

但是,我正在调整我的应用程序以使用麦克风音频和 2.1 电话。此时,无论是 [-128, 127] 还是 [0, 255],输入域都在字节范围内,这似乎不再是最佳选择。

我希望我的 FFT 函数的范围是 [0,1] 以便我可以轻松地对其进行缩放。

那么我应该使用 [-1, 1] 还是 [0, 1] 的域?

4

2 回答 2

3

本质上,输入域无关紧要。最多,它会导致原始数据的偏移和缩放变化,这将分别转化为 bin #0 上的偏移和频域结果的整体缩放变化。

至于将您的 FFT 输出限制为 [0,1];这基本上是不可能的。通常,FFT 输出会很复杂,无法操纵您的输入数据,从而将输出限制为正实数。

于 2012-06-08T19:52:54.247 回答
0

如果您使用DCT而不是FFT ,您的输出范围将是真实的。(了解差异并确定 DCT 是否适合您的应用。)

实数的 FFT 实现(作为输入域)使用输出范围的一半样本(因为当输入为实数时只有偶数结果),因此每个样本都有实部和虚部的事实不会影响结果的大小(与源的大小相比)很多(输出大小为 ceil(n/2)*2)。

于 2012-06-08T20:14:00.520 回答