测量音频信号的时间延迟


9

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

我有一个在封闭环境中播放音乐(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英尺。

这对我来说都是很新的,所以我确定我缺少明显的东西。

提前致谢。


3
您确定不应该使用numpy.correlate代替numpy.convolve吗?为了估计延迟,您想对信号进行互相关,而不是对其进行卷积。卷积可能会导致更大的延迟。
彼得·K。

PeterK可能是正确的。请注意,您可以先对时间之一进行时间反转和共轭,然后通过卷积实现相关性。这可以让您使用快速卷积算法(例如重叠保存)进行关联。
杰森R

Answers:


8

您确定不应该使用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])

3
正是我想要的。我看到的另一个示例使用了卷积,但我并没有想到直接相关将是正确的选择。谢谢。
CaymanEss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.