การวัดความหน่วงของเสียง

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

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

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

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

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

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

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

ในการดำเนินการทดสอบนี้:

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

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

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

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

การวัดความหน่วงแบบ Round-Trip

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

ทดสอบเสน่หา

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

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

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

ในการดำเนินการทดสอบนี้:

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

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

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

Audio Loopback Dongle

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

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

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

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

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

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

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

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

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

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

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

เมื่อทดสอบ underruns:

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

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

เครื่องมือ

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

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