Bu sayfada, giriş ve çıkış gecikmesini ölçmek için kullanılan yaygın yöntemler açıklanmaktadır.
Çıkış gecikmesini ölçme
Çıkış gecikmesini ölçmek için çeşitli teknikler vardır. Bu tekniklerin doğruluk ve çalıştırma kolaylığı dereceleri aşağıda açıklanmıştır. Örnek bir test ortamı için Test devresi bölümüne de bakın.
LED ve osiloskop testi
Bu test, cihazın LED göstergesiyle ilgili gecikmeyi ölçer. Üretim cihazınızda LED yoksa LED'i bir prototip form faktörü cihaza yükleyebilirsiniz. Açık devreleri olan prototip cihazlarda daha da yüksek doğruluk için ışık sensörü gecikmesini atlamak amacıyla bir osiloskop probunu doğrudan LED'e bağlayın.
Üretim veya prototip cihazınıza LED takamıyorsanız aşağıdaki geçici çözümleri deneyin:
- Aynı amaç için genel amaçlı giriş/çıkış (GPIO) pini kullanın.
- JTAG veya başka bir hata ayıklama bağlantı noktası kullanın.
- Ekran arka ışığını kullanın. Arka ışığın gecikmesi göz ardı edilemeyecek kadar fazla olabileceği ve yanlış bir gecikme okumasına yol açabileceği için bu işlem riskli olabilir.
Bu testi yapmak için:
- Ses çıkışı sağlarken LED'i düzenli aralıklarla yanıp sönen bir uygulama çalıştırın.
Not: Yararlı sonuçlar elde etmek için test uygulamasında doğru API'leri kullanmanız gerekir. Böylece hızlı ses çıkış yolunu kullanabilirsiniz. Arka plan bilgi için Daha az gecikme için tasarım başlıklı makaleyi inceleyin.
- LED'in yanına bir ışık sensörü yerleştirin.
- İki kanallı bir osiloskopun problarını hem kablolu kulaklık jakına (hat çıkışı) hem de ışık sensörüne bağlayın.
- Hat çıkış sinyalini gözlemleme ile ışık sensörü sinyali arasındaki zaman farkını ölçmek için osiloskopu kullanın.
Zaman farkı, LED gecikmesi ve ışık sensörü gecikmesinin sıfır olduğu varsayılarak yaklaşık ses çıkış gecikmesidir. LED ve ışık sensörünün her biri genellikle bir milisaniye veya daha azlık nispeten düşük bir gecikmeye sahiptir. Bu gecikme, göz ardı edilebilecek kadar düşüktür.
Gidiş dönüş gecikmesini ölçme
Gidiş dönüş gecikmesi, çıkış gecikmesi ile giriş gecikmesinin toplamıdır.
Larsen testi
En kolay gecikme testlerinden biri ses geri bildirimi (Larsen etkisi) testidir. Bu yöntem, bir dürtü yanıtı döngüsünü zamanlayarak birleşik çıkış ve giriş gecikmesinin kaba bir ölçümünü sağlar. Bu test, testin doğası gereği tek başına ayrıntılı analiz için çok yararlı değildir ancak diğer testleri kalibre etmek ve üst sınır belirlemek için yararlı olabilir.
Bu yöntem, bileşen sürelerini ayrıntılı olarak göstermez. Bu, çıkış gecikmesi ve giriş gecikmesi bağımsız olduğunda önemlidir. Bu nedenle, bu yöntem, çıkış gecikmesi veya giriş gecikmesi değerlerini tek başına ölçmek için önerilmez ancak kaba tahminler oluşturmak için yararlı olabilir.
Cihaz üzerindeki hoparlöre giden çıkış gecikmesi, kulaklık konnektörüne giden çıkış gecikmesinden önemli ölçüde daha uzun olabilir. Bunun nedeni hoparlör düzeltmesi ve korumasıdır.
Bu testi yapmak için:
- Mikrofondan ses yakalayan ve yakalanan verileri hemen hoparlörden çalan bir uygulama çalıştırın.
- Mikrofonun yanına bir kalemle vurarak ses çıkarabilirsiniz. Bu gürültü, bir geri bildirim döngüsü oluşturur. Alternatif olarak, yazılım kullanarak döngüye bir impuls enjekte edilebilir.
- Çıkış gecikmesi, giriş gecikmesi ve uygulama yükü toplamını elde etmek için geri bildirim darbeleri arasındaki süreyi ölçün.
Larsen testi için uygulama edinmeyle ilgili bazı kaynaklar aşağıda verilmiştir:
- Dr. Rick O'Rang loopback uygulaması, ses geri bildirimi testine yönelik bir Android uygulamasıdır. Uygulamayı Google Play'den indirebilir veya kaynak kodunu GitHub'dan edinebilirsiniz.
-
Ayrıca slesTestFeedback.cpp adresinde bir örnek uygulama yayınladık.
Bu, platform derleme ortamı kullanılarak oluşturulmuş bir komut satırı uygulamasıdır. Ancak kodu diğer ortamlara uyarlamak kolaydır.
Ayrıca
audio_utils
kitaplığında bulunan engellemeyen FIFO koduna da ihtiyacınız vardır.
Ses geri gönderme donanım anahtarı
Dr. Rick O'Rang ses döngü dongle'ı, mikrofonlu kulaklık konnektörü üzerinden gidiş dönüş gecikmesini ölçmek için kullanışlıdır. Aşağıdaki resimde, döngüye bir kez impuls enjekte edilmesinin ve ardından geri bildirim döngüsünün salınım yapmasının sonucu gösterilmektedir. Dalgalanma dönemi, gidiş dönüş gecikmesidir. Belirli cihaz, yazılım sürümü ve test koşulları burada belirtilmez. Gösterilen sonuçlar ekstrapolasyona tabi tutulmamalıdır.

