ช่วยในการคำนวณ / ทำความเข้าใจเกี่ยวกับ MFCCs: ค่าสัมประสิทธิ์ของ Mel-Frequency


17

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

นี่คือวิธีที่ฉันคิดว่ามันทำงานร่วมกับช่องว่างในความรู้ของฉัน

  1. เริ่มต้นด้วยตัวอย่างเสียงพูดของคุณพูดไฟล์. WAV ที่คุณสามารถอ่านเป็นอาร์เรย์ได้ เรียกอาร์เรย์นี้ว่าโดยที่nมีช่วงตั้งแต่0 , 1 , , N - 1 ( ตัวอย่างNดังนั้น) ค่าที่สอดคล้องกับความเข้มของเสียงที่ฉันเดา - แอมพลิจูดx[n]n0,1,,N1N

  2. แยกสัญญาณเสียงออกเป็น "เฟรม" ที่แตกต่างกัน 10ms หรือมากกว่านั้นเมื่อคุณถือว่าสัญญาณเสียงพูดคือ "นิ่ง" นี่คือรูปแบบของการหาปริมาณ ดังนั้นหากอัตราตัวอย่างของคุณเป็น 44.1KHz, 10ms เท่ากับ 441 ตัวอย่างหรือค่าของ ]x[n]

  3. ทำการแปลงฟูริเยร์ (FFT เพื่อประโยชน์ในการคำนวณ) ทีนี้ทำสิ่งนี้กับสัญญาณทั้งหมดหรือในแต่ละเฟรมที่แยกกันของ ? ฉันคิดว่ามีความแตกต่างเพราะโดยทั่วไปการแปลงฟูริเยร์มองที่องค์ประกอบทั้งหมดของสัญญาณดังนั้นF ( x [ n ] ) F ( x 1 [ n ] )เข้าร่วมกับF ( x 2 [ n ] )เข้าร่วมกับ... F ( x N [ n ] )โดยที่xx[n]F(x[n])F(x1[n])F(x2[n])F(xN[n])เป็นเฟรมที่เล็กกว่า เอาล่ะสมมติว่าเราทำ FFT และจบลงด้วย X [ k ]สำหรับส่วนที่เหลือของสิ่งนี้xi[n]X[k]

  4. การทำแผนที่กับมาตราส่วนเมลและการบันทึก ฉันรู้วิธีแปลงตัวเลขความถี่ปกติเป็นระดับเมล สำหรับแต่ละของX [ k ] (ที่ "แกน x" ถ้าคุณจะให้ฉัน), คุณสามารถทำสูตรที่นี่: http://en.wikipedia.org/wiki/Mel_scale แต่ค่า "y-values" หรือแอมพลิจูดของX [ k ] เป็นอย่างไร? พวกเขายังคงค่าเดิม แต่เปลี่ยนเป็นจุดที่เหมาะสมบนแกน Mel (x-) ใหม่หรือไม่ ฉันเห็นในกระดาษมีเรื่องเกี่ยวกับการบันทึกค่าจริงของX [ k ]เพราะถ้าX [ k ] = A [ kkX[k]X[k]X[k]ซึ่งมีสัญญาณอย่างใดอย่างหนึ่งที่สันนิษฐานว่าเป็นเสียงที่คุณไม่ต้องการการดำเนินการบันทึกในสมการนี้จะเปลี่ยนเสียงหลายเสียงเป็นเสียงเสริมซึ่งหวังว่าจะสามารถกรองได้ (?)X[k]=A[k]B[k]

  5. ตอนนี้ขั้นตอนสุดท้ายคือการใช้ DCT ของแก้ไขแล้วของคุณจากด้านบน (อย่างไรก็ตามขั้นตอนสุดท้ายก็คือการแก้ไข) จากนั้นคุณนำแอมพลิจูดของผลลัพธ์สุดท้ายนี้และนั่นคือ MFCC ของคุณ ฉันอ่านบางอย่างเกี่ยวกับการทิ้งค่าความถี่สูงX[k]

