MFCCs是一個在語音識別和說話者識別領(lǐng)域被廣泛運(yùn)用的特征,由Davis和Mermelstein在1980年提出,可以說從那以后,MFCCs就一直占據(jù)這聲音特征方面的state-of-the-art。這篇文章主要介紹MFCCs的提取過程以及為什么MFCCs對聲音特征的表達(dá)會這么好。
我們通過以下7步得到MFCC特征:
1、首先,對波形圖分幀。通常我們?nèi)?0-40m為一幀的寬度,例如我們?nèi)?0ms位一幀的寬度,對于一個44.1kHz采樣的信號,一幀就包含0.040*44100=1764個采樣點(diǎn),幀移通常去幀寬的二分之一,也就是20ms,這樣就允許沒兩幀之間有一半的overlap。這樣一來,第一幀就是從第一個采樣點(diǎn)到第1764個采樣點(diǎn),第二幀就是從第882個采樣點(diǎn)到第2646個采樣點(diǎn)...直到最后一個采樣點(diǎn),如果音頻長度不能被幀數(shù)整除,在最后補(bǔ)0 。對于一個30s的音頻文件,可以得到44100*30 / 882 = 1500幀。
2、對每一幀進(jìn)行加窗。加窗的目的是平滑信號,使用漢明窗加以平滑的話,相比于矩形窗函數(shù),會減弱FFT以后旁瓣大小以及頻譜泄露。
例如使用漢明窗(hamming window)對信號進(jìn)行加窗處理:
從上面的例子可以看出來,如果不進(jìn)行加窗,那么某一幀的結(jié)束值和下一幀的開始值會有一個gap(因?yàn)橛衞verlap),在頻譜圖上來看,峰值會變得比較“寬”,而加過hamming window的幀在頻譜圖上的峰值就會變得更加sharp也更容易辨認(rèn)。設(shè)加窗函數(shù)為h(n)。
3、對每一幀進(jìn)行離散傅里葉變化(DFT):
其中s(n)為波形信號,S(n)為幅度譜。
因?yàn)橛?/p>
設(shè)
即式(2)的另一種形式為:
所以其實(shí)DFT變換就是兩個“相關(guān)(correlation)”操作,一個是與頻率為k的cos序列相關(guān),一個是與頻率為k的sin序列相關(guān),然后兩者疊加就是與頻率k的正弦波相關(guān)的結(jié)果,如果得到的值很大,就表明信號包含頻率為k的能量很大。
4、計算功率譜:
例如,我們從一個1764個點(diǎn)的FFT計算得到功率譜以后,只保留前1764/2+1=883個系數(shù)。
5、計算Mel-spaced filterbank。
頻率和mel頻率之間的轉(zhuǎn)化公式為:
mel濾波器組是一組非線性分布的濾波器組,它在低頻部分分布密集,高頻部分分布稀疏,這樣的分布是為了更好得滿足人耳聽覺特性。
將這樣一組三角濾波器(例如128個)作用到一幀上,就將一個883維的向量轉(zhuǎn)化為128維的向量。
6、對上述128維的mel功率譜取log,得到128維的 log-mel filer bank energies。這樣做的原因是由于人耳對聲音的感知并不是線性的,用log這種非線性關(guān)系更好描述,另外,取完log以后才可以進(jìn)行倒譜分析。
7、離散余弦變換。對上述128維的向量進(jìn)行DCT,DCT和DFT類似,但是只使用實(shí)數(shù),不涉及復(fù)數(shù)運(yùn)算。
其中
引入ai是為了使ci正交化。將ci表示為矩陣形式:
這樣得到的C(n)矩陣中,較大的值都集中再靠近左上角的低能量部分,其余部分會產(chǎn)生大量的0或者接近0的數(shù),這樣,我們可以進(jìn)行進(jìn)一步數(shù)據(jù)壓縮。這也表明DCT有很好的能量聚集效應(yīng)。相比于傅里葉變換(FFT),離散余弦變換的結(jié)果沒有虛部,更好計算(DCT也可以理解為沒有虛部的FFT)。利于對于ASR任務(wù),通常取低13維的系數(shù)。
這樣我們就得到了13banks 的MFCC。
差分:
由于語音信號是時域連續(xù)的,分幀提取的特征信息只反應(yīng)了本幀語音的特性,為了使特征更能體現(xiàn)時域連續(xù)性,可以在特征維度增加前后幀信息的維度。常用的是一階差分和二階差分。
實(shí)際計算中則更為簡單,例如用python的librosa庫實(shí)現(xiàn):
a = [1 2 3 4 5 1 3 5 7]
b = liborsa.feature.delta(a, width=3)
b= [ 0.5? 1.? 1.? 1.? -1.5 -1.? 2.? 2.? 1. ]
例如對于a中的第一個5,b中對應(yīng)的值是前后兩個值的差值除以(寬度-1): (1-4)/2
二階差分則是對delta再做一次差分運(yùn)算。
參考資料:
http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf
http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/
http://mirlab.org/jang/books/audioSignalProcessing/speechFeatureMfcc.asp?title=12-2%20MFCC