笑声什么时候开始?

信息处理 声音的 声音识别
2022-01-11 06:10:00

我的一个周末项目将我带入了信号处理的深渊。与我所有需要一些繁重数学的代码项目一样,尽管缺乏理论基础,我仍然很乐意修补解决方案,但在这种情况下,我没有,并且希望对我的问题提出一些建议,即:我试图弄清楚电视节目中现场观众的笑声。

我花了很多时间阅读用于检测笑声的机器学习方法,但意识到这更多地与检测个人笑声有关。200 个人同时笑会有很大不同的声学特性,我的直觉是,他们应该通过比神经网络更粗糙的技术来区分。不过,我可能完全错了!将不胜感激对此事的想法。

以下是我迄今为止所尝试的:我将最近一集的周六夜现场的五分钟摘录切成两秒钟的片段。然后我将这些标记为“笑”或“不笑”。使用 Librosa 的 MFCC 特征提取器,然后我对数据运行 K-Means 聚类,并得到了很好的结果——这两个聚类非常整齐地映射到我的标签。但是当我试图遍历更长的文件时,预测并没有成立。

我现在要尝试的是:我将更精确地创建这些笑声剪辑。我将手动提取它们,而不是进行盲目拆分和排序,以免对话污染信号。然后我会将它们分成四分之一秒的片段,计算这些片段的 MFCC,并使用它们来训练 SVM。

我此时的问题:

  1. 这有什么意义吗?

  2. 统计数据在这里有帮助吗?我一直在 Audacity 的频谱图视图模式下滚动,我可以很清楚地看到笑声发生在哪里。在对数功率谱图中,语音具有非常独特的“皱褶”外观。相比之下,笑声非常均匀地覆盖了广泛的频率范围,几乎就像一个正态分布。甚至可以通过掌声中代表的一组更有限的频率在视觉上区分掌声和笑声。这让我想到了标准偏差。我看到有一种叫做 Kolmogorov-Smirnov 检验的东西,这对这里有帮助吗? 对数功率谱图 (你可以看到上图中的笑声是橙色的墙击中了 45% 的路。)

  3. 线性频谱图似乎表明笑声在较低频率时更有活力,而在较高频率时逐渐减弱——这是否意味着它符合粉红噪声的条件?如果是这样,这可能是解决问题的一个立足点吗? 频谱图

如果我误用了任何行话,我深表歉意,我已经在维基百科上看到了很多,如果我有一些混乱也不会感到惊讶。

2个回答

根据您的观察,信号的频谱是足够可区分的,您可以将其用作将笑声与语音进行分类的特征。

有很多方法可以查看问题。

方法#1

在这种情况下,您可以只查看 MFCC 的向量并将其应用于任何分类器。由于您在频域中有许多系数,因此您可能希望在此基础上使用诸如Adaboost之类的增强算法来查看级联分类器结构,您可以在语音类与笑类之间进行比较。

方法#2

你意识到你的讲话本质上是一个随时间变化的信号。因此,有效的方法之一是查看信号本身的时间变化。为此,您可以将信号分成几批样本,并查看当时的频谱。现在,您可能会意识到,在规定的持续时间内,笑声可能具有更多的重复模式,因为语音固有地拥有更多信息,因此频谱变化会更大。您可以将其应用于HMM类型的模型,以查看对于某些频谱您是否始终保持在相同状态,或者您是否不断变化。在这里,即使偶尔讲话的频谱类似于笑声,它也会随着时间的推移而发生变化。

方法#3

强制对信号应用 LPC/CELP 类型的编码并观察残留物。CELP Coding制作了一个非常准确的语音生成模型。

从这里的参考资料:CELP 编码理论

在语音信号的短期预测和长期预测之后,语音信号中的冗余几乎被去除,残差中几乎没有留下相关性。然后搜索合成语音的激励,并从固定码本中搜索码本索引和增益。最佳码本索引选择标准是基于本地合成语音和原始语音信号之间的MMSE。

简而言之,在从分析仪预测的所有语音被删除之后 - 剩下的是被传输以重建精确波形的残留物。

这对您的问题有什么帮助?基本上,如果你应用 CELP 编码,信号中的语音大部分都被去除了,剩下的是残留物。在笑声的情况下,可能会保留大部分信号,因为 CELP 无法通过声道建模预测这样的信号,因为单个语音将具有非常少的残留。您还可以在频域中分析这个残留物,看看它是笑声还是语音。

大多数语音识别器不仅使用 MFCC 系数,还使用 ​​MFCC 级别的一阶和二阶导数。我猜在这种情况下,起始点会非常有用,可以帮助您区分笑声和其他声音。