我有两个不同麦克风对同一信号进行的两段音频录音(例如,以 WAV 格式),但其中之一的录制有延迟,例如几秒钟。
在某种波形查看器中查看这些信号时,很容易通过视觉识别这种延迟 - 即只需发现每个信号中的第一个可见峰值并确保它们具有相同的形状:
(source: greycat.ru http://www.greycat.ru/temp/time-delay-peaks.png)
但我该如何以编程方式做到这一点 - 找出这个延迟 (t) 是什么?两个数字化信号略有不同(因为麦克风不同、位置不同、ADC 设置等)。
我仔细研究了一下,发现这个问题通常被称为“时间延迟估计”,并且有多种解决方法 - 例如,其中之一 https://cnx.org/contents/88b5bdec-22fa-4e68-ad0b-488c66da1a86@5.
但是是否有任何简单且现成的解决方案,例如可用的命令行实用程序、库或直接算法?
结论:我发现没有简单的实现,并且自己做了一个简单的命令行实用程序 - 可以在https://bitbucket.org/GreyCat/calc-sound-delay https://bitbucket.org/GreyCat/calc-sound-delay(GPLv3 许可)。它实现了一个非常简单的搜索最大值算法,描述于维基百科 https://en.wikipedia.org/wiki/Cross-correlation.
您正在寻找的技术称为互相关 http://en.wikipedia.org/wiki/Cross-correlation。这是一种非常简单的计算密集型技术,可用于解决各种问题,包括测量时间差(又名lag)在两个相似信号之间(信号不需要相同)。
如果您对滞后值(或至少是预期的滞后值的范围)有一个合理的了解,那么您可以大大减少总计算量。如果您可以对所需的准确度设置明确的限制,则同上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)