ฉันจะตรวจจับเสียงนกหวีด, ป๊อปและเสียงอื่น ๆ ในอินพุตเสียงสดได้อย่างไร?


9

ฉันได้อ่านคำถามมากมายเกี่ยวกับ SO และตรงไปตรงมาพวกเขาแต่ละคนไม่ได้อธิบายวิธีการเฉพาะเกี่ยวกับเรื่องนี้ บางคนพูดว่า "ทำ FFT" และบางคนก็พูดว่า "การข้ามศูนย์" เป็นต้น แต่ฉันก็แค่เข้าใจว่าอินพุตเสียงดิจิตอลนั้นประกอบไปด้วยแอมพลิจูดสำหรับความถี่เฉพาะและดี .. ไม่ค่อยรู้เท่าไหร่ เกินมัน

ตอนนี้ฉันรู้ทฤษฎี Nyquist, ความถี่, แอมพลิจูด, อนุกรมฟูริเยร์และอื่น ๆ และเมื่อ 2-3 ปีที่แล้วตอนที่ฉันทำในหลักสูตรมหาวิทยาลัยของฉันในบางภาคการศึกษา แต่ก่อนหน้านั้นเราไม่ได้สอนการใช้ฟูริเยร์ในโลกแห่งความเป็นจริงและฉันก็ไม่อยากที่จะขุดเรื่องมากไปกว่าการเรียนรู้มากพอที่จะผ่านเรื่องไป แต่ตอนนี้ฉันจะต้องใช้ทุกอย่าง

นี่คือภาพรวมของเสียงที่ฉันพยายามตรวจจับ:

กราฟที่ไม่ซ้ำของสแน็ปนิ้วและสวิตช์ไฟเปิด / ปิด

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

ฉันต้องการขั้นตอนง่าย ๆ รายการคำสั่งไม่คลุมเครือ - ฉันสามารถ google ศัพท์ที่ฉันจะไม่เข้าใจ

เช่นนี้อาจ? -

  1. รับข้อมูลเสียงอินพุต

  2. พลอตโตกราฟ

  3. รับกราฟกราฟสำหรับเสียงที่คุณต้องการตรวจจับในสภาพแวดล้อมที่ไม่มีเสียง

  4. ศึกษากราฟนั้น - วาดลักษณะเฉพาะของเสียงนั้น

  5. สร้างฟังก์ชั่นบางอย่างที่สามารถตรวจจับลักษณะเฉพาะเหล่านั้นในฟีดเสียงสดโดยใช้คุณสมบัติของเสียงที่พบใน (4)

  6. หากพบการแข่งขันดี - งานเสร็จแล้ว

  7. ขัดอัลกอริธึมเพื่อกำจัดเชิงลบที่ผิดพลาด

ฉันสับสนที่ไหน - ฉันจะไปประมาณ 3,4,5 อย่างไร โดยเฉพาะอย่างยิ่ง 3 และ 4 เนื่องจากฉันกำลังสร้างซอฟต์แวร์ที่ผู้ใช้จะสามารถบันทึกเสียงใด ๆ เป็นสัญญาณอินพุตท่าทางที่จะใช้ในภายหลังฉันต้องการให้ระบบของฉันสามารถบันทึกเสียงใด ๆ และจับคู่กับเสียงสด ฟีดเพื่อตรวจจับท่าทางเสียงนั้น เช่นบอกว่าไอหรือนิ้วหักหรือผิวปากหรือตบมือ หรือพูดพยัญชนะ - หรือหรือหรือZเพียงเกี่ยวกับเสียงใด ๆABXZ

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

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

และดังนั้นลักษณะของส่วนนั้นจะถูกบันทึกเป็นข้อมูลท่าทางของเสียงนั้นซึ่งจะถูกใช้เพื่อตรวจจับเสียงนั้นในฟีดเสียงสดในภายหลัง

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

และขออภัยถ้ามันยาว


1
จากความอยากรู้ spectrogram นั้นทำบนโทรศัพท์หรือแท็บเล็ตหรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถบอกชื่อแอพได้ มันดูเท่ห์จริงๆ เกี่ยวกับคำถามของคุณฉันคิดว่าใบสมัครของคุณคล้ายกับหัวข้อ / ภารกิจในการจดจำคำที่แยก คุณอาจได้รับแนวคิดและแรงบันดาลใจมากมายจาก googling ส่วนที่ยากคือไม่จดจำท่าทางในชุดท่าทางขนาดเล็กที่สัมพันธ์กันส่วนที่ยากคือการกรองสิ่งที่ไม่ใช่ท่าทาง
niaren

นี่คือแอป: play.google.com/store/apps/… และขอขอบคุณสำหรับมุมมองของคุณ แต่ฉันต้องการให้คุณบอกวิธีการตรวจสอบไม่ใช่คำ แต่ฟัง (อย่างน้อยตอนนี้), เช่นผิวปาก, ป๊อป, ตบมือ, ฯลฯ ฉันทำงานใน Python
bad_keypoints

1
น่าเสียดายที่สิ่งนี้ยังคงเป็นพื้นที่วิจัย ฉันไม่ทราบว่าจะมีใครแก้ปัญหานี้โดยเฉพาะ
Bjorn Roche

คำตอบ:


2

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

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

