吉他弦信号的谐波积谱

信息处理 matlab 音乐
2022-02-17 03:47:44

我正在尝试创建一个程序,该程序可以获取来自吉他弦的信号的基频,以识别正在播放的音符,谐波乘积谱是最适合获取基频的算法吗?有没有可以实时使用的算法?

我也在使用matlab simulink来实现这个算法到arduino

非常感谢所有答案,提前谢谢你:)

4个回答

HPS(谐波积谱)、ASDF、AMDF 和自相关都是类似的周期性估计方法(它们使用不同的权重和算法),这可能对吉他音符音高估计有用。这些方法具有不同的估计准确度/误差统计,可能会因测试的吉他类型、琴弦、麦克风设置等而有所不同。实验。

HPS 有一个有趣的优势。低音吉他弦的泛音系列可能会略微不和谐,部分原因是实际吉他弦的物理特性,其厚度和刚度不为零。然而,有一些实验证据表明,与吉他弦的实际基本振动模式频率相比,不和谐泛音系列之间的拉伸实际上可能更接近于人类对音高的典型心理声学感知。

也就是说,对于 Arduino AVR 处理器来说,天真的使用这些方法可能太重了。也许使用 ARM M0 的 Arduino 会更合适。此外,为了减少执行完全 FFT 或完全自相关等效的计算负载,您可能需要使用修改后的过零间距估计器。只需确保使用足够大的零交叉跨度对(不仅仅是相邻的交叉),这样您就可以使用单个 AMDF 之类的东西来选择哪一组跨度对代表泛音、谐波或噪声滞后,以及哪些跨度对可能代表基本音高滞后。一旦您验证了一组跨度对或滞后,您可能需要平均或中值过滤。

在实时方面,自相关性能非常好,只需要基本的 2 个周期。一个开放的低E弦大约需要。24毫秒发生2个周期..我为我的fyp制作了一个“实时”吉他到midi插件。在确定自相关之前,我尝试了各种不同的音高检测技术(inc HPS)。

这是一个视频,因此您可以判断延迟:https ://youtu.be/1cmOwrOeXCM

请随意私信我,因为我发现这个领域非常有趣!

我曾尝试使用独立的锁相环(更具体地说,Costas 环)来跟踪基本和一些部分,并且效果非常好。将带通滤波器添加到 PLL 输入后,它可以跟踪至少 12 个分音。

https://play.google.com/store/apps/details?id=com.igorinov.stringtuner

倒谱也可用于找到具有谐波泛音的基本音高。但是,我不确定硬件当前执行短窗口倒谱的能力是什么。https://en.m.wikipedia.org/wiki/Cepstrum