Shazam原理分析

来源:互联网 发布:mac在哪里更新系统 编辑:程序博客网 时间:2024/05/18 01:34

1           数据库的建立:

1.1            特征提取:对每个音频提取spectrogram,横轴为时间,纵轴为频率,用每个坐标上点的颜色来表示能量高低,选取能量较高的作为特征点。

1.2          每秒提取三个特征点,如果数据库中总共有一百万首乐曲,每首乐曲的长度大约为4分钟,也就是240秒,那么一共大约有 个特征点。

1.3          采用Hash Table建立数据库。Key值为每个特征点对应的频率,桶内存放的数据为特征点的偏移量以及音频的ID。那么假设对频率保留五位有效数字(有效数字太多,抗噪性能会变差),最多也只能建立 个桶,用10bit来表示每个Key,平均每个桶中有 个元素,碰撞会十分严重,检索效率太低。

1.4          为了提高检索效率,必须提高Key值的熵,也就是增加Key值的位数。这里采用特征点对的方法,每个Key值用三种特征值表示 f表示anchor的频率, 表示anchortarget zone中特征点的频率差值, 表示他们的时间差值,这样就可以建立 个桶,大约是原来的 倍,平均每个桶中只有一个元素,大大减小了碰撞的几率,检索一次的速率提高了 倍。

1.5          由于采用了特征点对的方法,需要检索的次数是原来的100倍(数据库中多了10倍,被检索音频多了10倍)。即使这样,整体速度依然提高了10000倍。这就是一种以空间换时间的方法。

1.6          如果每个特征点仅仅检索一次的话,抗噪性能会大幅减弱。假设一个特征点匹配的概率为p,那么特征点对匹配的概率为 ,概率值减小了很多。因此采用target zone的方法,每个anchor对应一个target zone,每个target zone中有10个特征点,这样针对每个anchor都形成了10个特征点对,这10个特征点对中有一对能匹配的概率是 ,也就是每个anchor匹配的概率和原来(p)近似相等。

2          检索

2.1          对找到的匹配特征点按乐曲的ID进行分类,针对每一个ID得到一系列时间对,即数据库中音频特征点的偏移量和样例音频中特征点的偏移量。如下图:

2.2         当两个音频匹配时,这些特征点对将形成一条对角线,当能够检测到这样一条对角线时,说明两个音频匹配。

2.3         通过计算每个点横纵坐标的差值可以得到一个柱状图,找出其中最高的那根,就可以判断是否匹配了。

 

 

原创粉丝点击