Auf dieser Seite werden gängige Methoden zur Messung der Eingabe- und Ausgabelatenz beschrieben.
Messen Sie die Ausgabelatenz
Zur Messung der Ausgabelatenz stehen mehrere Techniken mit unterschiedlicher Genauigkeit und einfacher Ausführung zur Verfügung, die im Folgenden beschrieben werden. Eine beispielhafte Testumgebung finden Sie auch in der Testschaltung .
LED- und Oszilloskoptest
Dieser Test misst die Latenz im Verhältnis zur LED-Anzeige des Geräts. Wenn Ihr Produktionsgerät nicht über eine LED verfügt, können Sie die LED auf einem Prototyp-Formfaktorgerät installieren. Für eine noch bessere Genauigkeit bei Prototypengeräten mit freiliegenden Schaltkreisen schließen Sie einen Oszilloskop-Tastkopf direkt an die LED an, um die Latenz des Lichtsensors zu umgehen.
Wenn Sie weder auf Ihrem Produktionsgerät noch auf Ihrem Prototypgerät eine LED installieren können, versuchen Sie die folgenden Problemumgehungen:
- Verwenden Sie für denselben Zweck einen GPIO-Pin (General Purpose Input/Output).
- Verwenden Sie JTAG oder einen anderen Debugging-Port.
- Verwenden Sie die Hintergrundbeleuchtung des Bildschirms. Dies kann riskant sein, da die Hintergrundbeleuchtung möglicherweise eine nicht vernachlässigbare Latenzzeit aufweist und zu einer ungenauen Latenzmessung beitragen kann.
So führen Sie diesen Test durch:
- Führen Sie eine App aus, die die LED in regelmäßigen Abständen pulsiert und gleichzeitig Audio ausgibt.
Hinweis: Um nützliche Ergebnisse zu erhalten, ist es wichtig, die richtigen APIs in der Test-App zu verwenden, damit Sie den schnellen Audioausgabepfad nutzen. Siehe Design für reduzierte Latenz für den Hintergrund.
- Platzieren Sie einen Lichtsensor neben der LED.
- Schließen Sie die Sonden eines Zweikanal-Oszilloskops sowohl an die kabelgebundene Kopfhörerbuchse (Line-Ausgang) als auch an den Lichtsensor an.
- Verwenden Sie das Oszilloskop, um den Zeitunterschied zwischen der Beobachtung des Leitungsausgangssignals und dem Lichtsensorsignal zu messen.
Der Zeitunterschied ist die ungefähre Audioausgabelatenz, vorausgesetzt, dass die LED-Latenz und die Lichtsensorlatenz beide Null sind. Typischerweise haben die LED und der Lichtsensor jeweils eine relativ geringe Latenz in der Größenordnung von einer Millisekunde oder weniger, was niedrig genug ist, um ignoriert zu werden.
Messen Sie die Roundtrip-Latenz
Die Round-Trip-Latenz ist die Summe aus Ausgabelatenz und Eingabelatenz.
Larsen-Test
Einer der einfachsten Latenztests ist ein Audio-Feedback-Test (Larsen-Effekt). Dies liefert ein grobes Maß für die kombinierte Ausgangs- und Eingangslatenz durch die Zeitsteuerung einer Impulsantwortschleife. Aufgrund der Art des Tests ist dieser Test allein für eine detaillierte Analyse nicht sehr nützlich, er kann jedoch zur Kalibrierung anderer Tests und zur Festlegung einer Obergrenze nützlich sein.
Bei dieser Methode werden die Komponentenzeiten nicht aufgeschlüsselt, was wichtig ist, wenn die Ausgabelatenz und die Eingabelatenz unabhängig voneinander sind. Daher wird diese Methode nicht zum isolierten Messen präziser Ausgabelatenz- oder Eingabelatenzwerte empfohlen, kann jedoch für die Erstellung grober Schätzungen nützlich sein.
Die Ausgabelatenz zum Lautsprecher auf dem Gerät kann deutlich größer sein als die Ausgabelatenz zum Headset-Anschluss. Dies ist auf die Korrektur und den Schutz der Lautsprecher zurückzuführen.
So führen Sie diesen Test durch:
- Führen Sie eine App aus, die Audio vom Mikrofon aufnimmt und die erfassten Daten sofort über den Lautsprecher wiedergibt.
- Erzeugen Sie extern einen Ton, z. B. indem Sie mit einem Bleistift an das Mikrofon klopfen. Dieses Rauschen erzeugt eine Rückkopplungsschleife. Alternativ kann man per Software einen Impuls in die Schleife einspeisen.
- Messen Sie die Zeit zwischen Feedback-Impulsen, um die Summe aus Ausgabelatenz, Eingabelatenz und Anwendungs-Overhead zu erhalten.
Hier sind einige Ressourcen, um eine App für den Larsen-Test zu erhalten:
- Die Dr. Rick O'Rang Loopback-App ist eine Android-App zum Testen von Audio-Feedback. Sie können die App von Google Play herunterladen oder den Quellcode von GitHub erhalten .
- Wir haben auch eine Beispielimplementierung unter slesTestFeedback.cpp veröffentlicht. Dies ist eine Befehlszeilen-App, die mithilfe der Plattform-Build-Umgebung erstellt wird. Allerdings sollte es einfach sein, den Code für andere Umgebungen zu übernehmen. Sie benötigen außerdem den nicht blockierenden FIFO-Code, der sich in der
audio_utils
Bibliothek befindet.
Audio-Loopback-Dongle
Der Audio-Loopback-Dongle von Dr. Rick O'Rang ist praktisch zum Messen der Round-Trip-Latenz über den Headset-Anschluss. Das Bild unten zeigt das Ergebnis der einmaligen Einspeisung eines Impulses in die Schleife und der anschließenden Schwingung der Rückkopplungsschleife. Die Periode der Schwingungen ist die Umlauflatenz. Das spezifische Gerät, die Softwareversion und die Testbedingungen werden hier nicht angegeben. Die angezeigten Ergebnisse sollten nicht extrapoliert werden.
Möglicherweise müssen Sie das USB-Kabel entfernen, um Geräusche zu reduzieren, und die Lautstärke anpassen, um eine stabile Schwingung zu erreichen.
Messen Sie die Eingabelatenz
Die Eingabelatenz ist schwieriger zu messen als die Ausgabelatenz. Die folgenden Tests könnten hilfreich sein.
Ein Ansatz besteht darin, zunächst die Ausgangslatenz mithilfe der LED- und Oszilloskop-Methode zu bestimmen und dann mithilfe des Audio-Feedback-Tests (Larsen) die Summe aus Ausgangslatenz und Eingangslatenz zu ermitteln. Der Unterschied zwischen diesen beiden Messungen ist die Eingangslatenz.
Eine andere Technik besteht darin, einen GPIO-Pin an einem Prototypgerät zu verwenden. Pulsieren Sie extern einen GPIO-Eingang, während Sie gleichzeitig ein Audiosignal an das Gerät senden. Führen Sie eine App aus, die den Unterschied in den Ankunftszeiten des GPIO-Signals und der Audiodaten vergleicht.
Reduzieren Sie die Latenz
Um eine niedrige Audiolatenz zu erreichen, achten Sie im gesamten System besonders auf Planung, Interrupt-Handhabung, Energieverwaltung und Gerätetreiberdesign. Ihr Ziel besteht darin, zu verhindern, dass irgendein Teil der Plattform einen SCHED_FIFO
Audiothread länger als ein paar Millisekunden blockiert. Durch einen solchen systematischen Ansatz können Sie die Audiolatenz reduzieren und den Nebeneffekt einer insgesamt vorhersehbareren Leistung erzielen.
Audio-Underruns sind, wenn sie tatsächlich auftreten, oft nur unter bestimmten Bedingungen oder nur an den Übergängen erkennbar. Versuchen Sie, das System zu belasten, indem Sie neue Apps starten und schnell durch verschiedene Anzeigen scrollen. Beachten Sie jedoch, dass einige Testbedingungen so anstrengend sind, dass sie über die Designziele hinausgehen. Beispielsweise stellt die Erstellung eines Fehlerberichts eine so enorme Belastung für das System dar, dass in diesem Fall ein Underrun akzeptabel sein kann.
Beim Testen auf Underruns:
- Konfigurieren Sie jeden DSP nach dem App-Prozessor so, dass die Latenz minimal ist.
- Führen Sie Tests unter verschiedenen Bedingungen durch, z. B. bei ein- oder ausgeschaltetem Bildschirm, ein- oder ausgeschaltetem USB-Anschluss, ein- oder ausgeschaltetem WLAN, ein- oder ausgeschaltetem Bluetooth sowie ein- oder ausgeschaltetem Telefon- und Datenradio.
- Wählen Sie relativ leise Musik, mit der Sie sehr vertraut sind und bei der man leicht Untertöne hören kann.
- Für zusätzliche Empfindlichkeit verwenden Sie kabelgebundene Kopfhörer.
- Gönnen Sie sich Pausen, damit Sie keine „Ohrenermüdung“ verspüren.
Sobald Sie die zugrunde liegenden Ursachen für Unterläufe gefunden haben, reduzieren Sie die Pufferanzahl und -größe, um davon zu profitieren. Der eifrige Ansatz, die Pufferanzahl und -größe zu reduzieren , bevor Unterläufe analysiert und die Ursachen für Unterläufe behoben werden, führt nur zu Frustration.
Werkzeuge
systrace
ist ein hervorragendes Allzwecktool zur Diagnose von Leistungsstörungen auf Systemebene.
Die Ausgabe von dumpsys media.audio_flinger
enthält auch einen nützlichen Abschnitt namens „Simple Moving Statistics“. Hier finden Sie eine Zusammenfassung der Variabilität der verstrichenen Zeiten für jeden Audiomix und I/O-Zyklus. Im Idealfall sollten alle Zeitmessungen etwa der mittleren oder nominellen Zykluszeit entsprechen. Wenn Sie ein sehr niedriges Minimum oder ein hohes Maximum sehen, ist dies ein Hinweis auf ein Problem, wahrscheinlich eine hohe Planungslatenz oder eine Interrupt-Deaktivierungszeit. Der hintere Teil der Ausgabe ist besonders hilfreich, da er die Variabilität über +/- 3 Standardabweichungen hinaus hervorhebt.