Tengo dos grabaciones de audio de una misma señal por 2 micrófonos diferentes (por ejemplo, en formato WAV), pero una de ellas se graba con retraso, por ejemplo, varios segundos.Estimación del tiempo de retardo entre dos señales de audio
Es fácil identificar un retraso tan visualmente durante la visualización de estas señales en una especie de visor de forma de onda - es decir, justo manchado primer pico visible en cada señal y asegurando que son la misma forma:
http://www.greycat.ru/temp/time-delay-peaks.png
Pero, ¿cómo lo hago programáticamente? ¿Qué es este retraso (t)? Las dos señales digitalizadas son ligeramente diferentes (porque los micrófonos son diferentes, estaban en diferentes posiciones, debido a las configuraciones de ADC, etc.).
He explorado un poco y descubrí que este problema se suele llamar "estimación de tiempo de espera" y tiene innumerables enfoques, por ejemplo, one of them.
¿Pero hay alguna solución simple y lista para usar, como la línea de comandos, biblioteca o algoritmo directo disponible?
Conclusión: he encontrado ninguna aplicación sencilla y práctica una sencilla utilidad de línea de comandos a mí mismo - disponible en https://bitbucket.org/GreyCat/calc-sound-delay (GPLv3-licencia). Implementa un algoritmo de búsqueda de máximo muy simple descrito en Wikipedia.
Sí, correlación cruzada, exactamente. Es bueno mencionar que el cálculo se puede reducir si se puede estimar un buen punto de partida. – Dan
Busqué y no encontré implementaciones simplistas de este algoritmo, así que hice uno yo mismo y lo publiqué https://bitbucket.org/GreyCat/calc-sound- demo – GreyCat
La correlación cruzada es mucho más rápida si usa una FFT. https://gist.github.com/376572 – endolith