Questa pagina descrive i metodi comuni per misurare la latenza di input e output.
Misurazione della latenza di output
Sono disponibili diverse tecniche per misurare la latenza di output, con vari gradi di accuratezza e facilità di esecuzione, descritte di seguito. Vedere anche il circuito Testing per un esempio di ambiente di test.
Test LED e oscilloscopio
Questo test misura la latenza in relazione all'indicatore LED del dispositivo. Se il tuo dispositivo di produzione non dispone di un LED, puoi installare il LED su un prototipo di dispositivo con fattore di forma. Per una precisione ancora migliore sui dispositivi prototipo con circuiti esposti, collegare una sonda dell'oscilloscopio direttamente al LED per bypassare la latenza del sensore di luce.
Se non riesci a installare un LED sul tuo dispositivo di produzione o prototipo, prova 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 può avere una latenza non trascurabile e può contribuire a una lettura imprecisa della latenza.
Per condurre questo test:
- Esegui un'app che periodicamente fa pulsare il LED nello stesso momento in cui emette l'audio.
Nota: per ottenere risultati utili, è fondamentale utilizzare le API corrette nell'app di test in modo da esercitare il percorso di output audio veloce. Vedere Progettazione per latenza ridotta per lo sfondo.
- Posizionare un sensore di luce accanto al LED.
- Collegare le sonde di un oscilloscopio a doppio canale sia al jack per cuffie cablate (uscita di linea) sia al sensore di luce.
- Utilizzare l'oscilloscopio per misurare la differenza di tempo tra l'osservazione del segnale di uscita della linea rispetto al segnale del sensore di luce.
La differenza di tempo è la latenza approssimativa dell'uscita audio, supponendo che la latenza del LED e la latenza del sensore di luce siano entrambe pari a 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 poter 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 grezza della latenza combinata di output e input cronometrando un ciclo di risposta all'impulso. Questo test non è molto utile per l'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 suddivide i tempi dei componenti, il che è importante quando la latenza di output e la latenza di input sono indipendenti. Pertanto, questo metodo non è consigliato per misurare i valori precisi della latenza di output o della latenza di input isolatamente, 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:
- Esegui un'app che acquisisce l'audio dal microfono e riproduce immediatamente i dati acquisiti tramite l'altoparlante.
- Crea un suono esternamente, ad esempio toccando una matita vicino al microfono. Questo rumore genera un ciclo di feedback. In alternativa, è possibile inserire un impulso nel loop utilizzando il software.
- Misura il tempo tra gli impulsi di feedback per ottenere la somma della latenza di output, della latenza di input e dell'overhead dell'applicazione.
Ecco alcune risorse per ottenere un'app per il test di Larsen:
- L'app di loopback Dr. Rick O'Rang è un'app Android per i test di feedback audio. Puoi scaricare l'app da Google Play o ottenere il codice sorgente da GitHub .
- Abbiamo anche pubblicato un'implementazione di esempio su slesTestFeedback.cpp . Questa è un'app da riga di comando ed è creata utilizzando l'ambiente di compilazione 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
.
Chiavetta audio loopback
Il dongle audio loopback Dr. Rick O'Rang è utile per misurare la latenza di andata e ritorno sul connettore dell'auricolare. L'immagine sotto mostra il risultato dell'iniezione di un impulso nel loop una volta, e quindi dell'oscillazione del loop di feedback. Il periodo delle oscillazioni è la latenza di andata e ritorno. Il dispositivo specifico, la versione del software e le condizioni di test non sono specificati qui. I risultati mostrati non devono essere estrapolati.

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 input
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 del LED e dell'oscilloscopio e 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.
Riduzione della 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 dei driver di 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 complessivamente più prevedibili.
Gli underrun audio, quando si verificano, sono spesso rilevabili solo in determinate condizioni o solo in corrispondenza delle 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, l'acquisizione di un bugreport mette un carico così enorme sul sistema che potrebbe essere accettabile avere un underrun in quel caso.
Durante il test per underrun:
- Configura qualsiasi DSP dopo il processore dell'app in modo che aggiunga una latenza minima.
- Esegui i test in condizioni diverse, 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 accesi o spenti.
- Seleziona musica relativamente tranquilla con cui hai molta familiarità e in cui è facile sentire i underrun.
- 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 i conteggi e le dimensioni del buffer prima di analizzare gli underrun e risolvere le cause degli underrun si traduce solo in frustrazione.
Strumenti
systrace
è un eccellente strumento generico per diagnosticare problemi di prestazioni a livello di sistema.
L'output di dumpsys media.audio_flinger
contiene anche un'utile sezione chiamata "simple moving statistics". Questo ha un riepilogo della variabilità dei tempi trascorsi per ogni mix audio e ciclo 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 disabilitazione dell'interruzione. La parte finale dell'output è particolarmente utile, poiché evidenzia la variabilità oltre +/- 3 deviazioni standard.