我正在努力实现以下目标:
我是如何努力实现最后一点的:
我面临的问题如下:
来自skype和参考蜂鸣声的音频的FFT结果在数字意义上是不同的,即它们是相似的但不相同,尽管从具有Skype音频记录的音频文件中提取蜂鸣声。下图显示左侧Skype音频的哔声谱图和右侧的参考哔声谱图。如你所见,它们非常相似,但不一样......
uploaded a picture http://img27.imageshack.us/img27/6717/spectrogram.png
我不知道,怎么从这里继续。我应该对其进行平均,即将其划分为列和行,并按照here所述比较这些单元格的平均值?我不确定这是最好的方法,因为他已经声明,对于短音频样本它不能很好地工作,并且哔哔声的长度不到一秒......
有关如何进行的任何提示?
答案 0 :(得分:4)
您应该确定峰值频率和持续时间(可能是频率持续时间内的最小功率(RMS是最简单的衡量标准)
这应该很容易衡量。为了使事情变得更加聪明(但对于这个简单的匹配任务来说可能完全没有必要),你可以在哔哔声窗口期间断言其他峰值不存在。
要比较完整的音频片段,您需要使用Convolution algorithm。我建议使用现成的库实现,而不是自己动手。
最常见的快速卷积算法通过循环卷积定理使用快速傅里叶变换(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
答案 1 :(得分:1)
首先,我会在频率方向上平滑一点,以便频率的微小变化变得不那么相关。然后简单地取每个频率并减去两个幅度。平衡差异并加起来。也许首先将信号归一化,因此总振幅的差异无关紧要。然后将差异与阈值进行比较。