ดังนั้นฉันจึงพยายามรีดวิธีการคำนวณพวกคนเหล่านี้ทีละขั้นและชัดเจนว่ามีบางสิ่งที่ทำให้ฉันหลงทางจากด้านบน

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

สุดท้ายมีบางสิ่งที่ฉันเห็นเกี่ยวกับ MFCCs ที่มี 13 สัมประสิทธิ์?


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

เนื่องจากก่อนหน้านี้คุณเคยถามคำถามเดียวกันกับ math.SE (และได้รับคำแนะนำว่า dsp.SE เป็นบ้านที่ดีกว่าสำหรับมัน) บางทีคุณควรลบคำถามใน math.SE
Dilip Sarwate

ฉันลบเวอร์ชันใน math.SE
YoungMoney

กวดวิชาที่ดีและ infotmative

1
เฮ้คุณพูดในคำถามของคุณว่า "การทำแผนที่กับเครื่องชั่ง Mel และการบันทึกฉันรู้วิธีการแปลงหมายเลขความถี่ปกติเป็นเครื่องชั่ง Mel" คุณช่วยฉันคำนวณส่วนนี้ได้ไหม เนื่องจากฉันมีเอาท์พุท FFt ของ x [k] = 1 * 184 แต่ตัวกรองผ่านแถบรูปสามเหลี่ยมของฉันตั้งไว้ที่ 20 * 3 แล้วฉันจะคูณทั้งสองได้อย่างไร ได้โปรด ASAp
Ayush Agrawal

คำตอบ:


25

เป็นขั้นเป็นตอน...

1. & 22 สิ่งนี้ถูกต้อง โปรดทราบว่าเฟรมมักจะทับซ้อนกันตัวอย่างเช่นเฟรม 0 เป็นตัวอย่าง 0 ถึง 440 เฟรม 1 คือตัวอย่าง 220 ถึง 660; เฟรม 2 เป็นตัวอย่าง 440 ถึง 880 และอื่น ๆ ... โปรดทราบด้วยว่าฟังก์ชั่นหน้าต่างจะถูกนำไปใช้กับตัวอย่างในเฟรม

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

4 . "การแมปกับมาตราส่วนเมล" นั้นทำให้เข้าใจผิดและนั่นอาจเป็นเหตุผลว่าทำไมคุณถึงสับสน คำอธิบายที่ดีกว่าสำหรับขั้นตอนนี้คือ: "คำนวณพลังงานสัญญาณผ่านธนาคารของฟิลเตอร์ที่ปรับให้เหมาะกับความถี่ในการหลอมละลาย" นี่คือวิธีการทำ เรามองว่ายังไม่มีข้อความ ความถี่ (ค่าที่ใช้กันทั่วไปคือ ยังไม่มีข้อความ=40) เว้นระยะเท่ากันตามระดับเมลระหว่าง 20 Hz (ด้านล่างของช่วงการได้ยิน) และความถี่ Nyquist ตัวอย่างที่ใช้งานได้จริง: สัญญาณจะถูกสุ่มตัวอย่างที่ 8kHz และเราต้องการ 40 ถังขยะ เนื่องจาก 4kHz (Nyquist) คือ 2250 mel ความถี่ศูนย์ตัวกรองของธนาคารจะเป็น: 0 mel, 2250/39 mel, 2 x 2250/39 mel .. 2250 mel

เมื่อกำหนดความถี่เหล่านี้แล้วเราจะคำนวณหาผลรวมถ่วงน้ำหนักของขนาด FFT (หรือพลังงาน) รอบความถี่เหล่านี้

ดูรูปต่อไปนี้แสดงถึงตัวกรองธนาคารที่มี 12 ถังขยะ:

Mel frequency filterbank พร้อม 12 ช่อง

ถังที่ 8 มีความถี่กลางประมาณ 2kHz พลังงานในถังขยะที่ 8 ได้มาจากการรวมพลังงาน FFT แบบถ่วงน้ำหนักใน 1600 ถึง 2800 Hz โดยประมาณ - โดยมีน้ำหนักสูงสุดที่ประมาณ 2kHz

