我的一个周末项目将我带入了信号处理的深渊。与我所有需要一些繁重数学的代码项目一样,尽管缺乏理论基础,我仍然很乐意修补解决方案,但在这种情况下,我没有,并且希望对我的问题提出一些建议,即:我试图弄清楚电视节目中现场观众的笑声。
我花了很多时间阅读用于检测笑声的机器学习方法,但意识到这更多地与检测个人笑声有关。200 个人同时笑会有很大不同的声学特性,我的直觉是,他们应该通过比神经网络更粗糙的技术来区分。不过,我可能完全错了!将不胜感激对此事的想法。
以下是我迄今为止所尝试的:我将最近一集的周六夜现场的五分钟摘录切成两秒钟的片段。然后我将这些标记为“笑”或“不笑”。使用 Librosa 的 MFCC 特征提取器,然后我对数据运行 K-Means 聚类,并得到了很好的结果——这两个聚类非常整齐地映射到我的标签。但是当我试图遍历更长的文件时,预测并没有成立。
我现在要尝试的是:我将更精确地创建这些笑声剪辑。我将手动提取它们,而不是进行盲目拆分和排序,以免对话污染信号。然后我会将它们分成四分之一秒的片段,计算这些片段的 MFCC,并使用它们来训练 SVM。
我此时的问题:
这有什么意义吗?
统计数据在这里有帮助吗?我一直在 Audacity 的频谱图视图模式下滚动,我可以很清楚地看到笑声发生在哪里。在对数功率谱图中,语音具有非常独特的“皱褶”外观。相比之下,笑声非常均匀地覆盖了广泛的频率范围,几乎就像一个正态分布。甚至可以通过掌声中代表的一组更有限的频率在视觉上区分掌声和笑声。这让我想到了标准偏差。我看到有一种叫做 Kolmogorov-Smirnov 检验的东西,这对这里有帮助吗? (你可以看到上图中的笑声是橙色的墙击中了 45% 的路。)
线性频谱图似乎表明笑声在较低频率时更有活力,而在较高频率时逐渐减弱——这是否意味着它符合粉红噪声的条件?如果是这样,这可能是解决问题的一个立足点吗?
如果我误用了任何行话,我深表歉意,我已经在维基百科上看到了很多,如果我有一些混乱也不会感到惊讶。