Questa pagina descrive i metodi comuni per misurare la latenza di input e output.
Misurare la latenza in uscita
Esistono diverse tecniche disponibili per misurare la latenza in uscita, con diversi gradi di accuratezza e facilità di esecuzione, descritte di seguito. Consulta anche il circuito di test 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 dispositivo di produzione non ha un LED, puoi installarlo su un prototipo di dispositivo con fattore di forma. Per una precisione ancora maggiore su prototipi di dispositivi con circuiti esposti, collega una sonda oscilloscopio direttamente al LED per bypassare la latenza del sensore di luce.
Se non riesci a installare un LED sul dispositivo di produzione o sul prototipo, prova le seguenti soluzioni alternative:
- Utilizza un pin GPIO (General Purpose Input/Output) per lo stesso scopo.
- Utilizza JTAG o un'altra porta di debug.
- Usa la retroilluminazione dello schermo. Questa operazione potrebbe essere rischiosa in quanto la retroilluminazione potrebbe avere una latenza non trascurabile e contribuire a una lettura della latenza imprecisa.
Per eseguire questo test:
- Esegui un'app che fa lampeggiare periodicamente il LED contemporaneamente all'output audio.
Nota:per ottenere risultati utili, è fondamentale utilizzare le API corrette nell'app di test in modo da testare il percorso di output audio rapido. Per informazioni sullo sfondo, consulta Progettare per ridurre la latenza.
- Posiziona un sensore di luce accanto al LED.
- Collega le sonde di un oscilloscopio a doppio canale sia al jack delle cuffie con cavo (uscita di linea) sia al sensore di luce.
- Utilizza 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, assumendo 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 essere ignorata.
Misurare la latenza di andata e ritorno
La latenza di andata e ritorno è la somma della latenza in uscita e della latenza in entrata.
Test di Larsen
Uno dei test di latenza più semplici è il test di feedback audio (effetto Larsen). Questo fornisce una misura approssimativa della latenza combinata di output e input misurando il tempo di un loop di risposta all'impulso. Questo test non è molto utile per analisi dettagliate da solo a causa della sua natura, ma può essere utile per la calibrazione di altri test e per stabilire un limite superiore.
Questo metodo non suddivide i tempi dei componenti, il che è importante quando la latenza in uscita e la latenza in entrata sono indipendenti. Pertanto, questo metodo non è consigliato per misurare singolarmente valori precisi di latenza in uscita o latenza in entrata, ma potrebbe essere utile per stabilire stime approssimative.
La latenza in uscita allo speaker integrato del dispositivo può essere notevolmente superiore alla latenza in uscita al connettore dell'auricolare. Ciò è dovuto alla correzione e alla protezione dell'altoparlante.
Per eseguire questo test:
- Esegui un'app che acquisisce l'audio dal microfono e riproduce immediatamente i dati acquisiti tramite lo speaker.
- Crea un suono esterno, ad esempio colpendo una matita vicino al microfono. Questo rumore genera un loop di feedback. In alternativa, è possibile iniettare un impulso nel loop utilizzando un software.
- Misura il tempo tra i singoli impulsi di feedback per ottenere la somma della latenza in uscita, della latenza in entrata e dell'overhead 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 per 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 in slesTestFeedback.cpp.
Si tratta di un'app a riga di comando e viene creata utilizzando l'ambiente di compilazione della piattaforma. Tuttavia, dovrebbe essere semplice adottare il codice per altri ambienti.
Dovrai anche avere il codice FIFO non bloccante situato nella libreria
audio_utils
.
Dongle per il loopback audio
Il dongle loopback audio Dr. Rick O'Rang è utile per misurare la latenza di andata e ritorno tramite il connettore delle cuffie. L'immagine seguente mostra il risultato dell'iniezione di un impulso nel loop una volta e poi consente al loop di feedback di oscillare. Il periodo delle oscillazioni è la latenza di andata e ritorno. Il dispositivo specifico, la release del software e le condizioni di test non sono specificati qui. I risultati mostrati non devono essere estratti.

Figura 1. Misurazione del percorso completo
Potresti dover rimuovere il cavo USB per ridurre il rumore e regolare il livello del volume per ottenere un'oscillazione stabile.
Misurare la latenza dell'input
La latenza di input è più difficile da misurare rispetto alla latenza di output. I seguenti test potrebbero essere utili.
Un approccio è determinare prima la latenza di output utilizzando il metodo del LED e dell'oscilloscopio, quindi utilizzare il test di feedback audio (Larsen) per determinare la somma della latenza di output e della latenza di input. La differenza tra queste due misurazioni è la latenza di input.
Un'altra tecnica consiste nell'utilizzare un pin GPIO su un dispositivo prototipo. Esternamente, attiva un input GPIO contemporaneamente alla presentazione di un segnale audio al dispositivo. Esegui un'app che metta a confronto la differenza nei tempi di arrivo del segnale GPIO e dei dati audio.
Riduci la latenza
Per ottenere una bassa latenza audio, presta particolare attenzione all'intero sistema per quanto riguarda la pianificazione, la gestione delle interruzioni, la gestione dell'alimentazione e la progettazione dei driver dei dispositivi. 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 aggiuntivo di un rendimento più prevedibile in generale.
Quando si verificano, gli errori di sottodimensionamento dell'audio sono spesso rilevabili solo in determinate condizioni o solo durante le transizioni. Prova a sottoporre il sistema a stress avviando nuove app e scorrendo rapidamente vari display. Tuttavia, tieni presente che alcune condizioni di test sono così stressanti da andare oltre gli scopi di progettazione. Ad esempio, la generazione di un report di bug comporta un carico così enorme sul sistema che in questo caso potrebbe essere accettabile un sottoutilizzo.
Quando esegui il test per verificare la presenza di sottocarichi:
- Configura qualsiasi DSP dopo l'app processor in modo che aggiunga una latenza minima.
- Esegui i test in condizioni diverse, ad esempio con lo schermo acceso o spento, con il cavo USB collegato o scollegato, con il Wi-Fi attivo o disattivato, con il Bluetooth attivo o disattivato e con la telefonia e le radio dati attive o disattivate.
- Seleziona musica relativamente silenziosa che conosci molto bene e in cui è facile sentire gli underrun.
- Usa le cuffie con cavo per una maggiore sensibilità.
- Fai delle pause per non soffrire di "fatica dell'orecchio".
Una volta individuate le cause sottostanti degli underrun, riduci il numero e le dimensioni dei buffer per sfruttare questa funzionalità. L'approccio eager di ridurre il numero e le dimensioni dei buffer prima di analizzare gli underrun e di correggere solo le cause degli underrun è frustrante.
Strumenti
systrace
è un ottimo strumento generico per diagnosticare problemi di prestazioni a livello di sistema.
L'output di dumpsys media.audio_flinger
contiene anche una sezione utile chiamata "statistiche di movimento semplici". Questo contiene un riepilogo della variabilità dei tempi di esecuzione per ogni mix audio e ciclo I/O.
Idealmente, tutte le misurazioni del tempo dovrebbero essere approssimativamente uguali al tempo di ciclo medio o nominale. Se noti un valore minimo molto basso o massimo elevato, è un'indicazione di un problema, probabilmente una latenza di pianificazione elevata o un tempo di disattivazione dell'interruzione. La parte finale dell'output è particolarmente utile, poiché evidenzia la variabilità oltre +/- 3 deviazioni standard.