在音频文件中查找音频样本(频谱图已存在)

我想要实现以下目标:

  • 使用Skype,拨打我的邮箱(工作)
  • 输入密码并告诉邮箱我要记录一条新的欢迎信息(有效)
  • 现在,我的邮箱告诉我在发出哔哔声后记录新的欢迎信息
  • 我想等待哔哔声然后播放新消息(不起作用)

我是如何努力实现最后一点的:

  • 使用FFT和滑动窗口(工作)创建频谱图
  • 为哔哔声创建“指纹”
  • 在来自Skype的音频中搜索该指纹

我面临的问题如下:
来自skype和参考蜂鸣声的音频的FFT结果在数字意义上是不同的,即它们相似但不相同,尽管从具有Skype音频记录的音频文件中提取蜂鸣声。 下图显示左侧Skype音频的蜂鸣声频谱图和右侧的参考蜂鸣声频谱图。 如你所见,它们非常相似,但不一样……
上传了一张图片http://img27.imageshack.us/img27/6717/spectrogram.png

我不知道,怎么从这里继续。 我应该对其进行平均,即将其划分为列和行,并比较这些单元格的平均值,如此处所述? 我不确定这是最好的方法,因为他已经声明,它对短音频样本效果不佳,并且哔哔声的长度不到一秒……

关于如何进行的任何提示?

您应该确定峰值频率和持续时间(可能是频率持续时间内的最小功率( RMS是最简单的测量)

这应该很容易衡量。 为了使事情变得更加聪明(但对于这个简单的匹配任务可能完全没有必要),您可以在哔哔声窗口期间断言其他峰值不存在。

更新

要比较完整的音频片段,您需要使用卷积算法 。 我建议使用现成的库实现而不是自己编译。

最常见的快速卷积算法通过循环卷积定理使用快速傅里叶变换(FFT)算法。 具体地,通过对每个序列进行FFT,逐点相乘,然后执行逆FFT,找到两个有限长度序列的循环卷积。 然后使用该技术结合零延伸和/或丢弃输出的部分来有效地实现上面定义的类型的卷积。 其他快速卷积算法,例如Schönhage-Strassen算法,在其他环中使用快速傅里叶变换。

维基百科将http://freeverb3.sourceforge.net列为开源候选人

编辑添加到API教程页面的链接: http : //freeverb3.sourceforge.net/tutorial_lib.shtml

其他资源:

http://en.wikipedia.org/wiki/Finite_impulse_response

http://dspguru.com/dsp/faqs/fir

在debian上使用相关工具的现有包:

[brutefir - a software convolution engine][3] jconvolver - Convolution reverb Engine for JACK libzita-convolver2 - C++ library implementing a real-time convolution matrix teem-apps - Tools to process and visualize scientific data and images - command line tools teem-doc - Tools to process and visualize scientific data and images - documentation libteem1 - Tools to process and visualize scientific data and images - runtime yorick-yeti - utility plugin for the Yorick language 

首先,我会在频率方向上对其进行平滑处理,以使频率的微小变化变得不那么相关。 然后简单地取每个频率并减去两个幅度。 平衡差异并加起来。 也许首先将信号归一化,因此总振幅的差异无关紧要。 然后将差异与阈值进行比较。