动态时间扭曲算法适用于嗡嗡声系统的查询

本文关键字:嗡嗡声 系统 查询 适用于 算法 时间 动态 | 更新日期: 2023-09-27 18:25:31

我正试图通过哼唱系统开发一个查询,并寻找一种有效的算法来将哼唱查询的频率与数据库中的频率进行比较。看起来动态时间缠绕将是合适的,因为它可以处理不同的速度(节奏)。

  1. 但是,即使用户哼着不同的和弦,这能用来进行比较吗?换句话说,以不同的音高哼唱(例如,原曲在C和弦……用户在E和弦演唱)
  2. 有用c#编写的示例代码吗?(找到了一些matlab编码,但遗憾的是我不熟悉matlab)。或者至少有一个关于这个上下文描述dtw的教程
  3. 如果DTW不合适,是否有其他适合此目的的算法?非常感谢你的建议。提前感谢:)

动态时间扭曲算法适用于嗡嗡声系统的查询

在等气质调谐中(不是说人类本身被调谐,而是作为一个模型),相邻音符之间的比率(半步)是2的12根,即1.0595,因此12个半步组成一个八度音阶,每个八度音阶是频率的两倍。无论某人哼的是哪种音调,你都应该能够通过考虑音符频率的比率来确定他们哼的音程。

1,在用DTW比较两首曲子之前,最好先对音高进行归一化,我认为这在文献中被称为音高偏移。

2,我不确定是否有C#实现,https://github.com/EmilioMolina/QueryBySingingHumming,这里有一个c/c++演示代码。

3,DTW是匹配两个时间序列的有效算法,但唯一的问题是计算成本,当我们做真实世界的系统时,我们必须找到一种降低成本的方法:a)找到一种做DTW索引的方法?b) 找到一种更有效但不那么准确的算法来缩小DTW的搜索范围?