【发布时间】:2011-01-15 17:49:30
【问题描述】:
如何使用 FFT 获得频率?正确的程序和代码是什么?
【问题讨论】:
-
我认为 SO 需要一个
trumpet标签..
标签: signal-processing signals fft pitch-tracking
如何使用 FFT 获得频率?正确的程序和代码是什么?
【问题讨论】:
trumpet 标签..
标签: signal-processing signals fft pitch-tracking
音高检测通常涉及测量功率谱中谐波之间的间隔。通过取前 N/2 个 bin (sqrt(re^2 + im^2)) 的大小,从 FFT 获得功率谱。然而,还有更复杂的音高检测技术,例如cepstral analysis,我们对功率谱的对数进行 FFT,以识别谱峰的周期性。
【讨论】:
Here 是一篇关于估计 PSD(功率谱密度)的非参数技术的简短博客文章以及一些更详细的链接。这可能会让您开始估计 PSD - 然后找到音高。
【讨论】:
乐器的持续音符是一个周期信号,我们的朋友傅立叶(“FFT”中的第二个“F”)告诉我们,任何周期信号都可以通过添加一组正弦波(通常具有不同的幅度、频率和相位)。 fundamental 是最低频率成分,它对应于音高;其余分量是泛音,是基频的倍数。决定音色或乐器特性的是基音和泛音的相对混合。单簧管和小号齐声演奏听起来“合拍”,因为它们共享相同的基频,但是,由于它们的音色不同(泛音混合),它们可以单独识别。
对于您的问题,您可以在时间窗口内对小号进行采样,计算 FFT(将样本序列分解为其组成的数字频率),然后断言音高是幅度最大的 bin 的频率.如果您愿意,可以将其轻松量化到最接近的音乐半音,例如降 E。 (如果您不了解采样频率和结果频率区间之间的关系,或者如果您不了解采样频率过低的危害,请在 Wikipedia 上查找 FFT。)这可能会满足您的需求,因为基本组件通常比任何其他组件具有更大的能量。窗口越长,音调精度越高,因为 bin 中心在频率上将变得更紧密。但是,如果窗口太长以至于小号在窗口期间明显改变其音高,那么该技术的有效性将大大降低。
【讨论】:
DansTuner 是我解决这个问题的开源项目。我其实是trumpet player。它具有从Audacity 提取的音高检测代码。
【讨论】:
ia 将此 org.apache.commons.math.transform.FastFourierTransforme 包添加到项目中,并且它的工作完美
【讨论】: