0

我需要在 Android 项目中计算音频数据的 FFT,我使用 jTransforms 来实现这一点。

音频数据的样本长达几秒钟,并以 11025 赫兹的采样率记录。

我不确定如何在 jTransforms 中设置 FFT 的长度。我真的不需要高频率分辨率,所以 1024 的大小就足够了。

但是根据我对 FFT 的了解,如果我减小 FFT 大小 F 并使用长度为 N > F 的样本,则仅转换原始样本的前 F 值。

这是真的还是我理解错了?

如果是真的,是否有一种有效的方法来转换整个信号并在之后减小 FFT 大小?

我需要它来使用支持向量机对不同的信号进行分类,而 FFT-Sizes > 1024 会给我太多的输出特征,所以我必须将 FFT 的结果减少到更紧凑的向量。

4

2 回答 2

1

我对jTransform库不熟悉,但是你真的在计算之前设置了变换的大小吗?时域信号的幅度值和采样频率(11.025 kHz)足以计算 FFT(注意 FFT 假设采样率恒定)

频域分辨率由奈奎斯特定理确定;信号中的最大可解析频率将等于采样率的一半。换句话说,以 11.025 kHz 对信号进行采样,您可以期望频率图包含 0 Hz - 5.5125 kHz 之间的频率值(和相应的幅度)。

更新:

如果您的输入信号较长,FFT 的分辨率(频率区间的窄度)将增加/改善,因此如果您需要区分频率的非常小的变化,1024 个样本可能不是一个足够长的序列。如果这对您的应用程序来说不是问题,并且您的数据的性质没有快速变化,并且您有处理时间,那么平均 3-4 次 FFT 估计将大大减少噪声并改善估计。

于 2013-02-10T20:26:28.020 回答
1

如果您只想要 FFT 幅度结果,则对连续 1024 个数据块长度重复使用 FFT,并对所有连续幅度结果进行矢量求和,以获得整个更长信号的估计。

请参阅Welch 的关于估计谱密度的方法,以了解为什么这可能是一种有用的技术。

于 2013-02-10T21:13:29.690 回答