การวัดเวลาแฝงของเสียง

หน้านี้อธิบายวิธีการทั่วไปในการวัดเวลาแฝงของอินพุตและเอาต์พุต

การวัดค่า Latency ของเอาต์พุต

มีเทคนิคหลายอย่างที่ใช้ได้ในการวัดเวลาแฝงของเอาต์พุต โดยมีระดับความแม่นยำและความง่ายในการใช้งานที่แตกต่างกัน ดังอธิบายด้านล่าง ดู วงจรการทดสอบ สำหรับตัวอย่างสภาพแวดล้อมการทดสอบ

การทดสอบ LED และออสซิลโลสโคป

การทดสอบนี้วัดเวลาแฝงที่สัมพันธ์กับไฟ LED ของอุปกรณ์ หากอุปกรณ์ที่ใช้งานจริงของคุณไม่มีไฟ LED คุณสามารถติดตั้ง LED บนอุปกรณ์ต้นแบบของฟอร์มแฟคเตอร์ได้ เพื่อความแม่นยำที่ดียิ่งขึ้นในอุปกรณ์ต้นแบบที่มีวงจรเปิดโล่ง ให้เชื่อมต่อโพรบออสซิลโลสโคปหนึ่งตัวกับ LED โดยตรงเพื่อหลีกเลี่ยงเวลาแฝงของเซ็นเซอร์แสง

หากคุณไม่สามารถติดตั้ง LED บนอุปกรณ์ที่ใช้งานจริงหรืออุปกรณ์ต้นแบบได้ ให้ลองใช้วิธีแก้ปัญหาชั่วคราวต่อไปนี้:

  • ใช้พินอินพุต/เอาท์พุตวัตถุประสงค์ทั่วไป (GPIO) เพื่อจุดประสงค์เดียวกัน
  • ใช้ JTAG หรือพอร์ตการดีบักอื่น
  • ใช้แสงไฟหน้าจอ ซึ่งอาจมีความเสี่ยงเนื่องจากไฟแบ็คไลท์อาจมีเวลาแฝงที่ไม่สำคัญ และอาจส่งผลให้การอ่านเวลาแฝงที่ไม่ถูกต้อง

เพื่อทำการทดสอบนี้:

  1. เรียกใช้แอพที่กะพริบไฟ LED เป็นระยะพร้อมกับส่งสัญญาณเสียง

    หมายเหตุ: เพื่อให้ได้ผลลัพธ์ที่เป็นประโยชน์ สิ่งสำคัญคือต้องใช้ API ที่ถูกต้องในแอปทดสอบ เพื่อให้คุณได้ใช้เส้นทางเอาต์พุตเสียงที่รวดเร็ว ดู การออกแบบเพื่อลดเวลาในการตอบสนอง สำหรับพื้นหลัง

  2. วางเซ็นเซอร์วัดแสงไว้ข้าง LED
  3. เชื่อมต่อโพรบของออสซิลโลสโคปแบบสองช่องสัญญาณเข้ากับแจ็คหูฟังแบบมีสาย (เอาต์พุตสาย) และเซ็นเซอร์วัดแสง
  4. ใช้ออสซิลโลสโคปเพื่อวัดความแตกต่างของเวลาระหว่างการสังเกตสัญญาณเอาต์พุตสายกับสัญญาณเซ็นเซอร์วัดแสง

ความแตกต่างของเวลาคือเวลาแฝงของเอาต์พุตเสียงโดยประมาณ โดยสมมติว่าเวลาแฝง LED และเวลาแฝงของเซ็นเซอร์แสงเป็นศูนย์ทั้งคู่ โดยทั่วไปแล้ว LED และเซ็นเซอร์วัดแสงแต่ละตัวจะมีเวลาแฝงที่ค่อนข้างต่ำในลำดับที่หนึ่งมิลลิวินาทีหรือน้อยกว่า ซึ่งต่ำพอที่จะละเว้นได้

การวัดเวลาแฝงระหว่างการเดินทาง

เวลาแฝงไปกลับ คือผลรวมของเวลาแฝงของเอาต์พุตและเวลาแฝงของอินพุต

การทดสอบเสน

การทดสอบเวลาแฝงที่ง่ายที่สุดวิธีหนึ่งคือการทดสอบการตอบสนองด้วยเสียง (เอฟเฟกต์ Larsen) นี่เป็นการวัดคร่าวๆ ของเอาต์พุตรวมและเวลาแฝงของอินพุตโดยการกำหนดเวลาลูปการตอบสนองของอิมพัลส์ การทดสอบนี้ไม่ค่อยมีประโยชน์สำหรับการวิเคราะห์แบบละเอียดด้วยตัวมันเองเนื่องจากลักษณะของการทดสอบ แต่อาจมีประโยชน์สำหรับการสอบเทียบการทดสอบอื่นๆ และสำหรับการกำหนดขอบเขตบน