หมายเหตุการติดตั้ง: ผลรวมของน้ำหนักจำนวนมากนี้สามารถทำได้ในการดำเนินการครั้งเดียว - การคูณเมทริกซ์ของ "ตัวกรองเมทริกซ์แบงค์กิ้ง" โดยเวกเตอร์พลังงาน FFT

ดังนั้นในขั้นตอนนี้เราจึงได้ "สรุป" สเปกตรัม FFT ให้เป็นชุดพลังงาน 40 (12 ในภาพประกอบ) แต่ละอันนั้นสอดคล้องกับช่วงความถี่ที่แตกต่างกัน เรานำบันทึกของค่าเหล่านี้

5 . ขั้นตอนต่อไปประกอบไปด้วยการบันทึก DCT ของลำดับการบันทึกพลังงาน 40 ชุด สิ่งนี้จะให้ค่า 40 ครั้งแรกK สัมประสิทธิ์เป็น MFCC (โดยปกติแล้ว K=13) ที่จริงแล้วสัมประสิทธิ์ DCT แรกนั้นคือผลรวมของพลังงานบันทึกทั้งหมดที่คำนวณในขั้นตอนก่อนหน้าดังนั้นจึงเป็นการวัดความดังของสัญญาณโดยรวมและไม่ค่อยมีข้อมูลมากนักเกี่ยวกับเนื้อหาสเปกตรัมที่แท้จริงของสัญญาณ สำหรับการรู้จำเสียงหรือแอปพลิเคชัน id ลำโพงที่ระบบต้องมีความทนทานต่อความแปรปรวนดัง


เพียงแค่คำถามสั้น ๆ เกี่ยวกับ Mel filterbank ความสูง / แอมพลิจูดมีตั้งแต่ 1.8 - 2 นี่เป็นเรื่องสำคัญหรือพวกเขาสามารถเป็นหน่วย (1) ความสูงได้หรือไม่?
YoungMoney

1
สิ่งนี้ไม่สำคัญ ผลกระทบของการใช้สูงสุด แอมพลิจูดที่ 1.0 vs 2.0 จะเปลี่ยนค่า log-energy เป็นค่าคงที่ในขั้นตอนที่ 4 เท่านั้นและจะส่งผลกระทบเฉพาะค่าสัมประสิทธิ์แรกในขั้นตอนที่ 5 (ซึ่งมักจะถูกละทิ้งไป) โปรดทราบว่าการใช้งานบางอย่างกำลังใช้การปรับสภาพพลังงานเพื่อให้ฟิลเตอร์กว้างขึ้นยิ่งแอมพลิจูดสูงสุดลดลง ( i.imgur.com/IOaLa.gif ) นี่อาจทำให้เกิดการเปลี่ยนแปลงประสิทธิภาพเล็กน้อยในแอปพลิเคชันการรับรู้ หากคุณดูการใช้งาน MFCC ที่ใช้จริงมีหลายรูปแบบที่แตกต่างกันในแต่ละขั้นตอน - bit.ly/ULatdL
pichenettes

เป็นหัวข้อเก่าที่นี่ แต่มีบางสิ่งที่ฉันต้องการถามเกี่ยวกับกราฟ หาก Nyquist เป็น 4kHz ทำไมตัวกรองที่ จำกัด ย่านความถี่นั้นเกินกว่าจุดที่ 4kHz ไม่เป็นไรสำหรับ MFCC โดยปกติแล้วคุณไม่ต้องการให้ตัวกรองผ่าน Nyquist หรือไม่ ฉันถูกไหม?
เฒ่า

2
คุณมีการอ้างอิงเกี่ยวกับสาเหตุที่ใช้ N = 40 Mel filterbank frequency (หรือ 26, ค่าทั่วไปอื่นที่ฉันเคยเห็น) ใช้?
James Owers

1
ที่ใดที่39 melมาจากการเป็นขั้นตอนที่ 4?
Gert Kommer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.