Misurazione della latenza audio

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina descrive i metodi comuni per misurare la latenza di input e output.

Misurazione della latenza di uscita

Sono disponibili diverse tecniche per misurare la latenza di output, con vari gradi di precisione e facilità di esecuzione, descritte di seguito. Vedere anche il circuito di test per un ambiente di test di esempio.

Test LED e oscilloscopio

Questo test misura la latenza in relazione all'indicatore LED del dispositivo. Se il dispositivo di produzione non dispone di un LED, è possibile installare il LED su un dispositivo prototipo con fattore di forma. Per una precisione ancora migliore sui dispositivi prototipo con circuiti esposti, collegare una sonda dell'oscilloscopio al LED direttamente per bypassare la latenza del sensore di luce.

Se non è possibile installare un LED sul dispositivo di produzione o prototipo, provare le seguenti soluzioni alternative:

  • Utilizzare un pin GPIO (General Purpose Input/Output) per lo stesso scopo.
  • Usa JTAG o un'altra porta di debug.
  • Usa la retroilluminazione dello schermo. Questo potrebbe essere rischioso in quanto la retroilluminazione potrebbe avere una latenza non trascurabile e può contribuire a una lettura della latenza imprecisa.

Per condurre questo test:

  1. Esegui un'app che fa lampeggiare periodicamente il LED mentre emette l'audio.

    Nota: per ottenere risultati utili, è fondamentale utilizzare le API corrette nell'app di test in modo da esercitare il percorso di uscita audio veloce. Vedere Design per latenza ridotta per lo sfondo.

  2. Posizionare un sensore di luce accanto al LED.
  3. Collegare le sonde di un oscilloscopio a doppio canale sia al jack per cuffie cablate (uscita di linea) che al sensore di luce.
  4. Utilizzare l'oscilloscopio per misurare la differenza di tempo tra l'osservazione del segnale di uscita della linea e il segnale del sensore di luce.

La differenza di tempo è la latenza approssimativa dell'uscita audio, supponendo che la latenza del LED e quella del sensore di luce siano entrambe zero. In genere, il LED e il sensore di luce hanno ciascuno una latenza relativamente bassa dell'ordine di un millisecondo o meno, che è sufficientemente bassa da essere ignorata.

Misurazione della latenza di andata e ritorno

La latenza di andata e ritorno è la somma della latenza di output e della latenza di input.

Prova di Larsen

Uno dei test di latenza più semplici è un test di feedback audio (effetto Larsen). Ciò fornisce una misura approssimativa dell'uscita combinata e della latenza di ingresso cronometrando un ciclo di risposta all'impulso. Questo test non è molto utile per un'analisi dettagliata di per sé a causa della natura del test, ma può essere utile per calibrare altri test e per stabilire un limite superiore.

Questo metodo non scompone i tempi dei componenti, il che è importante quando la latenza di output e la latenza di input sono indipendenti. Quindi questo metodo non è consigliato per misurare con precisione la latenza di output oi valori di latenza di input in isolamento, ma potrebbe essere utile per stabilire stime approssimative.

La latenza di uscita all'altoparlante sul dispositivo può essere significativamente maggiore della latenza di uscita al connettore dell'auricolare. Ciò è dovuto alla correzione e alla protezione degli altoparlanti.

Per condurre questo test:

  1. Esegui un'app che acquisisce l'audio dal microfono e riproduce immediatamente i dati acquisiti tramite l'altoparlante.
  2. Crea un suono esternamente, ad esempio toccando una matita con il microfono. Questo rumore genera un circuito di feedback. In alternativa, è possibile iniettare un impulso nel circuito utilizzando un software.
  3. Misura il tempo tra gli impulsi di feedback per ottenere la somma di latenza di uscita, latenza di ingresso e sovraccarico dell'applicazione.

Ecco alcune risorse per ottenere un'app per il test di Larsen:

  • L'app di loopback del Dr. Rick O'Rang è un'app Android per il test del feedback audio. Puoi scaricare l'app da Google Play o ottenere il codice sorgente da GitHub .
  • Abbiamo anche pubblicato un'implementazione di esempio in slesTestFeedback.cpp . Questa è un'app della riga di comando ed è creata utilizzando l'ambiente di creazione della piattaforma; tuttavia dovrebbe essere semplice adottare il codice per altri ambienti. Avrai anche bisogno del codice FIFO non bloccante che si trova nella libreria audio_utils .

