【问题标题】:Time delay estimation between two audio signals两个音频信号之间的时间延迟估计
【发布时间】:2011-06-25 10:40:18
【问题描述】:

我有两个由 2 个不同麦克风(例如,WAV 格式)对同一信号的录音,但其中一个录音有延迟,例如几秒钟。

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


(来源:greycat.ru

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

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

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

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

【问题讨论】:

    标签: algorithm signal-processing delay timedelay


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      遇到同样的问题,但没有成功找到自动同步视频/音频录制开始的工具, 我决定制作syncstart (github)。

      它是一个命令行工具。其背后的基本代码是这样的:

      import numpy as np
      from scipy import fft
      from scipy.io import wavfile
      r1,s1 = wavfile.read(in1)
      r2,s2 = wavfile.read(in2)
      assert r1==r2, "syncstart normalizes using ffmpeg"
      fs = r1
      ls1 = len(s1)
      ls2 = len(s2)
      padsize = ls1+ls2+1
      padsize = 2**(int(np.log(padsize)/np.log(2))+1)
      s1pad = np.zeros(padsize)
      s1pad[:ls1] = s1
      s2pad = np.zeros(padsize)
      s2pad[:ls2] = s2
      corr = fft.ifft(fft.fft(s1pad)*np.conj(fft.fft(s2pad)))
      ca = np.absolute(corr)
      xmax = np.argmax(ca)
      if xmax > padsize // 2:
          file,offset = in2,(padsize-xmax)/fs
      else:
          file,offset = in1,xmax/fs
      

      【讨论】:

      • Roland 我目前正在测试您的代码,但那里有一个错误。在最后一个 if 语句中,您调用变量“in1 或 in2”,但它们没有在任何地方定义
      • 这将是文件名。请参阅github version
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2020-11-05
      • 2014-12-15
      相关资源
      最近更新 更多