Birdsong 音频分析 - 找出两个剪辑的匹配程度

Posted

技术标签:

【中文标题】Birdsong 音频分析 - 找出两个剪辑的匹配程度【英文标题】:Birdsong audio analysis - finding how well two clips match 【发布时间】:2011-05-29 00:57:11 【问题描述】:

我有大约 100 个 wav 音频文件,采样率为 48000 个相同物种的鸟类,我想测量它们之间的相似性。我从波形文件开始,但我(非常了解)更多关于使用图像的知识,所以我假设我的分析将在频谱图图像上进行。我有几个不同日子的鸟类样本。

以下是一些数据示例,以及(对于未标记的轴表示歉意;x 是样本,y 是线性频率乘以 10,000 Hz): 这些鸟鸣显然出现在“词”中,不同的歌曲片段可能是我应该比较的水平;相似词之间的差异以及各种词的频率和顺序。

我想尝试去除蝉噪声 - 蝉的啁啾频率相当一致,并且倾向于相位匹配,所以这应该不会太难。

似乎一些阈值可能有用。

我听说大多数现有文献都使用基于歌曲特征的手动分类,例如 Pandora Music Genome Project。我想成为Echo Nest;使用自动分类。更新:很多人都在研究这个。

我的问题是我应该使用哪些工具进行此分析?我需要:

过滤/限制一般噪音并保留音乐 过滤掉特定的噪音,比如蝉声 对鸟鸣中的短语、音节和/或音符进行拆分和分类 创建零件之间差异/相似性的度量;可以识别鸟类之间的差异,最大限度地减少同一只鸟的不同叫声之间的差异

我选择的武器是 numpy/scipy,但是像 openCV 这样的东西在这里可能有用吗?

编辑:经过一些研究和史蒂夫的有用回答,更新了我的术语并重新措辞。

【问题讨论】:

真的很有趣 :) 我现在没有时间给出完整的答案,但我会看看 cross correlation -- 只是频域 iirc 中的乘法.如果您知道您的频率位于某个范围内,那么简单的噪声过滤机制包括高通和低通滤波器。另请查看反卷积,并查看地震处理时间序列技术以获得一些切向灵感。有点沮丧,会尝试尽快返回:) @Tim 谢谢,我会开始阅读清单! 我知道(不久前)已经使用“动态编程”技术和“隐马尔可夫模型”来分析鸟儿的歌声并计算它们之间的距离。 如果您有大量的标记数据,您可以查看deeplearning.net/tutorial。当我开始学习一些关于机器学习和分类的知识时,我发现它非常有帮助,而且很多示例代码无需太多修改即可用于您自己的目的。 【参考方案1】:

不得不回答这个问题,因为评论太长了。

我现在基本上在这个领域工作,所以我觉得我有一些知识。显然,从我的角度来看,我建议使用音频而不是图像。我还建议使用 MFCC 作为您的特征提取(您可以将其视为总结/表征音频的特定子带的系数 [因为它们是])。

GMM 是首选。

要执行此任务,您必须拥有一些(最好是大量)标记/已知数据,否则机器学习将无法进行。

您可能会发现有用的技术:

'然后,在测试期间,您提交一个 向 GMM 查询 MFCC 向量,它 会告诉你它认为是哪个物种 是的。'

更准确地说,您向每个 GMM 提交查询(如果您正确使用它们,每个 GMM 都会为您提供该概率分布发出的特定特征向量的似然分数 [概率])。然后,您比较您从所有 GMM 收到的所有可能性分数,并根据您收到的最高分数进行分类。

UBM

您可以使用 UBM(通用背景模型)简单地对所有背景噪声/通道失真进行建模,而不是“滤除”噪声。该模型由一个 GMM 组成,该 GMM 使用您可用的所有训练数据(即您用于每个类的所有训练数据)进行训练。您可以使用它来获得“似然比”(Pr[x 将由特定模型发出] / Pr[x 将由背景模型 (UBM) 发出] ) 以帮助消除背景模型本身可以解释的任何偏差。

【讨论】:

只需要评论一下:HMM不是被很好地描述为“多状态 GMM”。 HMM 反映了数据中的短期时间关系,而 GMM 没有内置时间概念。HMM 不必使用高斯混合,但 GMM 可以。 HMM 在隐藏状态和观察之间有分离,而 GMM 没有。如果有用,这里有一个免费的 Python MFCC+GMM 实现,它反映了这里讨论的基本模型:github.com/danstowell/smacpy @DanS 我完全同意你的看法。本题给出的GMM和HMM的概念是不正确的。【参考方案2】:

有趣的问题,但相当广泛。我确实建议查看一些关于自动鸟鸣识别的现有文献。 (是的,有很多人在研究它。)

这篇论文(编辑:抱歉,死链接,但this chapter by Dufour et al. 2014 可能更清楚)使用我建议首先尝试的基本两阶段模式识别方法:特征提取(论文使用 MFCC),然后是分类(论文使用 GMM)。对于输入信号中的每一帧,您都会得到一个 MFCC 向量(介于 10 到 30 之间)。这些 MFCC 向量用于训练 GMM(或 SVM)以及相应的鸟类标签。然后,在测试期间,您向 GMM 提交查询 MFCC 向量,它会告诉您它认为是哪个物种。

尽管有些人已将图像处理技术应用于音频分类/指纹问题(例如,this paper by Google Research),但我不愿推荐这些技术来解决您的问题或类似的问题,因为时间变化 .

“我应该使用什么工具来进行这种分析?”其中包括:

    特征提取:MFCC、起始检测 分类:GMM、SVM 谷歌

抱歉,答案不完整,但这是一个宽泛的问题,而且这个问题的内容比这里简单回答的要多。

【讨论】:

“这篇论文”是一个死链接,你能分享更多信息吗? 对不起,我希望我知道它是什么。但我用一个可能比原来更好的链接替换了它。【参考方案3】:

您显然已经在执行 STFT 或类似的操作来构建这些图像,因此我建议构建这些混合时间/频率结构的有用摘要。我记得一个为稍微不同的目的而构建的系统,它能够很好地利用音频波形数据,方法是按时间和幅度将其分成少量(

【讨论】:

【参考方案4】:

根据您想要定义应用程序的方式,您可能需要有监督或无监督的方法。在第一种情况下,您将需要一些注释过程,以便为训练阶段提供一组从样本(音频文件)到类(鸟类 ID 或任何您的类)的映射。在无监督方法的情况下,您需要对数据进行聚类,以便将相似的声音映射到同一个聚类。

你可以试试我的库:pyAudioAnalysis,它为声音分类和声音聚类提供了高级包装。

【讨论】:

以上是关于Birdsong 音频分析 - 找出两个剪辑的匹配程度的主要内容,如果未能解决你的问题,请参考以下文章

在moviepy中组合音频剪辑时的音频帧重复

音频混音是啥

影视后期常见问题分析。

用 C# 中的新音频覆盖 mp4/wmv 视频的音频内容

如何使 UIButton 从 UITable 中的选择中播放相应的音频剪辑?

如何在moviepy中的图像剪辑上设置音频剪辑?