今天搞畢設了麼?——4.15 MFCC及倒譜系數

淺談MFCC  

MFCC的基本過程可以看看這個,(1)淺談MFCC(2)聲音特徵提取但這個也就是個基本的過程,畢設的基本理論方面是可以用的到的,而具體詳細實現的細節及代碼後續再做補充。

MFCC最直觀的認知,它的13個係數(也許還有13個一階差分和13個二階差分)都是通過離散餘弦變換(DCT)而來,並取前13個係數。DCT


所說,爲了獲得頻譜的倒譜,倒譜的低頻分量就是頻譜的包絡,倒譜的高頻分量就是頻譜的細節,這些都是語音識別上經過科學驗證十分有效的語音物理信息。但語音識別是對機器來說的,所以我們必須對物理信息進行某種“編碼”,得到的就是MFCC13維特徵向量,你是否理解它不重要,只要機器能夠識別就行了。

綜上所述,我認爲MFCC的物理含義就是——在語音識別領域,將語音物理信息(頻譜包絡和細節)進行編碼運算得到的一組特徵向量。

在知乎上看到這樣一個很直觀的例子  Mel頻率倒譜系數對應的物理含義

首先看下面圖中的波形,如果你“播放”它,其實就是鼓聲“咚噠咚咚噠”這五聲兒。


把這段鼓聲分成130幀,每一幀內提取20維的MFCC,就會得到下圖:


可以看到“咚”和“噠”的時候對應的MFCC還是有區別的,爲了讓這個區別更明顯,可以對每一維的係數稍作處理,於是得到下圖:


附錄python源碼:

# 需要用到的包
import numpy, scipy, sklearn, librosa
# 錄入咚噠咚咚噠的音頻例子
x, fs = librosa.load('example.wav')
# 畫出波形圖(上方第一個圖)
librosa.display.waveplot(x, sr=fs)
# 提取MFCC
mfccs = librosa.feature.mfcc(x, sr=fs)
# 獲取特徵值的維度
print mfccs.shape  #打印將輸出(20,130)
# 畫出MFCC的圖(上方第二個圖)
librosa.display.specshow(mfccs, sr=fs, x_axis='time')
# 對MFCC的數據進行處理
mfccs = sklearn.preprocessing.scale(mfccs, axis=1)
# 畫出處理後的圖(上方第三個圖)
librosa.display.specshow(mfccs, sr=fs, x_axis='time')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章