Audio 除了FFT以外,还有其他方法实现吉他调谐器吗?

Audio 除了FFT以外,还有其他方法实现吉他调谐器吗?,audio,fft,frequency,audio-processing,tuner,Audio,Fft,Frequency,Audio Processing,Tuner,我想做精确的吉他调谐器,这通常是由许多人通过计算FFT和获得峰值。但由于以下几个原因,这是低适用性的: 离散精度,为低音吉他的调谐提供了不足的分辨率 当试图增加缓冲区大小(和/或采样率)时,计算时间和复杂性较高。引入可见延迟(滞后) 集中所有FFT精度的大部分频率范围未使用。1-2 khz以上的频率不适用于调谐乐器 对于具有单频正弦形状的信号,应该有更简单的方法。给定足够小的缓冲区(假设它是256个采样,采样率为96khz)-如何测量基本(lowese)频率 简单地说:如何找到频率F,这样“

我想做精确的吉他调谐器,这通常是由许多人通过计算FFT和获得峰值。但由于以下几个原因,这是低适用性的:

  • 离散精度,为低音吉他的调谐提供了不足的分辨率
  • 当试图增加缓冲区大小(和/或采样率)时,计算时间和复杂性较高。引入可见延迟(滞后)
  • 集中所有FFT精度的大部分频率范围未使用。1-2 khz以上的频率不适用于调谐乐器
对于具有单频正弦形状的信号,应该有更简单的方法。给定足够小的缓冲区(假设它是256个采样,采样率为96khz)-如何测量基本(lowese)频率

简单地说:如何找到频率
F
,这样“频率的正弦信号
F
”和“实际记录的信号”之间的差异将给出最小误差,而不是
F
?(因此我们可以明确地得出结论,频率
F
的正弦曲线是记录的声音缓冲区的最佳近似值)


任何东西,但不使用FFT

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

  • 围绕要调谐的音调的基频的带通滤波器。例如吉他上的低E弦为82.41 Hz
  • 考虑最后N个样本的窗口。将其设置为ex 100ms,以每秒更新音高估计值10次
  • 使用阈值T执行过零检测。例如,T可以设置为信号峰值的10%。计算每次过零之间的周期,将它们收集到一个数组中
  • 取周期的中位数得到你的音高估计值
您还可以计算周期的分位数,以估计该方法的可靠性。如果他们给出的数字与中位数相差甚远,那么这种方法就不起作用

该方法可以通过计算零交叉点上的自相关来扩展,如中所述
这里有一个基于过零的简单方法。它依赖于能够将仪器信号映射到一个简单的正弦曲线。当信噪比较高时,这种方法可以正常工作,但不是一种非常稳健的方法

  • 围绕要调谐的音调的基频的带通滤波器。例如吉他上的低E弦为82.41 Hz
  • 考虑最后N个样本的窗口。将其设置为ex 100ms,以每秒更新音高估计值10次
  • 使用阈值T执行过零检测。例如,T可以设置为信号峰值的10%。计算每次过零之间的周期,将它们收集到一个数组中
  • 取周期的中位数得到你的音高估计值
您还可以计算周期的分位数,以估计该方法的可靠性。如果他们给出的数字与中位数相差甚远,那么这种方法就不起作用

该方法可以通过计算零交叉点上的自相关来扩展,如中所述

这可能会让你深思。。。《我的吉他笔记》中有一点相切:HN:guitar Dashboard–面向吉他手的开源音乐理论资源管理器–源文章@ScottStensland这个简单的SDL示例只是渲染波形(在时域中),这是无用的,因为今天人们使用更高级别的库来绘制图表\图形(使用自动缩放/堆叠/…功能等),而不是编写基本功能本身-它在以前被编写了数百万次。这只是一个离题的评论,但我提到“它没用”,主要是因为我不想绘制它!不在时域,也不在频域))我想找到当前演奏的音符的一些基频
F
,在低频时具有良好的分辨率。吉他音符波形没有正弦形状,通常甚至不接近。因此,裸FFT峰值不是一种可行的方法。@hotpaw2整个音符波形不是正弦的,但我们不需要它的“完整性”:我们最好放弃攻击、释放和附加泛音,如弹拨音。最值得注意的是——大部分的音符能量集中在维持上。它几乎是纯正弦(共振)的东西:弦在单一频率下共振,这完全取决于它的长度和长度。请注意,任何音符的256个样本(96k)比Concert-a低三分之一还少一个完整周期,比任何DFT或类似Goertzel的方法的第一个二进制都低。所以你需要一个256的不完全循环的估计量。这可能会给你一些思考的食物。。。《我的吉他笔记》中有一点相切:HN:guitar Dashboard–面向吉他手的开源音乐理论资源管理器–源文章@ScottStensland这个简单的SDL示例只是渲染波形(在时域中),这是无用的,因为今天人们使用更高级别的库来绘制图表\图形(使用自动缩放/堆叠/…功能等),而不是编写基本功能本身-它在以前被编写了数百万次。这只是一个离题的评论,但我提到“它没用”,主要是因为我不想绘制它!不在时域,也不在频域))我想找到当前演奏的音符的一些基频
F
,在低频时具有良好的分辨率。吉他音符波形没有正弦形状,通常甚至不接近。因此,裸FFT峰值不是一种可行的方法。@hotpaw2整个音符波形不是正弦的,但我们不需要它的“完整性”:我们最好放弃攻击、释放和附加泛音,如弹拨音。最值得注意的是——大部分的音符能量是集中的