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

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

我的目标是计算所需的时间我想使用互相关(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英尺。

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

预先感谢。

评论

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

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

#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])


评论


$ \ begingroup $
这正是我想要的。我看到的另一个示例使用了卷积,但我并没有想到直接相关将是正确的选择。谢谢。
$ \ endgroup $
–CaymanEss
13年5月8日在22:21