【问题标题】:Are there other than FFT ways to implement Guitar Tuner?除了 FFT 方法来实现吉他调音器还有其他方法吗?
【发布时间】:2023-03-11 04:19:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这可能会让你深思 mlesniak.com/post/2018/09/13/go-guitar-/-visualize-sound ... 与我的吉他笔记有点切线 Show HN: Guitar Dashboard - 吉他手的开源音乐理论探索器 - news.ycombinator.com/item?id=17987657 源文章在guitardashboard.com
  • @ScottStensland 这个简单的 SDL 示例只是渲染波形(在时域中),这是没有用的,因为今天人们正在使用更高级别的库来绘制图表\图形(带有自动缩放/堆叠/.. . 功能等等),而不是自己写那些基础知识——它以前被写过百万次。那只是一个题外话,但我提到“它没用”,主要是因为我不想画它!不在时域,也不在频域))我想找到当前播放的音符的一些基频F,在低频下具有良好的分辨率。
  • 吉他音符波形不具有正弦形状,通常甚至不接近。因此,纯 FFT 峰值不是可行的方法。
  • @hotpaw2 整个音符波形不是正弦曲线,但我们不需要它的“整体性”:我们最好放弃 attackrelease 和其他泛音,如弹拨声。最值得注意的是——大部分音符能量都集中在sustain上。它几乎是纯正弦(共振)的东西:弦以单一频率共振,这完全取决于它的张力和长度。
  • 请注意,任何音符的 256 个样本(在 96k 处)超过 Concert-A 的 3 分之二小于一个完整周期,这低于任何 DFT 或 Goertzel 类方法的第 1 个 bin。所以你需要一个 256 个不完整周期的估计器。

标签: audio fft frequency audio-processing tuner


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的努力,但答案对我来说非常模糊。无法理解什么是“预期”频率。还有什么是“窗口分离到..”以及使用什么过滤器?
  • 我已经更新了解释,也许更清楚了
猜你喜欢
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
相关资源
最近更新 更多