2011-02-11 156 views
13

我有两个不同麦克风(例如,WAV格式)的相同信号的两个音频录音,但其中一个录音有延迟,例如几秒钟。两个音频信号之间的时间延迟估计

很容易直观地识别某种波形查看器查看这些信号时,这样的延迟 - 即刚刚察觉在每一个信号第一个可见的峰值,并确保它们是相同的形状:

http://www.greycat.ru/temp/time-delay-peaks.png

但是,我该如何编程 - 找出这个延迟(t)是什么?两个数字化信号稍有不同(因为麦克风不同,位于不同位置,由于ADC设置等原因)。

我已经挖了一下,发现这个问题通常被称为“时间延迟估计”,它有无数的方法 - 例如,one of them

但是,是否有任何简单的现成解决方案,如命令行实用程序,库或直接提供的算法?

结论:我发现没有简单的实现,并且自己做了一个简单的命令行工具 - 可在https://bitbucket.org/GreyCat/calc-sound-delay(GPLv3许可)下使用。它实现了在Wikipedia中描述的非常简单的最大搜索算法。

回答

14

您正在寻找的技术叫做cross correlation。这是一种非常简单的计算密集型技术,可用于解决各种问题,包括测量两个相似信号(信号不需要相同)之间的时间差异(也称为lag)。

如果您对滞后值有一个合理的理解(或者至少是预期的滞后值范围),那么您可以大大减少计算总量。同上,如果你可以对你需要的准确度有一个确定的限制。

+0

是的,互相关,正好。如果可以推测出一个好的起点,那么可以减少提及计算的好处。 – Dan 2011-02-11 13:41:18

1

一个非常简单的事情就是检查峰值是否超过某个阈值,A线上的高峰与B线上的高峰之间的时间可能是您的延迟。试着稍微修改一下阈值,如果图表通常和你发布的图片一样清晰,那么你应该没问题。