Şekil 1. Dönüş yolculuğu ölçümü
Gürültüyü azaltmak için USB kablosunu çıkarmanız ve sabit bir salınım elde etmek için ses seviyesini ayarlamanız gerekebilir.
Giriş gecikmesini ölçme
Giriş gecikmesinin ölçülmesi, çıkış gecikmesinden daha zordur. Aşağıdaki testler yardımcı olabilir.
Bir yaklaşım, önce LED ve osiloskop yöntemini kullanarak çıkış gecikmesini belirlemek ve ardından çıkış gecikmesi ile giriş gecikmesinin toplamını belirlemek için ses geri bildirimi (Larsen) testini kullanmaktır. Bu iki ölçüm arasındaki fark, giriş gecikmesidir.
Bir diğer teknik de prototip cihazda GPIO pini kullanmaktır. Harici olarak, cihaza ses sinyali gönderirken aynı anda bir GPIO girişine darbe gönderin. GPIO sinyali ile ses verilerinin varış zamanlarındaki farkı karşılaştıran bir uygulama çalıştırın.
Gecikmeyi azaltma
Düşük ses gecikmesi elde etmek için sistem genelinde planlamaya, kesinti işlemeye, güç yönetimine ve cihaz sürücü tasarımına özellikle dikkat edin. Amacınız, platformun herhangi bir bölümünün bir SCHED_FIFO
ses mesajını birkaç milisaniyeden uzun süre engellemesini önlemektir. Bu tür sistematik bir yaklaşım benimseyerek ses gecikmesini azaltabilir ve genel olarak daha tahmin edilebilir bir performansın yan avantajından yararlanabilirsiniz.
Ses eksiklikleri, oluştuğunda genellikle yalnızca belirli koşullarda veya yalnızca geçişlerde tespit edilebilir. Yeni uygulamalar başlatarak ve çeşitli ekranlarda hızlıca gezinerek sistemi zorlamayı deneyin. Ancak bazı test koşullarının, tasarım hedeflerini aşan kadar stresli olabileceğini unutmayın. Örneğin, bir hata raporu almak sisteme o kadar büyük bir yük bindirir ki bu durumda yetersiz çalışmanın kabul edilebilir olabileceğini unutmayın.
Eksik süre olup olmadığını test ederken:
- Tüm DSP'leri, uygulama işlemciden sonra minimum gecikme süresi ekleyecek şekilde yapılandırın.
- Ekran açık veya kapalı, USB takılı veya takılı değil, kablosuz ağ açık veya kapalı, Bluetooth açık veya kapalı, telefon ve veri radyoları açık veya kapalı gibi farklı koşullarda testler çalıştırın.
- Çok aşina olduğunuz ve düşük bit hızlarını kolayca duymanızı sağlayacak, nispeten sessiz bir müzik seçin.
- Daha fazla hassasiyet için kablolu kulaklık kullanın.
- "Kulak yorgunluğu" yaşamamak için ara verin.
Alt sınırın altında kalmanın temel nedenlerini bulduktan sonra, bu avantajdan yararlanmak için arabellek sayılarını ve boyutlarını azaltın. Akış kesintilerini analiz edip nedenlerini düzeltmeden önce arabelleği sayısını ve boyutunu azaltma yaklaşımı yalnızca hayal kırıklığına yol açar.
Araçlar
systrace
, sistem düzeyindeki performans sorunlarını teşhis etmek için mükemmel bir genel amaçlı araçtır.
dumpsys media.audio_flinger
işlevinin çıktısı, "basit hareketli istatistikler" adlı faydalı bir bölüm de içerir. Bu sayfada, her ses karışımı ve G/Ç döngüsü için geçen sürelerin değişkenliğinin özeti yer alır.
İdeal olarak tüm zaman ölçümleri ortalama veya nominal döngü süresine yaklaşık olarak eşit olmalıdır. Çok düşük bir minimum veya yüksek bir maksimum görürseniz bu, bir sorun olduğunun (muhtemelen yüksek planlama gecikmesi veya kesinti devre dışı bırakma süresi) göstergesidir. Çıktının ucu, +/- 3 standart sapmanın üzerindeki değişkenliği vurguladığından özellikle faydalıdır.