比较两个录制的声音

时间:2015-01-11 20:19:12

标签: algorithm audio audio-fingerprinting

我需要找一些关于如何将实时录制的声音(来自麦克风)与预先录制的声音数据库进行比较的文献。在比较之后,我需要输出它的匹配百分比。

我正在研究音频指纹识别,但我对这种实现的任何文献都无法得出任何结论。这里的任何专家都可以轻松指导我实现这个目标吗?

3 个答案:

答案 0 :(得分:5)

之前我做过类似的工作,所以我可能是向你介绍这个程序的合适人选。

我有纯粹的声音录音,我认为是金标准。我编写了python脚本来将这些声音转换为MFCC向量数组。阅读有关MFCC here的更多信息。

提取MFCC可以被视为处理音频文件的第一步,即有助于识别声学内容的功能。我每隔10ms产生一次MFCC,并有39个属性。因此,一个长达5秒的声音文件有大约500个MFCC,每个MFCC有39个属性。

然后我在这些lines上写了一个人工神经网络代码 。有关神经网络的更多信息,请参阅here

然后,我使用使用反向传播算法训练的随机梯度下降算法训练神经网络的权重和偏差,通常称为网络参数。然后保存训练的模型以识别未知声音。

然后将新声音表示为MFCC向量序列并作为神经网络的输入给出。神经网络能够针对从新声音文件获得的每个MFCC实例预测神经网络被训练的声音类别之一。正确分类的MFCC实例的数量给出了神经网络能够对未知声音进行分类的准确性。

考虑一下:你使用上述程序训练你的神经网络有4种类型的声音,1。口哨,2。汽车喇叭,3。狗皮和4.警报器。

新声音是一个5秒长的警笛声。您将获得大约500个MFCC实例。训练好的神经网络将尝试将每个MFCC实例分类到神经网络训练的类之一。所以你可能会得到这样的东西。

30个实例被归类为哨子。 20个实例被归类为汽车喇叭/ 10个实例被归类为狗皮 其余的实例被正确归类为警笛。

分类的准确性或者说声音之间的共性可以近似地计算为正确分类的实例的数量与在这种情况下为440/500的实例总数的比率,即88%。此字段相对较新,在使用类似的机器学习算法(如Hidden Markov ModelSupport Vector Machine等)之前已做了大量工作。

这个问题之前已经解决了,你可能会在谷歌学者那里找到一些关于这些问题的研究论文。

答案 1 :(得分:1)

此领域没有专家(因此请相应处理),但您应该看看:

如何接近?

  1. 过滤声音

    可识别的语音最低值达0.4-3.4 KHz(这就是旧手机过滤器中使用的原因)。人声通常最高为12.7 KHz,因此,如果您确定自己有未经过滤的录音,请过滤至12.7 KHz并从电源线中取出50Hz60Hz

  2. 制作数据集

    如果您要录制相同的句子进行比较,那么您可以通过相同音调/字母的DFFT或DFCT计算频谱(例如,开始,中间,结束)。过滤掉未使用的区域,从数据中制作声纹数据集。如果没有,则需要首先在录音中找到类似的音调/字母,因为您需要语音识别才能确定或找到具有相似属性的录音部分。你需要学习什么(通过试验,或通过研究语音识别论文)这里有一些提示:节奏,动态音量范围,频率范围。

  3. 比较数据集

    数值比较是通过相关系数来完成的,这是非常简单的(我最喜欢的)你也可以使用神经网络(甚至子弹2)也可能有一些FUZZY方法。我建议使用相关性,因为它的输出类似于你想要的,它是确定性的,所以学习过度/不足或架构无效等都没有问题......

  4. [edit1]

    人们也在使用Furmant过滤器来生成人声和语音。它们的属性模仿人类的发声路径,它们背后的数学也可以用于语音识别,通过检查滤波器的主要频率,你可以检测到声音,语调,节奏......这可能直接用于语音检测。然而,这超出了我的专业领域,但有很多关于这方面的论文,所以只是google ...

答案 2 :(得分:0)

这绝对不是一个小问题。

如果你真的想要解决它,我建议你仔细看看语音编码器是如何工作的。

粗略分解所涉及的步骤:

  1. 识别录音中包含元音的时间间隔
  2. 确定元音的基频和谐波
  3. 确定谐波的相对幅度和基波的平均频率
  4. 开发距离"度量,根据步骤3中的参数测量两个元音相互接近的程度
  5. 计算从新录音的元音声音到数据库录音的距离。
  6. 步骤3中的参数是一种"指纹"声道通常情况下,辅音听起来并没有足够的差异而且没有实际用途(除非来自两个人的元音非常相似)。

    作为第一个也是非常简单的步骤,尝试确定元音的平均基数并将该频率用作签名。

    祝你好运,