Medición de la latencia de audio

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

Medición de la latencia de salida

Hay varias técnicas disponibles para medir la latencia de salida, con diversos 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 mejor 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:

  • Use un pin de entrada/salida de propósito general (GPIO) para el mismo propósito.
  • Use JTAG u otro puerto de depuración.
  • Utilice la luz de fondo de la pantalla. Esto puede 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 pulse periódicamente el LED al mismo tiempo que emite audio.

    Nota: Para obtener resultados útiles, es crucial usar las API correctas en la aplicación de prueba para que esté ejercitando 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 en el tiempo es la latencia de salida de audio aproximada, suponiendo que la latencia del LED y la latencia del sensor de luz sean cero. Por lo general, el LED y el sensor de luz tienen una latencia relativamente baja del orden de un milisegundo o menos, que es lo suficientemente baja como para ignorarla.

Medición de 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 fáciles es una prueba de retroalimentación de audio (efecto Larsen). Esto proporciona una medida aproximada de la latencia combinada de salida y entrada al cronometrar un bucle de respuesta de impulso. Esta prueba no es muy útil para el análisis detallado por sí misma 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 el audio del micrófono e inmediatamente reproduzca los datos capturados por el altavoz.
  2. Cree un sonido externo, como tocar un lápiz con el micrófono. Este ruido genera un circuito de retroalimentación. Alternativamente, se puede inyectar un impulso en el bucle usando un software.
  3. Mida el tiempo entre los 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 de bucle invertido Dr. Rick O'Rang es una aplicación de Android para pruebas de retroalimentación de audio. Puede 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 está construida utilizando el entorno de construcció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 que se encuentra 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 en el conector del auricular. 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 de 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.

Medición de 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 enfoque consiste en determinar primero la latencia de salida usando el método de LED y osciloscopio y luego usar 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 es usar un pin GPIO en un dispositivo prototipo. Externamente, pulse 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.

Reducción de latencia

Para lograr una baja latencia de audio, 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 de dispositivos. 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 de audio y obtener el beneficio adicional de un rendimiento general más predecible.

Las insuficiencias 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, tomar un informe de error supone una carga tan enorme para el sistema que puede ser aceptable tener un error insuficiente en ese caso.

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.
  • Ejecute pruebas en diferentes condiciones, como tener la pantalla encendida o apagada, el USB conectado o desconectado, el WiFi encendido o apagado, el Bluetooth encendido o apagado, y las radios de telefonía y datos encendidas o apagadas.
  • Selecciona música relativamente tranquila con la que estés muy familiarizado y que sea fácil de escuchar.
  • Use auriculares con cable para mayor sensibilidad.
  • Date descansos para que no experimentes "fatiga de oído".

Una vez que encuentre las causas subyacentes de las insuficiencias de datos, reduzca los recuentos y tamaños de búfer para aprovechar esto. El enfoque entusiasta de reducir el número y el tamaño del búfer antes de analizar la insuficiencia de datos y corregir las causas de la insuficiencia de datos solo genera frustración.

Instrumentos

systrace es una excelente herramienta de propósito 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 simple". 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 de ciclo medio o nominal. 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 destaca la variabilidad más allá de +/- 3 desviaciones estándar.