Dongle di loopback audio

Il dongle di loopback audio Dr. Rick O'Rang è utile per misurare la latenza di andata e ritorno sul connettore dell'auricolare. L'immagine seguente mostra il risultato dell'iniezione di un impulso nel loop una volta e quindi di consentire al loop di feedback di oscillare. Il periodo delle oscillazioni è la latenza di andata e ritorno. Il dispositivo specifico, la versione del software e le condizioni di test non sono specificate qui. I risultati mostrati non devono essere estrapolati.

misurazione andata e ritorno

Figura 1. Misurazione di andata e ritorno

Potrebbe essere necessario rimuovere il cavo USB per ridurre il rumore e regolare il livello del volume per ottenere un'oscillazione stabile.

Misurazione della latenza di ingresso

La latenza di input è più difficile da misurare rispetto alla latenza di output. I seguenti test potrebbero aiutare.

Un approccio consiste nel determinare prima la latenza di uscita utilizzando il metodo LED e oscilloscopio, quindi utilizzare il test di feedback audio (Larsen) per determinare la somma della latenza di uscita e della latenza di ingresso. La differenza tra queste due misurazioni è la latenza di input.

Un'altra tecnica consiste nell'utilizzare un pin GPIO su un dispositivo prototipo. Esternamente, pulsa un ingresso GPIO nello stesso momento in cui presenti un segnale audio al dispositivo. Esegui un'app che confronta la differenza nei tempi di arrivo del segnale GPIO e dei dati audio.

Ridurre la latenza

Per ottenere una bassa latenza audio, prestare particolare attenzione in tutto il sistema alla pianificazione, alla gestione degli interrupt, alla gestione dell'alimentazione e alla progettazione del driver del dispositivo. Il tuo obiettivo è impedire a qualsiasi parte della piattaforma di bloccare un thread audio SCHED_FIFO per più di un paio di millisecondi. Adottando un approccio così sistematico, puoi ridurre la latenza audio e ottenere il vantaggio collaterale di prestazioni complessive più prevedibili.

Gli underrun audio, quando si verificano, sono spesso rilevabili solo in determinate condizioni o solo alle transizioni. Prova a stressare il sistema avviando nuove app e scorrendo rapidamente i vari display. Ma tieni presente che alcune condizioni di test sono così stressanti da andare oltre gli obiettivi di progettazione. Ad esempio, prendere una segnalazione di bug pone un carico così enorme sul sistema che potrebbe essere accettabile avere un underrun in quel caso.

Durante il test di underrun:

  • Configura qualsiasi DSP dopo il processore dell'app in modo che aggiunga una latenza minima.
  • Esegui test in diverse condizioni, ad esempio con lo schermo acceso o spento, USB collegato o scollegato, Wi-Fi acceso o spento, Bluetooth acceso o spento e telefonia e radio dati attivati ​​o disattivati.
  • Seleziona musica relativamente tranquilla con cui hai molta familiarità e in cui è facile sentire gli sfasamenti.
  • Usa le cuffie cablate per una maggiore sensibilità.
  • Concediti delle pause in modo da non provare "affaticamento dell'orecchio".

Una volta individuate le cause alla base degli underrun, ridurre i conteggi e le dimensioni del buffer per trarne vantaggio. L'approccio impaziente di ridurre il numero e le dimensioni dei buffer prima di analizzare gli underrun e risolverne le cause provoca solo frustrazione.

Strumenti

systrace è un eccellente strumento generico per la diagnosi di problemi di prestazioni a livello di sistema.

L'output di dumpsys media.audio_flinger contiene anche un'utile sezione chiamata "semplici statistiche in movimento". Questo ha un riepilogo della variabilità dei tempi trascorsi per ogni mix audio e ciclo di I/O. Idealmente, tutte le misurazioni del tempo dovrebbero essere circa uguali al tempo di ciclo medio o nominale. Se vedi un minimo molto basso o un massimo alto, questa è un'indicazione di un problema, probabilmente un'elevata latenza di pianificazione o un tempo di disattivazione dell'interruzione. La parte di coda dell'output è particolarmente utile, in quanto evidenzia la variabilità oltre +/- 3 deviazioni standard.