ดังนั้นพารามิเตอร์บางอย่างที่คุณสามารถหาได้ ได้แก่ :

  • อัตราการข้ามศูนย์
  • เซนทรอยด์ความถี่
  • ซองจดหมาย (อันที่จริงแล้วเป็นชุดของพารามิเตอร์รวมถึงเช่นเวลาโจมตี)
  • ซองจดหมายสเปกตรัม
  • สมดุลฮาร์มอนิคคู่ / คี่
  • voiciness
  • สนามพื้นฐาน

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


คำตอบของคุณเป็นสิ่งที่ดี แต่โดยทั่วไปฉันขอให้เรียงลำดับการจับคู่เสียงของผู้ใช้กับเสียงที่เขาทำภายหลังเพื่อใช้ซอฟต์แวร์ของฉัน ชอบสิ่งที่คล้ายคลึงกัน สมมติว่าผู้ใช้สร้างเสียงประเภท A, B และ C ที่แตกต่างกันและลักษณะของเสียงเหล่านี้จะถูกเก็บไว้เป็น C_A, C_B และ C_C ตามลำดับ
bad_keypoints

เทคนิคยังคงเหมือนเดิม: 1. หาค่าพารามิเตอร์ที่คุณจะวัด 2. วัดพวกมัน 3. ใช้สถิติเพื่อเรียนรู้สิ่งที่ทำให้แต่ละเสียงแตกต่างกัน 4. ใช้ข้อมูลนั้นเพื่อจัดหมวดหมู่
Bjorn Roche

นั่นคือสิ่งที่ฉันคิด แต่ฉันเดาว่าฉันจะต้องดูว่าพารามิเตอร์ใดจากรายการที่ดีที่คุณให้มาฉันจะต้องทำเครื่องหมายเพื่อให้ได้เสียงที่ไม่ดี
bad_keypoints

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

นอกจากนี้บางคนในรายชื่อผู้รับจดหมาย music-dsp ( music.columbia.edu/cmc/music-dsp ) อาจมีคำแนะนำอื่น ๆ
Bjorn Roche

0

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


0

ฉันคิดว่าคำแนะนำของ Bjorn นั้นดีมาก แต่ฉันต้องการให้ข้อมูลเพิ่มเติม จากคำอธิบายของคุณสิ่งนี้ฟังดูคล้ายกับปัญหาการระบุเสียงต่ำ มีการวิจัยบางอย่างในเรื่องนี้ในบริบทของดนตรีคอมพิวเตอร์ (การระบุเครื่องมือต่าง ๆ เป็นสิ่งที่มีประโยชน์ที่จะทำและบอกความแตกต่างระหว่าง snap และ clap เป็นเพราะเสียงต่ำของ) วิลเลียมเบรนต์ได้ทำการวิจัยบางอย่างในพื้นที่นี้ (มองหา timbreID บนหน้าของเขา) และสร้างซอฟต์แวร์บางอย่างเพื่อใช้ใน Pure Data ในแต่ละสถานการณ์ที่คุณกำลังมองหาเหตุการณ์ที่เฉพาะเจาะจงดังนั้นการแบ่งส่วนอัตโนมัติโดยการตรวจจับการโจมตีจะเป็นความคิดที่ดี เนื่องจากคุณกำลังใช้ STFT อยู่แล้วการพิจารณาการโจมตีจึงไม่ต้องใช้งานเพิ่มเติมมากนัก (ดูการตรวจจับการโจมตี Spectral Flux) โครงร่างระบบอาจเป็นเช่นนี้:

การอบรม

  • กำหนดคุณสมบัติที่เหมาะสม (เช่นอัตราการข้ามศูนย์, สเปกตรัมเซนทรอยด์, MFCC's)
  • ตรวจจับการโจมตี
  • คำนวณคุณสมบัติเหล่านี้ในอินพุตเสียง (การบันทึกท่าทางของคุณ)
  • เก็บฐานข้อมูลของการคำนวณคุณสมบัติ คุณจะต้องตรวจสอบว่านี่เป็นสถานการณ์การฝึกอบรมภายใต้การดูแลหรือไม่ดูแล ตัวอย่างเช่นอย่าระบุผู้ใช้ไว้ล่วงหน้าว่า snap เป็น "sound 1" และ clap คือ "sound 2" หรือระบบของคุณพยายามจัดกลุ่มสิ่งเหล่านี้หลังการฝึกอบรม

การจัดหมวดหมู่

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

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

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


ฉันจะตรวจจับการโจมตีโดยตรวจพบการเปลี่ยนแปลงอย่างฉับพลันในข้อมูลเสียงที่เข้ามา ว่าควรจะทำงาน ฉันกำลังตรวจจับจุดเริ่มต้นและจุดสิ้นสุดของท่าทางที่จะจัดเก็บ
bad_keypoints

ใช่ว่าส่วนใหญ่ควรทำงาน เหตุผลเดียวที่ฉันแนะนำ Spectral Flux ก็คือเพราะคุณกำลังจะเข้าสู่โหมด STFT หากคุณคาดหวังว่าสภาพแวดล้อมที่เงียบสงบน่าจะเป็นสิ่งที่ดีสำหรับแอมพลิจูดขั้นพื้นฐาน
greatscott
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.