8

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

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

4

3 回答 3

6

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

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

提取 MFCC 可以被认为是处理音频文件的第一步,即有利于识别声学内容的特征。我每 10 毫秒生成一次 MFCC,有 39 个属性。所以一个 5 秒长的声音文件有大约 500 个 MFCC,每个 MFCC 有 39 个属性。

然后我在这些线上写了一个人工神经网络代码 。可以从这里阅读更多关于神经网络的信息。

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

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

例如:您使用上述程序在 4 种类型的声音上训练您的神经网络,1. 口哨,2. 汽车喇叭,3. 狗吠和 4. 警笛。

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

30个实例被归类为哨子。20 个实例被分类为汽车喇叭/10 个实例被分类为狗吠,其余实例被正确分类为警报器。

分类的准确性,或者更确切地说,声音之间的共性可以近似计算为正确分类的实例数与实例总数的比率,在这种情况下为 440 / 500,即 88%。这个领域相对较新,在使用类似的机器学习算法(如隐马尔可夫模型支持向量机等)之前已经做了很多工作。

这个问题之前已经解决了,你可以在 google 学者中找到一些关于这些的研究论文。

于 2016-06-09T21:10:48.177 回答
1

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

如何接近?

  1. 过滤声音

    可识别的语音最小值达到0.4-3.4 KHz(这就是为什么在旧电话过滤器中使用这些)。人声通常是最高的,12.7 KHz所以如果你确定你有未经过滤的录音,然后过滤并从电源线上12.7 KHz取出50Hz60Hz

  2. 制作数据集

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

  3. 比较数据集

    数字比较是通过相关系数完成的,这非常简单(也是我最喜欢的),您也可以为此使用神经网络(甚至是第 2 条),也可能有一些 FUZZY 方法。我建议使用相关性,因为它的输出与您想要的相似并且它是确定性的,因此不存在过度/不足学习或无效架构等问题......

[编辑1]

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

于 2015-01-12T09:01:34.907 回答
0

这绝对不是一个小问题。

如果您正在认真尝试解决它,我建议您仔细查看语音编码器的工作原理。

所涉及的步骤的粗略分解:

  1. 识别录音中包含元音的间隔
  2. 确定元音的基频和谐波
  3. 确定谐波的相对幅度和基波的平均频率
  4. 开发一个“距离”度量标准,根据步骤 3 中的参数测量两个元音之间的距离
  5. 计算新录音的元音与数据库录音的元音之间的距离。

第 3 步的参数是一种声道的“指纹”。通常,辅音声音并没有足够的不同而没有实质性的用途(除非两个人的元音非常相似)。

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

祝你好运,

延斯

于 2015-01-14T19:07:29.497 回答