我从互联网记录每天2分钟的无线电广播。始终有相同的开始和结束叮当声。由于无线电广播的确切时间可能会有所不同,从大约6分钟,我必须记录大约15分钟的广播。比较两个谱图以找到它们匹配的偏移量算法
我想确定那些铃声在15分钟记录中的确切时间,所以我可以提取我想要的音频部分。
我已经开始了一个C#应用程序,我解码的MP3为PCM数据和PCM数据转换成基于http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx
频谱我试图对PCM数据使用的互相关算法,但该算法是非常步行10分钟左右慢6分钟左右,有时无法找到铃声的开始时间。
算法的任何想法来比较两个匹配的谱图?或者更好的方式来找到铃儿的开始时间?
感谢,
更新,抱歉耽搁
首先,感谢所有anwsers其中大多数是培训相关和或interresting想法。
我试图实现fonzo提出的Shazam算法。但未能检测到谱图中的峰。这是来自三个不同记录的起始叮铃声的三个光谱图。我尝试使用blob过滤器AForge.NET(但它未能识别峰值),模糊图像并检查高度差异,拉普拉斯卷积,斜率分析以检测一系列垂直条(但错误太多正面)...
在这个意思中,我尝试了Dave Aaron Smith提出的Hough算法。我在哪里计算每列的RMS。是是是每列,它是一个O(N * M),但是M(注意一列是大约8k的样本)。所以总的来说这并不是那么糟糕,算法仍然需要大约3分钟,但从未失败。
我可以用这个解决方案,但如果可能的话,我更喜欢Shazam,因为它是O(N)并且可能更快(也更酷)。所以你们有没有想法算法总是检测这些谱图中的相同点(不一定是峰值),这要归功于添加评论。
新更新
最后,我的算法上面解释去了,我试图实现Shazam的算法,但未能找到合适的谱图中的峰值,从一个声音文件到另一个声音文件不是恒定的已识别点。理论上,Shazam算法是解决这类问题的方法。 Dave Aaron Smith提出的Hough算法更加稳定和有效。我分割了大约400个文件,只有20个文件无法正确分割。磁盘空间从8GB到1GB。
谢谢你的帮助。
嗨,谢谢你的回应,今天我学到了一些东西。但我真的不知道用什么指标来表示一部分信号。谱图是一个数组,我可以针对不同频率(如100)运行此算法,并对每个部分的投票进行总结。但是我想知道这个表现。 – 2011-04-13 18:23:54
是的,霍夫变换用于计算机视觉,我不太了解音频信号处理。对于度量标准,这是一个聪明的想法来衡量特定的频率。 – 2011-04-15 13:18:39