2011-02-11 33 views
13

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.

Respuesta

14

La técnica que está buscando se llama cross correlation. Es una técnica muy simple, aunque algo computacional, que se puede usar para resolver diversos problemas, incluida la medición de la diferencia de tiempo (también conocida como lag) entre dos señales similares (las señales no necesitan ser idénticas).

Si tiene una idea razonable de su valor de retardo (o al menos el rango de valores de retardo que se esperan), entonces puede reducir considerablemente la cantidad total de cálculos. Lo mismo si puede establecer un límite definido sobre la precisión que necesita.

+0

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

+1

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

+0

La correlación cruzada es mucho más rápida si usa una FFT. https://gist.github.com/376572 – endolith

1

Una tarea muy simple es solo verificar si los picos exceden algún umbral, el tiempo entre el pico alto en la línea A y el pico alto en la línea B es probablemente su retraso. Simplemente intente retocar un poco con los umbrales y si los gráficos son generalmente tan claros como la imagen que publicó, entonces debería estar bien.

Cuestiones relacionadas