วัดความล่าช้าของเสียง

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

วัดเวลาแฝงของเอาต์พุต

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

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

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

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

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

หากต้องการดำเนินการทดสอบนี้:

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

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

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

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

วัดความล่าช้าในการเดินทางไปกลับ

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

การทดสอบเสน

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

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

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

หากต้องการดำเนินการทดสอบนี้:

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

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

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

ดองเกิลลูปแบ็คเสียง

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

การวัดแบบไปกลับ

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

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

วัดเวลาแฝงของอินพุต

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

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

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

ลดความล่าช้า

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

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

เมื่อทำการทดสอบช่วงล่าง:

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

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

เครื่องมือ

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

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