ตัวกรองสัญญาณรบกวนเสียงพูดของมนุษย์


17

ไม่มีใครรู้ของตัวกรองเพื่อลดทอนคำพูด? ฉันกำลังเขียนซอฟต์แวร์รู้จำเสียงพูดและต้องการกรองทุกอย่างยกเว้นคำพูดของมนุษย์ สิ่งนี้จะรวมถึงเสียงพื้นหลังเสียงที่เกิดจากไมโครโฟนเส็งเคร็งหรือแม้แต่เพลงประกอบ ฉันได้ติดตั้งตัวกรองคำสั่งแรกแล้วซึ่งชดเชยการแผ่พลังงาน 6 เดซิเบล แต่ฉันยังคงได้ยินเสียงรบกวนอยู่ ฉันคิดว่าจะใช้ตัวกรอง low-pass แต่ฉันรู้สึกไม่ดีเกี่ยวกับการทำเช่นนั้นด้วยเหตุผลสองประการ:

  1. ฉันไม่ทราบว่า low-pass pre-filter จะรบกวนการประมวลผลคำพูดที่เหลือหรือไม่ แม้ว่าหูของมนุษย์จะสามารถตรวจจับเสียงที่ต่ำกว่า 20 kHz แต่ฉันไม่ต้องการที่จะกำจัดฮาร์มอนิกที่มีลำดับสูงขึ้นซึ่งอาจจำเป็นในการประมวลผลคำพูด (แม้ว่าฉันไม่รู้ว่านี่เป็นกรณีหรือไม่ก็ตาม) ฉันไม่ต้องการรับโอกาสใด ๆ )

  2. ฉันเข้าใจว่าการกระตุ้นของพยัญชนะบางตัว (เช่น f, h และ s) เป็นเสียงสีขาวเกือบทั้งหมด ฉันไม่ต้องการใช้ตัวกรองเสียงรบกวนซึ่งจะขจัดเสียงรบกวนที่ดีดังนั้นพูด

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


ฉันคิดว่า ฉันจะเปิดทิ้งไว้เพียงเพราะฉันเห็นคำถามที่คล้ายกัน (ตัวกรองและการประมวลผลเสียง) ที่นี่ซึ่งตอบถูกดี
Zetta Suro


Rule of thumb: หากคุณต้องการทราบวิธีการใช้อัลกอริทึม DSP ที่กำหนดเช่นในภาษาใดภาษาหนึ่งหรือบนแพลตฟอร์มเฉพาะมันเป็นหัวข้อสำหรับ SO หากเป็นคำถามเกี่ยวกับอัลกอริทึม / เทคนิค DSP ที่ไม่มีมุมการเขียนโปรแกรมเฉพาะมันเกือบจะแน่นอนอยู่ใน DSP.SE
พอล R

Gotcha คุณย้ายที่นี่หรือไม่ ถ้าเป็นเช่นนั้นขอบคุณ ฉันไม่สามารถหาวิธีโยกย้ายได้ดังนั้นฉันจึงลงเอยถามที่นี่อีกครั้ง
Zetta Suro

ไม่ใช่ฉัน - ฉันตั้งค่าสถานะแล้วถามว่าผู้ดูแลสามารถย้ายได้หรือไม่ดังนั้นฉันจึงเดาว่าหนึ่งใน TPTB นั้นทำได้ (ขอบคุณใครก็ตามที่เป็น!)
พอล R

คำตอบ:


8

ช่องทางการสื่อสารด้วยเสียงพูดที่ใช้ในโทรศัพท์มักมีการตอบสนองความถี่ 300 Hz ถึง 3 kHz แม้ว่าสิ่งนี้จะปฏิเสธพลังงานจำนวนมากในการพูดปกติ แต่ความสามารถในการเข้าใจยังคงดีอยู่ - ปัญหาหลักน่าจะเป็นว่าพยัญชนะที่มีตัวตนบางตัวเช่น "p" และ "t" นั้นสามารถแยกแยะได้ยากโดยไม่มีส่วนประกอบความถี่สูง .