วิธีนี้ไม่แบ่งเวลาของส่วนประกอบ ซึ่งเป็นสิ่งสำคัญเมื่อเวลาแฝงของเอาต์พุตและเวลาแฝงของอินพุตไม่ขึ้นต่อกัน ดังนั้นวิธีนี้จึงไม่แนะนำสำหรับการวัดค่าเวลาแฝงของเอาต์พุตที่แม่นยำหรือค่าเวลาแฝงอินพุตแบบแยกส่วน แต่อาจมีประโยชน์สำหรับการสร้างค่าประมาณคร่าวๆ

เวลาแฝงของเอาต์พุตไปยังลำโพงในอุปกรณ์อาจมากกว่าเวลาแฝงของเอาต์พุตไปยังขั้วต่อชุดหูฟังอย่างมาก นี่เป็นเพราะการแก้ไขและการป้องกันลำโพง

เพื่อทำการทดสอบนี้:

  1. เรียกใช้แอปที่บันทึกเสียงจากไมโครโฟนและเล่นข้อมูลที่บันทึกไว้ผ่านลำโพงทันที
  2. สร้างเสียงจากภายนอก เช่น การแตะดินสอด้วยไมโครโฟน เสียงรบกวนนี้สร้างลูปป้อนกลับ อีกทางหนึ่งสามารถฉีดแรงกระตุ้นเข้าไปในลูปโดยใช้ซอฟต์แวร์
  3. วัดเวลาระหว่างพัลส์ป้อนกลับเพื่อรับผลรวมของเวลาแฝงของเอาต์พุต เวลาแฝงอินพุต และโอเวอร์เฮดของแอปพลิเคชัน

ต่อไปนี้คือแหล่งข้อมูลบางส่วนในการรับแอปสำหรับการทดสอบ Larsen:

  • แอป Dr. Rick O'Rang loopback เป็นแอป Android สำหรับการทดสอบการตอบสนองด้วยเสียง คุณสามารถ ดาวน์โหลดแอปจาก Google Play หรือ รับซอร์สโค้ดจาก GitHub
  • เรายังเผยแพร่ตัวอย่างการใช้งานที่ slesTestFeedback.cpp นี่คือแอปบรรทัดคำสั่งและสร้างขึ้นโดยใช้สภาพแวดล้อมการสร้างแพลตฟอร์ม อย่างไรก็ตาม ควรใช้โค้ดสำหรับสภาพแวดล้อมอื่นๆ อย่างตรงไปตรงมา คุณจะต้องใช้รหัส FIFO ที่ไม่ปิดกั้น ซึ่งอยู่ในไลบรารี audio_utils

Audio Loopback Dongle

ด็องเกิลลูปแบ็คออดิโอ Dr. Rick O'Rang มีประโยชน์สำหรับการวัดเวลาแฝงแบบไปกลับผ่านขั้วต่อชุดหูฟัง รูปภาพด้านล่างแสดงผลของการฉีดแรงกระตุ้นเข้าไปในลูปหนึ่งครั้ง จากนั้นปล่อยให้ลูปป้อนกลับแกว่งไปมา ระยะเวลาของการแกว่งคือเวลาแฝงแบบไปกลับ ไม่ได้ระบุอุปกรณ์เฉพาะ การเปิดตัวซอฟต์แวร์ และเงื่อนไขการทดสอบที่นี่ ผลลัพธ์ที่แสดงไม่ควรถูกคาดการณ์

วัดไป-กลับ

รูปที่ 1 การวัดแบบไปกลับ

คุณอาจต้องถอดสาย USB ออกเพื่อลดสัญญาณรบกวน และปรับระดับเสียงเพื่อให้ได้การสั่นที่เสถียร

การวัดค่า Latency ของอินพุต

เวลาแฝงของอินพุตวัดได้ยากกว่าเวลาแฝงของเอาต์พุต การทดสอบต่อไปนี้อาจช่วยได้

วิธีหนึ่งคือ กำหนดเวลาแฝงของเอาต์พุตก่อนโดยใช้วิธี LED และออสซิลโลสโคป จากนั้นใช้การทดสอบการตอบสนองด้วยเสียง (Larsen) เพื่อกำหนดผลรวมของเวลาแฝงของเอาต์พุตและเวลาแฝงของอินพุต ความแตกต่างระหว่างการวัดทั้งสองนี้คือเวลาแฝงของอินพุต

