如何使用MFCC系数向量训练机器学习算法?

7

我正在进行我的毕业设计,尝试实时识别狗/鸟叫声(通过录制音频片段)。 我正在使用MFCC作为音频特征。 最初,我使用jAudio库从音频片段中提取了12个MFCC向量。

现在,我正在尝试训练一个机器学习算法(目前我还没有决定算法,但最有可能是SVM)。 音频片段大小大约为3秒。 我需要澄清一些关于这个过程的信息。 它们是:

  1. 我是否必须使用基于帧的MFCC(每帧12个)或整个剪辑基于MFCC(每个音频片段12个)来训练此算法?

  2. 为了训练算法,我是否必须将所有12个MFCC视为12个不同的属性,还是必须将这些12个MFCC视为一个属性?

这些MFCC是剪辑的总体MFCC,如下所示:

-9.598802712290967 -21.644963856237265 -7.405551798816725 -11.638107212413201 -19.441831623156144 -2.780967392843105 -0.5792847321137902 -13.14237288849559 -4.920408873192934 -2.7111507999281925 -7.336670942457227 2.4687330348335212

希望能提供任何帮助以解决这些问题。 我在Google上找不到好的帮助。 :)


请问您能否分享您的代码,如果可能的话。我正在做类似的事情。 - kRazzy R
1个回答

5
  1. 您应该每帧计算 MFCCs。由于信号随时间变化,整个剪辑上的计算没有意义。更糟糕的是,您可能会得到类似的狗和鸟的表示。我建议您尝试几种不同长度的帧。一般来说,它们将按毫秒的顺序排列。

  2. 所有的特征都应该是单独的。让机器学习算法决定哪些是最好的预测因子。

请注意,MFCC对噪声敏感,因此请先检查样本的声音。例如,提取更丰富的音频特征选择可以使用 Yaafe库,其中许多特征在您的情况下更加有效。具体是哪些?下面是我在分类鸟鸣声时发现最有用的:

  • 光谱平坦度
  • 感知扩展
  • 光谱截止
  • 光谱下降
  • 光谱形状统计
  • 光谱斜率
  • 线性预测编码 (LPC)
  • 线谱对 (LSP)

也许您可能会对查看 这个项目,特别是我与Yaafe交互的部分感兴趣。

早些时候我使用 SVMs,就像您计划的一样。今天我肯定会使用梯度提升。


这真的很有帮助,那对于这种情况建议的窗口大小是多少呢?通常我会考虑使用3秒的窗口,因为有些鸟类的声音比较长。另外,关于训练,您能否解释一下如何创建矩阵?所以我要创建12个不同的属性,因为它们都是独立的特征对吧? - nayakPan
把窗口大小看作是保存信息的最短间隔,一个声音的量子。在3秒内,你可以说出整个句子。如我所解释的那样:毫秒级别的顺序,例如16ms。这些窗口应该重叠,至少50%或更多。关于如何“创建矩阵”的示例,请参考我分享的代码片段。 - Lukasz Tracewski
保存信息意味着我需要完整的声音还是只需要识别所需声音的一小部分?比如说,一个特定鸟类的独特声音长度为2秒。如果我使用1秒的窗口大小,那么就没有任何机会得到那只鸟的实际声音了,是吗?:( - nayakPan
我建议先阅读一些关于DSP的介绍。简而言之,你的窗口大小应该至少比声音周期长几倍(例如5)- 音调越低,窗口就应该越长。然而,窗口越长,分辨率就越低。 - Lukasz Tracewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接