【问题标题】:Pitch detection using FFT for trumpet使用 FFT 检测小号的音高
【发布时间】:2011-01-15 17:49:30
【问题描述】:

如何使用 FFT 获得频率?正确的程序和代码是什么?

【问题讨论】:

  • 我认为 SO 需要一个 trumpet 标签..

标签: signal-processing signals fft pitch-tracking


【解决方案1】:

音高检测通常涉及测量功率谱中谐波之间的间隔。通过取前 N/2 个 bin (sqrt(re^2 + im^2)) 的大小,从 FFT 获得功率谱。然而,还有更复杂的音高检测技术,例如cepstral analysis,我们对功率谱的对数进行 FFT,以识别谱峰的周期性。

【讨论】:

    【解决方案2】:

    Here 是一篇关于估计 PSD(功率谱密度)的非参数技术的简短博客文章以及一些更详细的链接。这可能会让您开始估计 PSD - 然后找到音高。

    【讨论】:

      【解决方案3】:

      乐器的持续音符是一个周期信号,我们的朋友傅立叶(“FFT”中的第二个“F”)告诉我们,任何周期信号都可以通过添加一组正弦波(通常具有不同的幅度、频率和相位)。 fundamental 是最低频率成分,它对应于音高;其余分量是泛音,是基频的倍数。决定音色或乐器特性的是基音和泛音的相对混合。单簧管和小号齐声演奏听起来“合拍”,因为它们共享相同的基频,但是,由于它们的音色不同(泛音混合),它们可以单独识别。

      对于您的问题,您可以在时间窗口内对小号进行采样,计算 FFT(将样本序列分解为其组成的数字频率),然后断言音高是幅度最大的 bin 的频率.如果您愿意,可以将其轻松量化到最接近的音乐半音,例如降 E。 (如果您不了解采样频率和结果频率区间之间的关系,或者如果您不了解采样频率过低的危害,请在 Wikipedia 上查找 FFT。)这可能会满足您的需求,因为基本组件通常比任何其他组件具有更大的能量。窗口越长,音调精度越高,因为 bin 中心在频率上将变得更紧密。但是,如果窗口太长以至于小号在窗口期间明显改变其音高,那么该技术的有效性将大大降低。

      【讨论】:

      • 嗨!你能澄清一下你的意思吗:“这可以被简单地量化到最接近的音乐半音,比如降E。”频率->音高转换会不会更像是产生的峰值频率最接近音高的基频?
      • 我认为 FFT 的精度不足以进行可用调整。音高检测也许,但即使这样也需要相当大的采样率或缓冲区长度(有你提到的缺点)。频率分析(是的,这个拼写)可能会有所帮助。您基本上测量了 FFT 峰值之间的“周期性”。请参阅 Paur R 的回答。
      【解决方案4】:

      DansTuner 是我解决这个问题的开源项目。我其实是trumpet player。它具有从Audacity 提取的音高检测代码。

      【讨论】:

      • 您的代码库已关闭。你能发到 GitHub 上吗?
      • @SMeaden 我将项目页面上的链接固定到源代码,该源代码位于 Subversion 存储库中:sourceforge.net/p/danstuner/code/HEAD/tree。或许这就够了。
      【解决方案5】:

      ia 将此 org.apache.commons.math.transform.FastFourierTransforme 包添加到项目中,并且它的工作完美

      【讨论】:

        猜你喜欢
        • 2011-09-23
        • 2012-05-09
        • 2010-11-30
        • 2011-05-28
        • 2023-03-19
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 2014-07-11
        相关资源
        最近更新 更多