อีกเทคนิคหนึ่งคือการใช้พิน GPIO บนอุปกรณ์ต้นแบบ ภายนอก ให้พัลส์อินพุต GPIO พร้อมกันกับที่คุณแสดงสัญญาณเสียงไปยังอุปกรณ์ เรียกใช้แอพที่เปรียบเทียบความแตกต่างของเวลาที่มาถึงของสัญญาณ GPIO และข้อมูลเสียง

ลดเวลาในการตอบสนอง

เพื่อให้ได้เวลาแฝงของเสียงต่ำ ให้ความสนใจเป็นพิเศษทั่วทั้งระบบในการตั้งเวลา การจัดการขัดจังหวะ การจัดการพลังงาน และการออกแบบไดรเวอร์อุปกรณ์ เป้าหมายของคุณคือการป้องกันไม่ให้ส่วนใด ๆ ของแพลตฟอร์มบล็อกเธรดเสียง SCHED_FIFO เป็นเวลานานกว่าสองสามมิลลิวินาที การนำแนวทางที่เป็นระบบมาใช้จะช่วยลดเวลาในการตอบสนองของเสียงและได้รับประโยชน์จากประสิทธิภาพโดยรวมที่คาดการณ์ได้มากขึ้น

เมื่อเกิดขึ้น เสียงอันเดอร์รัน มักจะตรวจพบได้เฉพาะภายใต้เงื่อนไขบางประการหรือเฉพาะช่วงการเปลี่ยนภาพเท่านั้น ลองเน้นที่ระบบโดยเปิดแอปใหม่และเลื่อนดูหน้าจอต่างๆ อย่างรวดเร็ว แต่พึงระวังว่าเงื่อนไขการทดสอบบางอย่างนั้นกดดันมากจนเกินเป้าหมายการออกแบบ ตัวอย่างเช่น การรับรายงานข้อบกพร่องทำให้ระบบมีภาระงานมหาศาลจนอาจยอมรับได้หากมีอันเดอร์รันในกรณีนั้น

เมื่อทำการทดสอบอันเดอร์รัน:

  • กำหนดค่า DSP ใดๆ หลังจากตัวประมวลผลแอปเพื่อเพิ่มเวลาแฝงให้น้อยที่สุด
  • ทำการทดสอบภายใต้สภาวะต่างๆ เช่น การเปิดหรือปิดหน้าจอ, เสียบปลั๊กหรือถอดปลั๊ก USB, เปิดหรือปิด WiFi, เปิดหรือปิดบลูทูธ และเปิดหรือปิดวิทยุโทรศัพท์และข้อมูล
  • เลือกเพลงที่ค่อนข้างเงียบที่คุณคุ้นเคย และเพลงที่ฟังง่าย
  • ใช้หูฟังแบบมีสายเพื่อเพิ่มความไว
  • ให้ตัวเองได้พักบ้างจะได้ไม่เกิดอาการ "หูเมื่อยล้า"

เมื่อคุณพบสาเหตุพื้นฐานของอันเดอร์รันแล้ว ให้ลดจำนวนบัฟเฟอร์และขนาดเพื่อใช้ประโยชน์จากสิ่งนี้ แนวทางอย่างกระตือรือร้นในการลดจำนวนและขนาดของบัฟเฟอร์ ก่อนที่จะ วิเคราะห์อันเดอร์รันและแก้ไขสาเหตุของอันเดอร์รันส่งผลให้เกิดความหงุดหงิดเท่านั้น

เครื่องมือ

systrace เป็นเครื่องมือเอนกประสงค์ที่ยอดเยี่ยมสำหรับการวินิจฉัยข้อบกพร่องด้านประสิทธิภาพระดับระบบ

เอาต์พุตของ dumpsys media.audio_flinger ยังมีส่วนที่มีประโยชน์ที่เรียกว่า "สถิติการเคลื่อนไหวอย่างง่าย" ข้อมูลนี้มีสรุปความแปรปรวนของเวลาที่ผ่านไปสำหรับมิกซ์เสียงแต่ละรายการและรอบ I/O ตามหลักการแล้ว การวัดเวลาทั้งหมดควรเท่ากับค่าเฉลี่ยหรือรอบเวลาที่ระบุ หากคุณเห็นค่าต่ำสุดหรือสูงสุดที่ต่ำมาก แสดงว่าเกิดปัญหาขึ้น น่าจะเป็นเวลาแฝงในการจัดกำหนดการที่สูงหรือเวลาปิดใช้งานการขัดจังหวะ ส่วน ท้าย ของเอาต์พุตมีประโยชน์อย่างยิ่ง เนื่องจากเน้นความแปรปรวนที่เกิน +/- 3 ส่วนเบี่ยงเบนมาตรฐาน