在java中确定给定时间内的频率

时间:2012-03-28 20:45:07

标签: java audio fft

确定FFT(快速傅立叶变换)通常是时频折衷。如果我们在更长的时间(15到20秒)内计算FFT,我们可以获得更准确的频率但是它们的数量非常少。对于较小的时间间隔,频率通常表现出明显的变 什么是我们可以获得具有足够频率点的可靠数据的最佳时间间隔?

3 个答案:

答案 0 :(得分:1)

这取决于您的音频类型。也许你应该考虑使用小波分析。通过这种方式,您可以提取非常准确的高频而不会失去对低频的识别。

答案 1 :(得分:1)

读取Nysquist-Shannon Sampling Theorem - 1 / 2B处的采样,其中B是信号中的最大频率,应该能够在没有数据丢失的情况下重建它。

这对我来说意味着你可以通过对样本中最小频率的两倍周期进行采样来获得足够好的FFT信号 - 也就是说,我猜,如果样本是周期性的:P

答案 2 :(得分:1)

“最佳”取决于您的需求。

如果时间分辨率更重要,那么较少数量的分数可能会更好。

如果频率分辨率比更大数量的点更重要可能会更好。

如果本底噪声较高,则更多点可能会更好。

如果您不关心,则使用短FFT来节省计算时间和能量。 (或者不要打扰FFT,只需从/ dev / random中获取一些结果)。

如果感兴趣的信号不是静止的(例如它们随时间变化),那么您可能需要足够短的FFT来将所有感兴趣的单个光谱事件分离到它们自己的FFT窗口中。

如果您需要能够清晰地将光谱信号峰值与相邻噪声峰值分开的频率分辨率,那么您希望FFT长度至少为采样率的两倍除以您想要分离的峰值之间的最小delta频率,如果你的窗口。如果您不需要这种精度,那么可以使用更短的FFT。

如果噪声水平和干扰与您感兴趣的信号相比足够低,您可以使用更短的FFT或甚至不使用FFT来插入孤立峰值的频率估计值。在零噪声中,只有3或4个非混叠采样点可以用于单个正弦曲线。