计算电话在接听前响铃的次数

信息处理 过滤器 声音的 频谱图
2022-02-02 20:16:18

我有一个电话录音数据集,我想对其进行一些特征级别的分析。音频以 44khz 立体声采样,每个通道包含来自对话一方的信号。

我想首先计算电话被拿起之前呼叫响铃的次数。我相信这很简单,但有点迷失,所以任何正确方向的指针都将不胜感激。我相信我需要某种匹配滤波器,或者可能是带宽滤波器。信号通常很干净——我附上了几张信号图。

通用解决方案表示赞赏,但我将在 python 中执行此操作,因此任何特定于此的内容将不胜感激。

此外,如果您对使用信号特征提取特征有其他想法,我全是耳朵(眼睛)。

信号图

同一个呼叫的频谱图

2个回答

如果你能识别出一个电话铃声,那么你就可以提取它并用它来构造一个匹配的过滤器wiki 文章的开头是大量数学,但请查看示例部分。此外,Matlab 有一个页面描述了他们工具箱中的匹配滤波器。你真的应该试一试;它就像魔术一样工作。

在时域中,匹配滤波器是信号与已知模式的互相关(在这种情况下是振铃的记录)。作为互相关,它可以使用 DFT 有效地实现。匹配滤波器的输出是一个时间序列。

时间序列输出将具有一系列峰值,其位置对应于每个环的开始。您需要做的就是计算超过某个阈值的峰值数量。

如果环可能不同,但您可以保证它们是从一组有限的环中选择的(想象不同的电话运营商或其他东西),那么您可以使用一组匹配的过滤器。

有很多适用的解决方案。在我看来最简单的是“模板匹配”。对于此解决方案,您只需要:

  1. 手动创建一个模板/多个模板。这需要你分段一些振铃信号。如果你有多个,你可以取这些信号的平均值。无论如何,让我们说这个模板信号是T=[T0,T1,,TK]
  2. 对于给定的测试信号,您可以计算,这是此信号与您的模板之间的卷积,并且的反转版本。S=[S0,S1,,SN]R=STT=[TK,,T1,T0]T
  3. 选择一个合理的阈值来判断一段单曲确实是“振铃”,最后应用非极大值抑制。

请注意,这只是对互相关进行模板匹配的一种方法(请参阅https://en.wikipedia.org/wiki/Cross-correlation)。您绝对可以使用其他标准,例如标准化互相关(参见http://docs.opencv.org/modules/imgproc/doc/object_detection.html?highlight=matchtemplate#matchtemplate)。

一个更复杂的解决方案可能是一个“环”分类器,它假设您有许多“环”样本,并且它们都具有相同的长度。一旦你有了这些训练样本,你就可以训练一个分类器(任何类型,从简单的逻辑回归到更复杂的深度神经网络分类器)。但是,此解决方案可能需要大量标记数据。

最后,更好的解决方案可能是“隐藏马尔可夫模型”和“递归深度神经网络”,它们太复杂,无法分几行讨论。我说这是一个更好的解决方案,因为这些是可以处理语音识别中更复杂的场景的通用模型:在语音识别的上下文中,“环”只不过是一个“机器词”,与“机器词”没有根本区别。英文单词'。