วัดเวลาในการตอบสนองของเสียง

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

วัดเวลาในการตอบสนองของเอาต์พุต

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

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

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

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

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

วิธีทำการทดสอบมีดังนี้

  1. เรียกใช้แอปที่กะพริบ LED เป็นระยะๆ ขณะส่งออกเสียง

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

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

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

วัดเวลาในการตอบสนองแบบไปกลับ

เวลาในการตอบสนองในการรับส่งข้อมูลคือผลรวมของเวลาในการตอบสนองของเอาต์พุตและเวลาในการตอบสนองของอินพุต

การทดสอบ Larsen

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

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

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

วิธีทำการทดสอบมีดังนี้

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

แหล่งข้อมูลบางส่วนสำหรับการรับแอปสําหรับการทดสอบ Larsen มีดังนี้

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

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

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

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

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

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

วัดเวลาในการตอบสนองต่ออินพุต

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

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

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

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

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

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

เมื่อทดสอบเวลาต่ำกว่าที่คาดไว้

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

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

เครื่องมือ

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

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