0

我想做精确的吉他调音器,这通常是由许多人通过计算 FFT 并获得峰值来完成的。但由于以下几个原因,这是低效的:

  • 离散精度,为调整低音吉他提供了不足的分辨率。
  • 尝试增加缓冲区大小(和/或采样率)时,计算时间和复杂性高。引入可见的延迟(滞后)。
  • 集中所有 FFT 精度的大部分频率范围都未被使用。1-2 khz 以上的一切都不适用于调音乐器。

对于具有单频正弦形状的信号,应该有更简单的方法。给定足够小的缓冲区(比如 96khz 采样率的 256 个样本) - 你如何测量基本(低)频率?

简而言之:如何找到频率F,以便“频率的正弦信号F”和“实际记录的信号”的差异会产生最小的误差,而不是任何频率,除了F?(所以我们可以明确地得出结论,频率的正弦曲线F是录制声音缓冲区的最佳近似值)。

PS。任何东西,但不使用 FFT!

4

1 回答 1

2

这是一种基于过零的简单方法。它依赖于能够将仪器信号映射到简单的正弦曲线。当信噪比很高时,这可能工作正常,但这不是一个非常稳健的方法。

  • 围绕您要调谐的音调的基频进行带通滤波器。吉他低音 E 弦的示例 82.41 Hz。
  • 考虑最后 N 个样本的窗口。将其设置为 ex 100ms 以每秒更新音高估计 10 次。
  • 使用阈值 T 执行过零检测。例如,T 可以设置为信号峰值的 10%。计算每个过零之间的周期,将它们收集在一个数组中。
  • 取周期的中位数来获得你的音高估计

您还可以计算期间的分位数以估计该方法的可靠性。如果他们给出的数字与中位数相差很大,则该方法效果不佳。

该方法可以通过计算零交叉点的自相关来扩展,如 https://www.cycfi.com/2018/03/fast-and-efficient-pitch-detection-bitstream-autocorrelation/中所述

于 2018-12-02T02:31:37.663 回答