MFCCs是一個在語音識別和說話者識別領(lǐng)域被廣泛運用的特征欠拾,由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個采樣點毒费,幀移通常去幀寬的二分之一,也就是20ms愈魏,這樣就允許沒兩幀之間有一半的overlap觅玻。這樣一來,第一幀就是從第一個采樣點到第1764個采樣點培漏,第二幀就是從第882個采樣點到第2646個采樣點...直到最后一個采樣點溪厘,如果音頻長度不能被幀數(shù)整除,在最后補(bǔ)0 牌柄。對于一個30s的音頻文件畸悬,可以得到44100*30 / 882 = 1500幀。
2珊佣、對每一幀進(jìn)行加窗蹋宦。加窗的目的是平滑信號披粟,使用漢明窗加以平滑的話,相比于矩形窗函數(shù)冷冗,會減弱FFT以后旁瓣大小以及頻譜泄露守屉。
例如使用漢明窗(hamming window)對信號進(jìn)行加窗處理:
從上面的例子可以看出來,如果不進(jìn)行加窗贾惦,那么某一幀的結(jié)束值和下一幀的開始值會有一個gap(因為有overlap)胸梆,在頻譜圖上來看,峰值會變得比較“寬”须板,而加過hamming window的幀在頻譜圖上的峰值就會變得更加sharp也更容易辨認(rèn)碰镜。設(shè)加窗函數(shù)為h(n)。
3习瑰、對每一幀進(jìn)行離散傅里葉變化(DFT):
其中s(n)為波形信號绪颖,S(n)為幅度譜。
因為有
設(shè)
即式(2)的另一種形式為:
所以其實DFT變換就是兩個“相關(guān)(correlation)”操作甜奄,一個是與頻率為k的cos序列相關(guān)柠横,一個是與頻率為k的sin序列相關(guān),然后兩者疊加就是與頻率k的正弦波相關(guān)的結(jié)果课兄,如果得到的值很大牍氛,就表明信號包含頻率為k的能量很大。
4烟阐、計算功率譜:
例如搬俊,我們從一個1764個點的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ù),不涉及復(fù)數(shù)運算弟胀。
其中
引入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ù)性偎血,可以在特征維度增加前后幀信息的維度。常用的是一階差分和二階差分希停。
實際計算中則更為簡單烁巫,例如用python的librosa庫實現(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再做一次差分運算宠能。
參考資料:
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