วิธีใดที่สามารถใช้เพื่อระบุและลบเสียงสะท้อนออกจากระบบเสียง


14

พื้นหลัง

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

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

ข้อสันนิษฐานของฉันคือกลุ่มต่างๆมีวิธีในการยกเลิกเสียงสะท้อน แต่พวกเขาทำได้อย่างไร

แนวทาง

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

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

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


1
Acoustic Echo Cancellation เป็นสาขาวิชาขนาดใหญ่ที่มีหนังสือหลายเล่มและงานวิจัยหลายทศวรรษในหัวข้อ นี่คือคำถามและคำตอบ SO หนึ่งหัวข้อ: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2 2

1
@ hotpaw2 ไม่แน่ใจว่าทำไมการยกเลิก Accho echo ในลิงก์Java ของคุณจึงไม่สามารถคลิกได้
Mark Booth

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

คำตอบ:


15

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

ตัวกรองแบบปรับได้

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

ป้อนคำอธิบายรูปภาพที่นี่

x[n]wnd^[n]d^[n]d[n]e[n]wnw[n]ne[n]wnwnd^[n]d[n]

การยกเลิกเสียงสะท้อน

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

ป้อนคำอธิบายรูปภาพที่นี่

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

wn

xn=(x[n],x[n1],,x[nN+1])T

Nwnx

wn=(w[0],w[1],,x[N1])T

y[n]=xn=wn

y[n]=xnTwn=xnwn

w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwnd[n]xnTxn

where μ is the adaptation step size such that 0μ2.

Real life applications and challenges

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

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

enter image description here

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


2
"หน้าที่ของตัวกรองการปรับตัวคือสัญญาณ" หรือไม่? คุณตั้งใจพูดสักคำ
endolith

@ endolith ขอบคุณ ฉันไม่สามารถคิดว่าเป็นวิธีที่ดีของการแก้ไขมันดังนั้นผมเคยเปลี่ยนแปลง คุณสามารถแก้ไขด้วยสิ่งที่น่าสนใจมากขึ้น =)
Phonon

3

ฉันไม่แน่ใจว่าจะทราบได้อย่างไรว่าการหน่วงเวลานั้นเกิดจากการสอบเทียบล่วงหน้าประเภทใด

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

ความต้องการของคุณคล้ายกับของ Shazam ในหลาย ๆ ทาง (คุณสมบัติจะต้องอยู่รอดด้วยอัลกอริธึมการบีบอัดที่ออกแบบมาสำหรับโทรศัพท์พวกเขายังผ่านไมโครโฟนคุณภาพต่ำ) ดังนั้นคุณอาจใช้คุณสมบัติเดียวกันได้ คุณอาจต้องการเพิ่มความละเอียดของเวลาด้วยค่าความละเอียดความถี่

นอกจากนี้ยังมีปัญหาว่าต้องปรับขนาดสัญญาณก่อนที่จะลบออก

การปรับขนาดสม่ำเสมอจะไม่แม่นยำพอ คุณจะต้องทำอะไรบางอย่างเช่นการประมาณการตอบสนองความถี่ด้วยตัวกรอง FIR จากนั้นส่งสัญญาณไมโครโฟน (ล่าช้า) ของคุณผ่านตัวกรองแบบกลับด้านก่อนที่จะลบมันออกจากสัญญาณที่ได้รับ


Shazam fingerprinting cannot produce accurate delay approximation. It uses many complex feature extraction processes for comparing audio samples, not all of which are time-based.
Phonon

@Phonon, Shazam may be using additional algorithms now, but the one in the linked paper is time-based and gives a good estimate of the delay.
finnw

Maybe something like cross-correlation of the sent and received spectrograms would tell you the delay. Should be resistant to effects of filtering and added noise
endolith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.