ดังนั้นคุณอาจกำลังมองหา "จุดที่น่าสนใจ" อยู่ระหว่างการใช้แบนด์วิดท์ 20 Hz - 20 kHz เต็มรูปแบบซึ่งโดยทั่วไปแล้วจะพบในเครื่องเสียงสำหรับผู้บริโภคและการกรองที่ก้าวร้าวที่สุดที่ใช้สำหรับการส่งเสียง (ดูด้านบน) ฉันขอแนะนำให้เริ่มต้นด้วยตัวกรอง bandpass ตั้งแต่ 50 Hz ถึง 8 kHz มันอาจจะปรับปรุง SNR เพียงไม่กี่เดซิเบลที่ดีที่สุด แต่อาจช่วยได้โดยเฉพาะถ้าคุณมีเสียงรบกวนจากพื้นหลังที่มีความถี่สูงมาก


ขอบคุณ! เพื่อนของฉันแนะนำช่องเสียงจริง แต่ฉันสงสัยว่ามันจะลดทอนพลังงานมากเกินไปในพยัญชนะบางตัว ฉันจะลอง 50 Hz ถึง 8 kHz และดูว่ามันทำงานอย่างไร!
Zetta Suro

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

5

การใช้ตัวกรอง pass band ที่ตรงกับแบนด์วิดท์ของเสียงพูดจะช่วยได้

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

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

กรอบการทำงานที่ดีคือการกรองด้วย Wiener ดู Benaroya และคณะ "การแยกแหล่งเซ็นเซอร์เดี่ยวตามการกรอง Wiener และ STFT หลายหน้าต่าง" (อ่านหัวข้อที่ 1 & 2 ไม่ต้องกังวลกับสิ่งที่รวมอยู่ด้วยเว้นแต่ว่าคุณต้องการมันจริงๆ) กล่าวโดยย่อคือคุณคำนวณ STFT ของสัญญาณของคุณและสำหรับแต่ละเฟรม STFT คุณพยายามรับค่าประมาณของสเปกตรัมเสียงและคลื่นความถี่เสียงและคุณใช้การกรอง Wiener เพื่อกู้คืนการประมาณค่าความถี่คลื่นเสียงที่ดีที่สุด ( คล้ายกับ "soft-masking" สเปกตรัม)

ขณะนี้ปัญหาของคุณมีดังต่อไปนี้: กำหนดเฟรม STFT ประเมินคำพูดและองค์ประกอบเสียงจากมัน วิธีที่ง่ายกว่าที่อธิบายไว้ในบทความโดย Benaroya คือผ่าน Vector-quantization - ใช้เวลาหลายชั่วโมงในการพูดโดยผู้พูดหลายคนคำนวณ STFT เรียกใช้ LBG เพื่อหา codebook ที่มีกรอบคำพูดปกติ 512 หรือ 1024; ทำสิ่งเดียวกันสำหรับเสียง ตอนนี้ให้กรอบสัญญาณอินพุตของคุณฉายภาพแบบไม่ลบ (ขั้นตอนการไล่ระดับสีแบบทวีคูณอธิบายไว้ในกระดาษ) ไปยังฐานเสียงพูดและเสียงรบกวนและคุณจะได้รับการประมาณเสียงและเสียงรบกวนของคุณ หากคุณไม่ต้องการจัดการกับสิ่งที่ไม่ต้องการฉายให้ใช้เพื่อนบ้านที่อยู่ใกล้ที่สุด นี่เป็นสิ่งที่ง่ายที่สุดที่อาจทำงานได้ในแผนก "การแยกแหล่งเซ็นเซอร์เดียว"

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


1

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

ICA นั้นคล้ายกับ PCA (การวิเคราะห์องค์ประกอบหลัก) แต่แทนที่จะเพิ่มความแปรปรวนของแกนหลักการให้ได้มากที่สุดมันจะเพิ่มความเป็นอิสระสูงสุด มีการใช้งานหลายอย่างของ ICA ที่ควรเชื่อมต่อกับสภาพแวดล้อมการเข้ารหัสที่คุณใช้


4
ICA ต้องการสัญญาณอินพุตมากเท่าที่มีแหล่งที่มาเพื่อแยก ในการปฏิเสธเสียงพูดเราเหลือเพียงสัญญาณเดียวเท่านั้นและ ICA จึงไม่มีความช่วยเหลือ
pichenettes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.