Medir la latencia de audio

Esta página describe métodos comunes para medir la latencia de entrada y salida.

Medir la latencia de salida

Hay varias técnicas disponibles para medir la latencia de salida, con distintos grados de precisión y facilidad de ejecución, que se describen a continuación. Consulte también el circuito de prueba para ver un entorno de prueba de ejemplo.

Prueba de LED y osciloscopio

Esta prueba mide la latencia en relación con el indicador LED del dispositivo. Si su dispositivo de producción no tiene un LED, puede instalar el LED en un dispositivo de factor de forma prototipo. Para obtener una precisión aún mayor en dispositivos prototipo con circuitos expuestos, conecte una sonda de osciloscopio al LED directamente para evitar la latencia del sensor de luz.

Si no puede instalar un LED en su dispositivo de producción o prototipo, pruebe las siguientes soluciones:

  • Utilice un pin de entrada/salida de uso general (GPIO) para el mismo propósito.
  • Utilice JTAG u otro puerto de depuración.
  • Utilice la retroiluminación de la pantalla. Esto podría ser arriesgado ya que la luz de fondo puede tener una latencia no despreciable y puede contribuir a una lectura de latencia inexacta.

Para realizar esta prueba:

  1. Ejecute una aplicación que encienda periódicamente el LED al mismo tiempo que emite audio.

    Nota: Para obtener resultados útiles, es fundamental utilizar las API correctas en la aplicación de prueba para ejercitar la ruta de salida de audio rápida. Consulte Diseño para latencia reducida para conocer los antecedentes.

  2. Coloque un sensor de luz al lado del LED.
  3. Conecte las sondas de un osciloscopio de doble canal tanto al conector de auriculares con cable (salida de línea) como al sensor de luz.
  4. Utilice el osciloscopio para medir la diferencia de tiempo entre la observación de la señal de salida de línea y la señal del sensor de luz.

La diferencia de tiempo es la latencia de salida de audio aproximada, suponiendo que la latencia del LED y la latencia del sensor de luz son cero. Normalmente, el LED y el sensor de luz tienen cada uno una latencia relativamente baja, del orden de un milisegundo o menos, que es lo suficientemente baja como para ignorarla.

Medir la latencia de ida y vuelta

La latencia de ida y vuelta es la suma de la latencia de salida y la latencia de entrada.

prueba de larsen

Una de las pruebas de latencia más sencillas es la prueba de retroalimentación de audio (efecto Larsen). Esto proporciona una medida aproximada de la latencia combinada de salida y entrada al cronometrar un ciclo de respuesta al impulso. Esta prueba por sí sola no es muy útil para análisis detallados debido a la naturaleza de la prueba, pero puede ser útil para calibrar otras pruebas y para establecer un límite superior.

Este método no desglosa los tiempos de los componentes, lo cual es importante cuando la latencia de salida y la latencia de entrada son independientes. Por lo tanto, este método no se recomienda para medir la latencia de salida precisa o los valores de latencia de entrada de forma aislada, pero podría ser útil para establecer estimaciones aproximadas.

La latencia de salida al altavoz del dispositivo puede ser significativamente mayor que la latencia de salida al conector de los auriculares. Esto se debe a la corrección y protección de los altavoces.

Para realizar esta prueba:

  1. Ejecute una aplicación que capture audio del micrófono e inmediatamente reproduzca los datos capturados a través del altavoz.
  2. Cree un sonido externamente, como golpear un lápiz junto al micrófono. Este ruido genera un bucle de retroalimentación. Alternativamente, se puede inyectar un impulso en el bucle utilizando un software.
  3. Mida el tiempo entre pulsos de retroalimentación para obtener la suma de la latencia de salida, la latencia de entrada y la sobrecarga de la aplicación.

Aquí hay algunos recursos para obtener una aplicación para la prueba de Larsen:

  • La aplicación loopback del Dr. Rick O'Rang es una aplicación de Android para pruebas de retroalimentación de audio. Puedes descargar la aplicación desde Google Play u obtener el código fuente de GitHub .
  • También publicamos una implementación de ejemplo en slesTestFeedback.cpp . Esta es una aplicación de línea de comandos y se crea utilizando el entorno de compilación de la plataforma; sin embargo, debería ser sencillo adoptar el código para otros entornos. También necesitará el código FIFO sin bloqueo ubicado en la biblioteca audio_utils .

