测量音频信号的时间延迟

信息处理 声音的 互相关 估计 延迟
2022-01-15 16:09:27

在任何人对我大喊大叫之前,我完全意识到这个问题已经被问过无数次了。我向您保证,我已经阅读了现有的问题和答案,但我仍然对部分问题感到困惑。

我有一个在封闭环境中播放音乐 (A) 的声源。我有一个用于录制 A 的麦克风。我剩下两个 wav 文件,它们具有相同的特征和长度(样本数)。

我的目标是计算 A 到达麦克风所需的时间。

我正在尝试使用互相关(numpy)执行计算:

# Delay estimation
corr = numpy.convolve(original_audio, recorded_audio, 'full')
delay = int(len(corr)/2) - numpy.argmax(corr)
distance = delay / sample_rate * 343 # sample_rate == 22050, m/s = speed of sound
print("Distance full: %.2f cm" % (distance * 100))

我始终获得 300,000 厘米范围内的值。扬声器和麦克风之间的距离约为 2 英尺。

这对我来说都是新事物,所以我确定我遗漏了一些明显的东西。

提前致谢。

1个回答

你确定你不应该使用numpy.correlate而不是numpy.convolve吗?要估计延迟,您需要对信号进行互相关,而不是对它们进行卷积。卷积可能会导致更大的延迟。

尝试一些简单的事情:

x = [1, 0, 0, 0, 0 ];
y = [0, 0, 0, 0, 1 ];
conv = numpy.convolve(x,y); 
conv
array([0, 0, 0, 0, 1, 0, 0, 0, 0])
corr = numpy.correlate(x,y,"full");
corr
array([1, 0, 0, 0, 0, 0, 0, 0, 0])