长录音中的标记识别

信息处理 离散信号 声音的
2022-02-23 21:10:22

在进行测试时,我将做很多录音。问题是我想从我的录音中轻松提取一些部分。有没有办法播放一些特殊的声音序列,例如几声哔哔声,然后在整个录音中搜索这些标记?

最后,我想获得带有标签段的文件,类似于 Audacity 正在做的事情。到现在为止,我一直在用拍手并在长时间记录的信号中寻找能量峰值。因为我正在用起动手枪测量房间,所以这不是一个好主意。稍后这将使我能够非常快速和轻松地分析以搜索相似的声音组。例如:

开始时间、结束时间、地点

100, 399, 位置 1

500、600、位置 2

我尝试用某种模式计算相关性,但是当房间混响时,它的表现不是很好。我从阈值相关中得到了一些错误的标记。这是因为标记被涂抹而不准确。

该任务的最佳方法和信号类型是什么?任何好的和快速的技术,比如匹配过滤?

附录:

简单地说我想要的:

  • 随机播放标记声音/模式

    • 记录这个信号和其他信号
  • 在很长的录音中搜索这些录音模式

  • 能够说出这些模式在哪个时间点是例如互相关(不能很好地工作)可能会产生我可以搜索的尖峰

  • 它应该能够防止噪音、音调/脉冲声音、混响和低播放电平

  • 它不应该很慢。例如在 10 分钟文件 40 秒是我的上限

2个回答

您可以使用很容易通过谐振器组解码的 DTMF 音调。http://en.m.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling的简要说明

如果你在一个混响的房间里,那么像手机这样的东西就不会在里面投入太多的能量,因此录音不会受到混响的太大影响。此外,DTMF 的音调相对较高,会从背景中脱颖而出。

典型的键盘中有 16 种组合,但您可以更改符号(例如 1213),可能在录音中,以构建更复杂的短语或标记。比房间的时间常数更快地改变符号将减少混响的影响。

如果您使用启动枪从房间获取脉冲响应,您可以在录音的开始和结束后播放一个序列,以大致识别特定的响应,但我不建议依赖标记进行绝对同步. 您可以在枪附近添加一个麦克风以获得脉冲开始和结束,并使用房间麦克风来估计房间的动态(攻击、衰减等)

希望这可以帮助

更新了这个答案的一部分:

总体思路保持不变,通过播放声音标记时间点并稍后检测它的存在。现在的问题是,哪些声音以及如何检测它们。这是使用 DTMF 代码的示例。

1) 获取一个 DTMF 生成器(例如,一个 DTMF android 应用程序,例如,https://play.google.com/store/apps/details?id=hu.soska.dtmf&hl=en

2) 在“干净”(无混响)的房间中,录制一系列声音,例如“1928”。这就是“标签”。请确保输入每个数字至少 1 秒钟。

3)在被测量的房间里,开始你的记录。当您想标记一个点时,可以将“1928”的声音与主录音一起复制和录制。

4) 在 DTMF 频率上构建一个由 8 个滤波器组成的滤波器组。谐振器是简单的滤波器,这里有一些示例代码来获取你的系数: http: //lifeorange.com/MATLAB/MATLAB_FD.htm

5)打开文件,通过过滤器运行记录。它们的输出将根据信号中音调的功率而变化。在 DTMF 音的再现过程中,滤波器的输出将增加。应用一个非常简单的规则:要保持“正确匹配”,您必须看到成对的过滤器(代表数字)变得“高”并保持高至少 1 秒。在过滤器的输出中查找此规则。你现在有了比赛。

为什么选择单音和谐振器?因为它们非常容易和快速地解码。

备择方案?

在第 4 步记录一个伪随机发生器信号,并在第 5 步使用互相关。虽然互相关会慢得多,因为它必须以“滑动窗口”方式重复运行(请参阅http://en.wikipedia.org/ wiki/Overlap%E2%80%93add_method)。

步骤 5 的替代方案可能是 multimon(请参阅http://manpages.ubuntu.com/manpages/gutsy/man1/multimon.1.html),但这不会给您偏移量。

尽管这些都是近似解决方案,但它们不会为您提供“事件”发生的准确时间点,而只是粗略的近似值(这也取决于录音的长度)。

希望这可以帮助。

工程师发现了许多具有尖峰自相关函数的信号,并将它们用于一种称为“脉冲压缩”的技术。啁啾信号就是其中之一,它很容易产生。您可以使其足够长,以便通过相关性可靠地检测到(如果足够长,则不必很大)。

当然,混响会增加一些拖影。您可以通过在记录的开头生成一个“引导”标记,然后将其与其余部分相关联,对混响信号进行匹配过滤。