我用 2 个不同的麦克风(例如,WAV 格式)录制了两个相同信号的音频,但其中一个录制了延迟,例如,几秒钟。
在某种波形查看器中查看这些信号时,很容易在视觉上识别这种延迟 - 即在每个信号中发现第一个可见峰值并确保它们的形状相同:
(来源:greycat.ru)
但是我如何以编程方式做到这一点 - 找出这个延迟(t)是什么?两个数字化信号略有不同(因为麦克风不同、位置不同、ADC 设置等原因)。
我仔细研究了一下,发现这个问题通常被称为“时间延迟估计”,它有无数种解决方法 - 例如, one of them 。
但是是否有任何简单且现成的解决方案,例如可用的命令行实用程序、库或直接算法?
结论 :我没有找到简单的实现,我自己做了一个简单的命令行实用程序 - 可在 https://bitbucket.org/GreyCat/calc-sound-delay(GPLv3 许可)获得。它实现了一个非常简单的搜索最大值算法,在 Wikipedia 中描述。
最佳答案
您正在寻找的技术称为 cross correlation 。这是一种非常简单的计算密集型技术,可用于解决各种问题,包括测量两个相似信号(信号不需要相同)之间的时间差(又名滞后)。
如果您对滞后值(或至少是预期的滞后值范围)有一个合理的了解,那么您可以显着减少计算总量。如果您可以对所需的准确度设定明确的限制,则同上。
关于algorithm - 两个音频信号之间的时间延迟估计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4967453/