Оценка временной задержки между двумя аудиосигналами

У меня есть две аудиозаписи одного и того же сигнала на 2 разных микрофонах (например, в формате WAV), но один из них записывается с задержкой, например, несколько секунд.

Легко идентифицировать такую задержку визуально при просмотре этих сигналов в каком-либо средстве просмотра формы волны - то есть, просто обнаруживая первый видимый пик в каждом сигнале и гарантируя, что они имеют одинаковую форму:


(источник: greycat.ru)

Но как мне сделать это программно - узнать, что это за задержка (t)? Два оцифрованных сигнала немного отличаются (потому что микрофоны разные, были в разных положениях, из-за настроек АЦП и т.д.).

Я немного покопался и обнаружил, что эту проблему обычно называют "оценкой задержки по времени", и к ней есть множество подходов - например, один из них.

Но есть ли простые и готовые решения, такие как утилита командной строки, библиотека или простой алгоритм?

Заключение: я не нашел простой реализации и сам создал простую утилиту командной строки, доступную по адресу https://bitbucket.org/GreyCat/calc-sound-delay (лицензирована GPLv3). Он реализует очень простой алгоритм поиска максимума, описанный в Википедии.

Ответы

Ответ 1

Техника, которую вы ищете, называется кросс-корреляция. Это очень простая, хотя и несколько вычислительная интенсивная техника, которая может быть использована для решения различных задач, включая измерение разницы во времени (aka lag) между двумя аналогичными сигналами (сигналы не обязательно должны быть идентичными).

Если у вас есть разумное представление о вашем значении запаздывания (или, по крайней мере, диапазон ожидаемых значений задержки), вы можете значительно уменьшить общий объем вычислений. То же самое, если вы можете установить определенный предел, насколько вам нужна точность.

Ответ 2

Очень прямолинейная вещь todo заключается в том, чтобы проверить, превышают ли пики некоторый порог, время между высоким пиком на линии A и высоким пиком на линии B, вероятно, является вашей задержкой. Просто попробуйте немного поработать с порогами, и если графики обычно такие же четкие, как и фотография, которую вы опубликовали, то вы должны быть в порядке.