Misura la latenza audio

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

Misura la latenza di output

Sono disponibili diverse tecniche per misurare la latenza di output, con diversi gradi di precisione e facilità di esecuzione, descritte di seguito. Vedi 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 tuo dispositivo di produzione non dispone di un LED, puoi installare il LED su un dispositivo con fattore di forma prototipo. Per una precisione ancora migliore sui dispositivi prototipo con circuiti esposti, collega una sonda dell'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:

  • Utilizzare un pin GPIO (General Purpose Input/Output) per lo stesso scopo.
  • Utilizza JTAG o un'altra porta di debug.
  • Utilizzare la retroilluminazione dello schermo. Ciò potrebbe essere rischioso poiché 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 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. Vedi Design per latenza ridotta per lo sfondo.

  2. Posiziona un sensore di luce accanto al LED.
  3. Collega 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 temporale 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, presupponendo che la latenza del LED e quella 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.

Misura la 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 è il test del feedback audio (effetto Larsen). Ciò fornisce una misura approssimativa della latenza combinata di output e input 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 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 la latenza di output o i valori di latenza di input in modo isolato, ma potrebbe essere utile per stabilire stime approssimative.

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

Per condurre questo test:

  1. Esegui un'app che acquisisca l'audio dal microfono e riproduca immediatamente i dati acquisiti sull'altoparlante.
  2. Crea un suono esternamente, ad esempio toccando una matita vicino al microfono. Questo rumore genera un ciclo di feedback. In alternativa, è possibile iniettare un impulso nel circuito utilizzando un software.
  3. Misurare il tempo tra gli impulsi di feedback per ottenere la somma della latenza di output, latenza di input e sovraccarico dell'applicazione.

Ecco alcune risorse per ottenere un'app per il test 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 creazione della piattaforma; tuttavia dovrebbe essere semplice adottare il codice per altri ambienti. Avrai anche bisogno del codice FIFO non bloccante situato nella libreria audio_utils .

Chiavetta 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 circuito una volta e quindi dell'oscillazione del circuito 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.

misurazione di 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.

Misura la 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 innanzitutto la latenza di uscita utilizzando il metodo LED e oscilloscopio, quindi utilizzare il test del feedback audio (Larsen) per determinare la somma della latenza di uscita e di 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, invia un impulso a un ingresso GPIO nello stesso momento in cui presenti un segnale audio al dispositivo. Esegui un'app che confronti la differenza tra i 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 delle interruzioni, alla gestione dell'alimentazione e alla progettazione dei driver del dispositivo. Il tuo obiettivo è impedire che qualsiasi parte della piattaforma blocchi un thread audio SCHED_FIFO per più di un paio di millisecondi. Adottando un approccio così sistematico, è possibile ridurre la latenza audio e ottenere il vantaggio collaterale di prestazioni complessivamente più prevedibili.

I problemi audio, quando si verificano, sono spesso rilevabili solo in determinate condizioni o solo nelle 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, ricevere una segnalazione di bug impone un carico così enorme sul sistema che in quel caso potrebbe essere accettabile avere un underrun.

Durante il test per gli 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 collegata o scollegata, WiFi acceso o spento, Bluetooth acceso o spento e telefonia e radio dati accesi o spenti.
  • Seleziona musica relativamente tranquilla con la quale hai molta familiarità e nella quale è facile sentire dei brani in sottofondo.
  • Usa le cuffie cablate per una maggiore sensibilità.
  • Concediti delle pause in modo da non avvertire "affaticamento dell'orecchio".

Una volta individuate le cause alla base dei 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.

Utensili

systrace è un eccellente 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 spostamento semplici". Contiene un riepilogo della variabilità dei tempi trascorsi per ciascun 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, questo è 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.