Saya telah membaca sedikit demi sedikit secara online tetapi saya tidak bisa menyatukan semuanya. Saya memiliki beberapa latar belakang pengetahuan tentang sinyal / hal-hal DSP yang harus cukup prasyarat untuk ini. Saya tertarik akhirnya coding algoritma ini di Jawa tapi saya belum memahaminya sepenuhnya karena itulah saya di sini (itu dihitung sebagai matematika, kan?).
Begini menurut saya cara kerjanya seiring dengan kesenjangan dalam pengetahuan saya.
Mulailah dengan sampel pidato audio Anda, ucapkan file .wav, yang dapat Anda baca menjadi sebuah array. Sebut array ini , di mana berkisar dari (jadi sampel). Nilai sesuai dengan intensitas audio yang saya kira - amplitudo.
Pisahkan sinyal audio menjadi "bingkai" berbeda 10ms atau lebih di mana Anda menganggap sinyal ucapan "diam". Ini adalah bentuk kuantisasi. Jadi jika laju sampel Anda adalah 44.1KHz, 10ms sama dengan 441 sampel, atau nilai .
Lakukan transformasi Fourier (FFT demi komputasi). Sekarang apakah ini dilakukan pada seluruh sinyal atau pada setiap frame ? Saya pikir ada perbedaan karena secara umum transformasi Fourier melihat semua elemen sinyal, jadi bergabung dengan bergabung dengan di mana adalah frame yang lebih kecil. Ngomong-ngomong, katakanlah kita melakukan beberapa FFT dan berakhir dengan untuk sisa ini.
Pemetaan ke skala Mel, dan logging. Saya tahu cara mengubah angka frekuensi reguler ke skala Mel. Untuk setiap dari ( "x-axis" jika Anda akan mengizinkan saya), Anda dapat melakukan rumus di sini: http://en.wikipedia.org/wiki/Mel_scale . Tetapi bagaimana dengan "nilai-y" atau amplitudo ? Apakah mereka hanya tetap nilai yang sama tetapi bergeser ke tempat yang sesuai pada sumbu Mel (x-) yang baru? Saya melihat di beberapa kertas ada sesuatu tentang logging nilai aktual karena jika mana salah satu sinyal tersebut dianggap sebagai noise yang tidak Anda inginkan , operasi log pada persamaan ini mengubah noise multiplikatif menjadi noise tambahan, yang diharapkan dapat disaring (?).
Sekarang langkah terakhir adalah mengambil DCT Anda yang telah dimodifikasi dari atas (namun akhirnya diubah). Kemudian Anda mengambil amplitudo dari hasil akhir ini dan itu adalah MFCC Anda. Saya membaca sesuatu tentang membuang nilai frekuensi tinggi.
Jadi saya mencoba untuk benar-benar memahami cara menghitung orang-orang ini langkah demi langkah, dan jelas ada beberapa hal yang menghindarkan saya dari atas.
Juga, saya pernah mendengar tentang menggunakan "bank filter" (array band pass filter pada dasarnya) dan tidak tahu apakah ini mengacu pada pembuatan frame dari sinyal asli, atau mungkin Anda membuat frame setelah FFT?
Terakhir, ada sesuatu yang saya lihat tentang MFCC yang memiliki 13 koefisien?