ฉันกำลังอ่านบิตและชิ้นส่วนออนไลน์ แต่ฉันไม่สามารถรวมมันเข้าด้วยกันได้ ฉันมีความรู้พื้นฐานเกี่ยวกับสัญญาณ / สิ่ง DSP ซึ่งน่าจะเพียงพอสำหรับสิ่งนี้ ในที่สุดฉันสนใจที่จะเขียนอัลกอริทึมนี้ใน Java แต่ฉันยังไม่เข้าใจมันอย่างสมบูรณ์ซึ่งเป็นสาเหตุที่ฉันมาที่นี่ (นับเป็นคณิตศาสตร์ใช่ไหม)
นี่คือวิธีที่ฉันคิดว่ามันทำงานร่วมกับช่องว่างในความรู้ของฉัน
เริ่มต้นด้วยตัวอย่างเสียงพูดของคุณพูดไฟล์. WAV ที่คุณสามารถอ่านเป็นอาร์เรย์ได้ เรียกอาร์เรย์นี้ว่าโดยที่nมีช่วงตั้งแต่0 , 1 , … , N - 1 ( ตัวอย่างNดังนั้น) ค่าที่สอดคล้องกับความเข้มของเสียงที่ฉันเดา - แอมพลิจูด
แยกสัญญาณเสียงออกเป็น "เฟรม" ที่แตกต่างกัน 10ms หรือมากกว่านั้นเมื่อคุณถือว่าสัญญาณเสียงพูดคือ "นิ่ง" นี่คือรูปแบบของการหาปริมาณ ดังนั้นหากอัตราตัวอย่างของคุณเป็น 44.1KHz, 10ms เท่ากับ 441 ตัวอย่างหรือค่าของ ]
ทำการแปลงฟูริเยร์ (FFT เพื่อประโยชน์ในการคำนวณ) ทีนี้ทำสิ่งนี้กับสัญญาณทั้งหมดหรือในแต่ละเฟรมที่แยกกันของ ? ฉันคิดว่ามีความแตกต่างเพราะโดยทั่วไปการแปลงฟูริเยร์มองที่องค์ประกอบทั้งหมดของสัญญาณดังนั้นF ( x [ n ] ) ≠ F ( x 1 [ n ] )เข้าร่วมกับF ( x 2 [ n ] )เข้าร่วมกับ... F ( x N [ n ] )โดยที่xเป็นเฟรมที่เล็กกว่า เอาล่ะสมมติว่าเราทำ FFT และจบลงด้วย X [ k ]สำหรับส่วนที่เหลือของสิ่งนี้
การทำแผนที่กับมาตราส่วนเมลและการบันทึก ฉันรู้วิธีแปลงตัวเลขความถี่ปกติเป็นระดับเมล สำหรับแต่ละของX [ k ] (ที่ "แกน x" ถ้าคุณจะให้ฉัน), คุณสามารถทำสูตรที่นี่: http://en.wikipedia.org/wiki/Mel_scale แต่ค่า "y-values" หรือแอมพลิจูดของX [ k ] เป็นอย่างไร? พวกเขายังคงค่าเดิม แต่เปลี่ยนเป็นจุดที่เหมาะสมบนแกน Mel (x-) ใหม่หรือไม่ ฉันเห็นในกระดาษมีเรื่องเกี่ยวกับการบันทึกค่าจริงของX [ k ]เพราะถ้าX [ k ] = A [ kซึ่งมีสัญญาณอย่างใดอย่างหนึ่งที่สันนิษฐานว่าเป็นเสียงที่คุณไม่ต้องการการดำเนินการบันทึกในสมการนี้จะเปลี่ยนเสียงหลายเสียงเป็นเสียงเสริมซึ่งหวังว่าจะสามารถกรองได้ (?)
ตอนนี้ขั้นตอนสุดท้ายคือการใช้ DCT ของแก้ไขแล้วของคุณจากด้านบน (อย่างไรก็ตามขั้นตอนสุดท้ายก็คือการแก้ไข) จากนั้นคุณนำแอมพลิจูดของผลลัพธ์สุดท้ายนี้และนั่นคือ MFCC ของคุณ ฉันอ่านบางอย่างเกี่ยวกับการทิ้งค่าความถี่สูง
ดังนั้นฉันจึงพยายามรีดวิธีการคำนวณพวกคนเหล่านี้ทีละขั้นและชัดเจนว่ามีบางสิ่งที่ทำให้ฉันหลงทางจากด้านบน
นอกจากนี้ฉันเคยได้ยินเกี่ยวกับการใช้ "ตัวกรองธนาคาร" (อาเรย์ของตัวกรองผ่านแถบโดยทั่วไป) และไม่ทราบว่าสิ่งนี้หมายถึงการทำเฟรมจากสัญญาณเดิมหรือคุณอาจทำเฟรมหลังจาก FFT?
สุดท้ายมีบางสิ่งที่ฉันเห็นเกี่ยวกับ MFCCs ที่มี 13 สัมประสิทธิ์?