计算电话在接听前响铃的次数
如果你能识别出一个电话铃声,那么你就可以提取它并用它来构造一个匹配的过滤器。wiki 文章的开头是大量数学,但请查看示例部分。此外,Matlab 有一个页面描述了他们工具箱中的匹配滤波器。你真的应该试一试;它就像魔术一样工作。
在时域中,匹配滤波器是信号与已知模式的互相关(在这种情况下是振铃的记录)。作为互相关,它可以使用 DFT 有效地实现。匹配滤波器的输出是一个时间序列。
时间序列输出将具有一系列峰值,其位置对应于每个环的开始。您需要做的就是计算超过某个阈值的峰值数量。
如果环可能不同,但您可以保证它们是从一组有限的环中选择的(想象不同的电话运营商或其他东西),那么您可以使用一组匹配的过滤器。
有很多适用的解决方案。在我看来最简单的是“模板匹配”。对于此解决方案,您只需要:
- 手动创建一个模板/多个模板。这需要你分段一些振铃信号。如果你有多个,你可以取这些信号的平均值。无论如何,让我们说这个模板信号是。
- 对于给定的测试信号,您可以计算,这是此信号与您的模板之间的卷积,并且是的反转版本。
- 选择一个合理的阈值来判断一段单曲确实是“振铃”,最后应用非极大值抑制。
请注意,这只是对互相关进行模板匹配的一种方法(请参阅https://en.wikipedia.org/wiki/Cross-correlation)。您绝对可以使用其他标准,例如标准化互相关(参见http://docs.opencv.org/modules/imgproc/doc/object_detection.html?highlight=matchtemplate#matchtemplate)。
一个更复杂的解决方案可能是一个“环”分类器,它假设您有许多“环”样本,并且它们都具有相同的长度。一旦你有了这些训练样本,你就可以训练一个分类器(任何类型,从简单的逻辑回归到更复杂的深度神经网络分类器)。但是,此解决方案可能需要大量标记数据。
最后,更好的解决方案可能是“隐藏马尔可夫模型”和“递归深度神经网络”,它们太复杂,无法分几行讨论。我说这是一个更好的解决方案,因为这些是可以处理语音识别中更复杂的场景的通用模型:在语音识别的上下文中,“环”只不过是一个“机器词”,与“机器词”没有根本区别。英文单词'。

