对于哼唱系统的查询,动态时间扭曲算法有多合适?

时间:2012-02-23 17:52:51

标签: c# algorithm time-series dynamic-programming query-by-example

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

  1. 但是,即使用户在不同的和弦中哼唱,这可以用于比较吗?换句话说,不同音高的嗡嗡声(例如,原始歌曲在和弦C中......并且用户在和弦E中唱歌)
  2. 是否有用c#编写的示例代码? (发现一些matlab编码,但不幸的是我不熟悉matlab)。或者至少有一个关于这个背景描述dtw的教程?
  3. 如果DTW不合适,是否还有其他适用于此目的的算法? 非常感谢您的建议。在此先感谢:)

2 个答案:

答案 0 :(得分:0)

Equal temperament调整中(不是人类调整本身,而是作为模型)相邻音符之间的比例(半步)是2的第12个根,或1.0595,使得12个半音阶构成一个八度音阶,并且每个八度音阶都是频率的两倍。无论有什么关键人物哼唱你应该能够通过考虑音符频率的比率来确定他们正在哼唱的intervals

答案 1 :(得分:0)

1,最好在通过DTW比较两个曲调前对音高进行标准化,我认为这在文献中被称为音高变换。

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

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