Dongle de bucle invertido de audio

El dongle de bucle invertido de audio Dr. Rick O'Rang es útil para medir la latencia de ida y vuelta a través del conector de los auriculares. La siguiente imagen demuestra el resultado de inyectar un impulso en el bucle una vez y luego permitir que el bucle de retroalimentación oscile. El período de las oscilaciones es la latencia de ida y vuelta. El dispositivo específico, la versión del software y las condiciones de prueba no se especifican aquí. Los resultados mostrados no deben extrapolarse.

medición de ida y vuelta

Figura 1. Medición de ida y vuelta

Es posible que deba quitar el cable USB para reducir el ruido y ajustar el nivel de volumen para obtener una oscilación estable.

Medir la latencia de entrada

La latencia de entrada es más difícil de medir que la latencia de salida. Las siguientes pruebas podrían ayudar.

Un método consiste en determinar primero la latencia de salida utilizando el método de LED y osciloscopio y luego utilizar la prueba de retroalimentación de audio (Larsen) para determinar la suma de la latencia de salida y la latencia de entrada. La diferencia entre estas dos medidas es la latencia de entrada.

Otra técnica consiste en utilizar un pin GPIO en un dispositivo prototipo. Externamente, presione una entrada GPIO al mismo tiempo que presenta una señal de audio al dispositivo. Ejecute una aplicación que compare la diferencia en los tiempos de llegada de la señal GPIO y los datos de audio.

Reducir la latencia

Para lograr una latencia de audio baja, preste especial atención en todo el sistema a la programación, el manejo de interrupciones, la administración de energía y el diseño del controlador del dispositivo. Su objetivo es evitar que cualquier parte de la plataforma bloquee un hilo de audio SCHED_FIFO durante más de un par de milisegundos. Al adoptar un enfoque tan sistemático, puede reducir la latencia del audio y obtener el beneficio adicional de un rendimiento general más predecible.

Las deficiencias de audio, cuando ocurren, a menudo son detectables solo bajo ciertas condiciones o solo en las transiciones. Intente estresar el sistema iniciando nuevas aplicaciones y desplazándose rápidamente por varias pantallas. Pero tenga en cuenta que algunas condiciones de prueba son tan estresantes que van más allá de los objetivos de diseño. Por ejemplo, recibir un informe de error supone una carga tan enorme para el sistema que, en ese caso, puede ser aceptable que se produzca una insuficiencia de datos.

Al realizar pruebas de insuficiencia de datos:

  • Configure cualquier DSP después del procesador de la aplicación para que agregue una latencia mínima.
  • Ejecuta pruebas bajo diferentes condiciones como tener la pantalla encendida o apagada, USB enchufado o desenchufado, WiFi encendido o apagado, Bluetooth encendido o apagado y telefonía y radios de datos encendidos o apagados.
  • Seleccione música relativamente tranquila con la que esté muy familiarizado y en la que sea fácil escuchar los bajos.
  • Utilice auriculares con cable para mayor sensibilidad.
  • Tómese descansos para no experimentar "fatiga del oído".

Una vez que encuentre las causas subyacentes de las insuficiencias de datos, reduzca el número y el tamaño del búfer para aprovechar esto. El entusiasta enfoque de reducir el número y el tamaño del buffer antes de analizar las insuficiencias y corregir las causas de las insuficiencias sólo resulta en frustración.

Herramientas

systrace es una excelente herramienta de uso general para diagnosticar fallas de rendimiento a nivel del sistema.

La salida de dumpsys media.audio_flinger también contiene una sección útil llamada "estadísticas de movimiento simples". Tiene un resumen de la variabilidad de los tiempos transcurridos para cada mezcla de audio y ciclo de E/S. Idealmente, todas las mediciones de tiempo deberían ser aproximadamente iguales al tiempo medio o nominal del ciclo. Si ve un mínimo muy bajo o un máximo alto, esto es una indicación de un problema, probablemente una latencia de programación alta o un tiempo de desactivación de interrupción. La parte final de la salida es especialmente útil, ya que resalta la variabilidad más allá de +/- 3 desviaciones estándar.