音频指纹的算法--飞利浦解决方案

来源:互联网 发布:淘宝淘部落怎么报名 编辑:程序博客网 时间:2024/04/29 06:47

这个音频指纹暂时用来做同源音频聚类,判断歌曲是否是同一源的,


这里先介绍下飞利浦的方案-------A Highly Robust Audio Fingerprinting System,这个算法是在他上面的优化,

:                      一段固定时间的音频信息,Ts;

相邻两个帧:      两个帧重叠时间域为 31/32,

步长:                   一个帧与下一个帧起始时间之差,Tstep = 1/32 * Ts;


通过能量差分的关系,求得相邻音频两个帧(两帧之间的重叠区域为31/32)之间的能量关系,产生指纹,这个音频的特征值就是两帧之间的能量关系。


傅里叶变换成频率信息,把300 ---- 2000HZ 频率映射到33个频率带,计算各频率带的能量通过能量差分信息变换成二进制数。具体细节可以看论文

A Highly Robust Audio Fingerprinting System,这个方案,是把相邻帧之间的能量关系用来做为音频的特征。

大概步骤如下:

1.      提取一帧的音频信息

2.      加窗---汉宁窗

3.      FFT,把振幅信息转成能量信息,

4.      FFT结果取绝对值

5.      把频率在 300---2000,映射到33频率bands,计算各个band 能量

6.与上一帧能量值比较产生子指纹

详细说明

        音频实现实际上也是频率信息,每一个采样点记录的是波形在该点的振幅,对于一个音频文件来说,他的特征是在频率信息上。我们分辨音乐是通过人耳来分辨的,耳朵听到声音实际上也是频率信息,在指纹算法中也需要模拟人耳朵。

        产生指纹前面几步都没有什么要说的,都是些标准过程。从第5步才是说,如何把fft后结果映射到33个频率带中?需要模拟人的耳朵,人的耳朵对于频率范围在300---2000的声音比较敏感,人耳对于声音的鉴别主要集中在300 ---2000HZ这个频率段声音的强弱等信息来辨别,强弱信息就是能力信息,通过计算能量,来鉴别音频信息。

       如何把300 --- 2000Hz 映射到33个频率带了,根据 bark scale,耳朵听到的频率与实际的频率并不完全一致,既然是模拟耳朵,需要按照人耳听到的频率来映射。我们根据300---2000HZ 频率bark值,平均分成33的频率段,计算每个频率段能量和。

我们得到33能量信息,E[ 1....33 ],   E_ [ i ] = [ i + 1]   - E[ i ]; F[ n, M]表示第n帧,E_[  M ] 的值。

如果 F[ n, M]  ---   F[ n-1, M] > 0 第子指纹第M位 为1 ,否则 为0,这样两个帧的比较可以产生一个32子指纹,一个指纹由256指纹构成。




我们所要做的是音频聚类,稍微做了一下修改,

论文中3s音频信息可以产生一个指纹,一个指纹由256个子指纹构成,如果一个音频所有的时段都产生指纹无意会非常大。

对于音频信息,可能开始与结尾几s都是空信息,我们音频选取中间的时间段生成指纹,在实验中采用的指纹时间段为 85s----100s, 120 ---135s,这两个时间段

产生指纹,建库时候是这样建的。进行歌曲匹配的时候,90--93产生一个指纹,126s---129s参数一个指纹,分别与85s----100s, 120 ---135s指纹库匹配。


实验结果

实验的结果并不理想,识别率在98%左右,主要是两个工作没有做,第一个就是滤波,第二个就是频段的划分,在实验中我是 按照 bark scale 值平均分成33的频率带的,对于滤波,我只采取了 300--2000Hz。

结果图:后边数字表示错误率,越小越好,阀门值是0.35,

Beyond - 海阔天空-64.mp3 compare with  Beyond - 海阔天空.mp3  bit error: 0.0565186 0.0698242
Beyond - 海阔天空-64.mp3 compare with  O Fortuna.mp3  bit error: 0.459351 0.443726
Beyond - 海阔天空-64.mp3 compare with  凤凰传奇-荷塘月色.mp3  bit error: 0.461304 0.45166
Beyond - 海阔天空-64.mp3 compare with  刘德华 - 冰雨.mp3  bit error: 0.455078 0.455811
Beyond - 海阔天空-64.mp3 compare with  叶倩文 - 秋来秋去-64.mp3  bit error: 0.458496 0.444458
Beyond - 海阔天空-64.mp3 compare with  叶倩文 - 秋来秋去.mp3  bit error: 0.455078 0.447876
Beyond - 海阔天空-64.mp3 compare with  唐古 - 做你心上的人.mp3  bit error: 0.443604 0.443237
Beyond - 海阔天空-64.mp3 compare with  女子十二乐坊 - 梁祝.mp3  bit error: 0.45752 0.4552
Beyond - 海阔天空-64.mp3 compare with  孙燕姿 - 比较幸福.mp3  bit error: 0.452759 0.459961
Beyond - 海阔天空-64.mp3 compare with  张学友 - 只想一生跟你走.mp3  bit error: 0.452637 0.434814
Beyond - 海阔天空-64.mp3 compare with  王宁-伤不起.mp3  bit error: 0.462769 0.454346
Beyond - 海阔天空-64.mp3 compare with  甄妮、罗文 - 铁血丹心.mp3  bit error: 0.450928 0.455322
Beyond - 海阔天空-64.mp3 compare with  贵妃醉酒.mp3  bit error: 0.459473 0.453735
Beyond - 海阔天空-64.mp3 compare with  邓紫棋 - 你把我灌醉.mp3  bit error: 0.442505 0.459351
Beyond - 海阔天空-64.mp3 compare with  阿悄 - 哭笑不得.mp3  bit error: 0.458374 0.463623
Beyond - 海阔天空-64.mp3 belong to :, Beyond - 海阔天空.mp3

这里记录下用到的库的一些API吧,可能以后有用

mpg123,mp3音频解码的库,

mpg123_param (mh, MPG123_FORCE_RATE, outputRate, 0.0);  //设置音频解码后输出pcm采样率

mpg123_param(mh, MPG123_ADD_FLAGS, MPG123_MONO_LEFT, 0.0); //设置解码后pcm声道;


fftw 小波变换库,


本文转载自-http://blog.csdn.net/kappen123/article/details/20121169

0 0
原创粉丝点击