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

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

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


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

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

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

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

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

13
задан Glorfindel 8 August 2019 в 22:12
поделиться