我需要在Android项目中计算audiodata的FFT,我使用jTransforms来实现这一点。
audiodata的样本只有几秒钟的长度,并以11025赫兹的采样率记录。
我不确定如何在jTransforms中设置FFT的长度。 我真的不需要高频分辨率,所以1024的大小就足够了。
但是根据我对FFT的了解,如果我减小FFT大小F并使用长度为N的样本> F,仅转换原始样本的前F值。
这是真的还是我理解错了?
如果确实如此,是否有一种有效的方法可以转换整个信号并在之后减小FFT大小?
我需要这个使用支持向量机对不同的信号进行分类,并且FFT-Sizes> 1024会给我太多的功能作为输出,所以我不得不将FFT的结果减少到更紧凑的矢量。
答案 0 :(得分:1)
我不熟悉jTransform库,但你真的在计算之前设置了变换的大小吗?时域信号的幅度值和采样频率(11.025 kHz)足以计算FFT(请注意,FFT采用恒定采样率)
频域中的分辨率将由奈奎斯特定理确定;信号中的最大可分辨频率将等于采样率的一半。换句话说,对信号采样11.025 kHz,您可以预期频率图包含0 Hz - 5.5125 kHz之间的频率值(和相应的幅度)。
更新:
如果您的输入信号较长,则FFT的分辨率(频率区间的窄度)将增加/改善,因此如果您需要区分频率的非常小的变化,则1024个样本可能不够长序列。如果这不是您的应用程序的问题,并且数据的性质不会快速变化,并且您有处理时间,那么平均3-4次FFT估计将大大降低噪声并改善估计。
答案 1 :(得分:1)
如果您只想获得FFT幅度结果,则在连续的1024个数据块长度上重复使用FFT,并对所有连续幅度结果进行矢量求和,以估算整个更长的信号。
请参阅Welch's Method关于估算谱密度的说明,以解释为什么这可能是一种有用的技术。