检测声音中的声音

信息处理 离散信号 信号分析 信号检测 局部特征
2022-02-02 21:39:44

我在互联网上绝望地搜索了一些关于在另一个声音中检测声音的材料。比如说,我有一个录制的短声音(可能是任何东西,语音片段,音乐片段,噪音,它们的组合或其他东西)和一个较长的样本,其中包含该声音的某个地方。问题是,声音可能与一些环境声音部分混合。不过我知道,尽管与其他声音混合,这正是我之前录制的样本。

我可以使用哪种算法来执行此类搜索?

2个回答

我不知道您是否熟悉统计信号处理,因此假设您不熟悉,我会写下我的答案。我在这里解释的所有内容都可以在任何有关统计的书中得到更好的介绍。我会推荐Kay 关于检测理论的书我首先通过重新表述您提出的两点来总结您的问题,首先是综合英语,然后是信号处理的角度。

您可以访问两个信号:

  1. 您正在寻找的信号。无论是音乐、演讲还是其他。关于这个信号的唯一重要假设是你完全知道它。我们将其命名为感兴趣的信号并表示s. 假设它包含在N样品表示s[n], 和0n<N.
  2. 包含感兴趣的信号以及许多其他来源的录音。此后记录将被命名为观察信号并表示x. 其他源都被认为是噪声,因为它们不包含感兴趣的信号,我们将表示噪声w. 观察比感兴趣的信号长。假设它包含在K样品表示x[k], 和KN0k<K. 同样适用w.

你说你知道你在找什么(s),但你不知道它“淹死”有多严重(w)在你正在观察的(x)。从这一点开始,我首先要尝试的是匹配滤波器 (MF) 方法我不能肯定它会解决你的问题,因为你没有给我们任何关于w. 我可以肯定地说,从理论和编程的角度来看,这是最简单的方法,而且很有可能奏效。如果这不起作用,那么您可以再次回到这里。有趣的部分将从那里开始:)

但是现在,让我们关注匹配的过滤器。s更短x,所以你应该能够采取M连续的快照x长度与s,每个表示xm. s以及那些M快照,您可以构建第三个信号y长度M,每个样本定义如下:

y[m]=n=0N1xm[n]s[n]

如果s真的在x,那么你可能会看到一个明显的最大值y, 在指数m包含的快照s. 如果不是,有两个可能的结论:

  1. s不在x. 但根据您对问题的介绍,情况并非如此。
  2. 无论是“水平”s与相比太低了w(我们谈论的是不良的信噪比),或统计特性w使这变得更加复杂。乐趣从后一种情况开始。

如果您的确切样本存在,您希望在信号和录制的短声音之间使用循环互相关:

https://en.wikipedia.org/wiki/Cross-correlation

因为它是相关性的度量,所以请考虑如果归一化互相关的绝对值在结果中超过 0.7,那么您的信号很可能位于该索引处。

如果数据集相对较小,则可以使用求和公式计算互相关,并且可以使用傅里叶变换和 fft 计算以提高更大数据集的速度:

https://en.wikipedia.org/wiki/Discrete_Fourier_transform#Circular_convolution_theorem_and_cross-correlation_theorem