mfcc

 MFCC(Mel-frequency cepstral coefficients):梅爾頻率倒譜系數。梅爾頻率是基於人耳聽覺特性提出來的, 它與Hz頻率成非線性對應關係。梅爾頻率倒譜系數(MFCC)則是利用它們之間的這種關係,計算得到的Hz頻譜特徵。主要用於語音數據特徵提取和降低運算維度。例如:對於一幀有512維(採樣點)數據,經過MFCC後可以提取出最重要的40維(一般而言)數據同時也達到了將維的目的。

    MFCC一般會經過這麼幾個步驟:預加重,分幀,加窗,快速傅里葉變換(FFT),梅爾濾波器組,離散餘弦變換(DCT).其中最重要的就是FFT和梅爾濾波器組,這兩個進行了主要的將維操作。

    1.預加重

         將經採樣後的數字語音信號s(n)通過一個高通濾波器(high pass filter):

                                       其中a一般取0.95左右。

         經過預加重後的信號爲:

        預加重的目的是提升高頻部分,使信號的頻譜變得平坦,保持在低頻到高頻的整個頻帶中,能用同樣的信噪比求頻譜。同時,也是爲了消除發生過程中聲帶和嘴脣的效應,來補償語音信號受到發音系統所抑制的高頻部分,也爲了突出高頻的共振峯。

    2.分幀

        爲了方便對語音分析,可以將語音分成一個個小段,稱之爲:幀。先將N個採樣點集合成一個觀測單位,稱爲幀。通常情況下N的值爲256或512,涵蓋的時間約爲20~30ms左右。爲了避免相鄰兩幀的變化過大,因此會讓兩相鄰幀之間有一段重疊區域,此重疊區域包含了M個取樣點,通常M的值約爲N的1/2或1/3。通常語音識別所採用語音信號的採樣頻率爲8KHz或16KHz,以8KHz來說,若幀長度爲256個採樣點,則對應的時間長度是256/8000×1000=32ms。

    3.加窗

        語音在長範圍內是不停變動的,沒有固定的特性無法做處理,所以將每一幀代入窗函數,窗外的值設定爲0,其目的是消除各個幀兩端可能會造成的信號不連續性。常用的窗函數有方窗、漢明窗和漢寧窗等,根據窗函數的頻域特性,常採用漢明窗。

        將每一幀乘以漢明窗,以增加幀左端和右端的連續性。假設分幀後的信號爲S(n), n=0,1…,N-1, N爲幀的大小,那麼乘上漢明窗後 ,W(n)形式如下:

 

           不同的a值會產生不同的漢明窗,一般情況下a取0.46.

    4.快速傅里葉變換

          由於信號在時域上的變換通常很難看出信號的特性,所以通常將它轉換爲頻域上的能量分佈來觀察,不同的能量分佈,就能代表不同語音的特性。所以在乘上漢明窗後,每幀還必須再經過快速傅里葉變換以得到在頻譜上的能量分佈。對分幀加窗後的各幀信號進行快速傅里葉變換得到各幀的頻譜。並對語音信號的頻譜取模平方得到語音信號的功率譜。設語音信號的DFT爲:

               式中x(n)爲輸入的語音信號,N表示傅里葉變換的點數。

         這裏需要先介紹下Nyquist頻率,奈奎斯特頻率(Nyquist頻率)是離散信號系統採樣頻率的一半,因哈里·奈奎斯特(Harry Nyquist)或奈奎斯特-香農採樣定理得名。採樣定理指出,只要離散系統的奈奎斯特頻率高於被採樣信號的最高頻率或帶寬,就可以避免混疊現象。在語音系統中我通常採樣率取16khz,而人發生的頻率在300hz~3400hz之間,按照Nyquist頻率的定義就有Nyquist頻率等於8khz高於人發生的最高頻率,滿足Nyquist頻率的限制條件。FFT就是根據Nyquist頻率截取採樣率的一半來計算,具體來說就是,假設一幀有512個採樣點,傅里葉變換的點數也是512,經過FFT計算後輸出的點數是257(N/2+1),其含義表示的是從0(Hz)到採樣率/2(Hz)的N/2+1點頻率的成分。也就是說在經過FFT計算時不僅把信號從時域轉到了頻域並且去除了高於被採樣信號的最高頻率的點的影響,同時也降低了維度。

    5.梅爾濾波器組

         由於人耳對不同頻率的敏感程度不同,且成非線性關係,因此我們將頻譜按人耳敏感程度分爲多個Mel濾波器組,在Mel刻度範圍內,各個濾波器的中心頻率是相等間隔的線性分佈,但在頻率範圍不是相等間隔的,這個是由於頻率與Mel頻率轉換的公式形成的,公式如下:

                 式中的log是以log10爲底,也就是lg。

         將能量譜通過一組Mel尺度的三角形濾波器組,定義一個有M個濾波器的濾波器組(濾波器的個數和臨界帶的個數相近),採用的濾波器爲三角濾波器,中心頻率爲f(m),m=1,2,...,M。M通常取22-26。各f(m)之間的間隔隨着m值的減小而縮小,隨着m值的增大而增寬,如圖所示:

                 式中的k指經過FFT計算後的點的下標,也就是前面例子中的0~257,f(m)也對應點的下標,具體求法如下:

           1.確定語音信號最低(一般是0hz)最高(一般是採樣率的二分之一)頻率以及Mel濾波器個數

           2.計算對應最低最高頻率的mel頻率

           3.計算相鄰兩個mel濾波器中心頻率的距離:(最高mel頻率-最低mel頻率)/(濾波器個數+1)

           4.將各個中心Mel頻率轉成頻率

           5.計算頻率對應FFT中點的下標

         例如:假設採樣率爲16khz,最低頻率爲0hz,濾波器個數爲26,幀大小爲512,則傅里葉變換點數也爲512,那麼帶入Mel頻率與實際頻率的轉換公式中得到最低Mel頻率爲0,最高Mel頻率爲2840.02.中心頻率距離爲:(2840.02-0)/(26+1)=105.19,這樣我們就可以得到Mel濾波器組的中心頻率:[0,105.19,210.38,...,2840.02],然後再將這組中心頻率轉成實際頻率組(按公式操作即可,這裏不列出來了),最後計算實際頻率組對應FFT點的下標,計算公式爲:實際頻率組中的每個頻率/採樣率*(傅里葉變換點數 + 1)。這樣就得到FFT點下標組:[0,2,4,7,10,13,16,...,256],也就是f(0),f(1),...,f(27)。

        有了這些,我們在計算每個濾波器的輸出,計算公式如下:

              式中的M指濾波器的個數,N指FFT中的點數(上述的例子中是257)。經過上面的計算後每幀數據我們得到一個與濾波器個數相等的維數,降低了維數(本例中是26維)。

    6.離散餘弦變換

          離散餘弦變換經常用於信號處理和圖像處理,用來對信號和圖像進行有損數據壓縮,這是由於離散餘弦變換具有很強的"能量集中"特性:大多數的自然信號(包括聲音和圖像)的能量都集中在離散餘弦變換後的低頻部分,實際就是對每幀數據在進行一次將維。其公式如下:

             將上述每個濾波器的對數能量帶入離散餘弦變換,求出L階的Mel-scale Cepstrum參數。L階指MFCC係數階數,通常取12-16。這裏M是三角濾波器個數。

    7.動態差分參數的提取

       標準的倒譜參數MFCC只反映了語音參數的靜態特性,語音的動態特性可以用這些靜態特徵的差分譜來描述。實驗證明:把動、靜態特徵結合起來纔能有效提高系統的識別性能。差分參數的計算可以採用下面的公式:

                式中,dt表示第t個一階差分,Ct表示第t個倒譜系數,Q表示倒譜系數的階數,K表示一階導數的時間差,可取1或2。將上式的結果再代入就可以得到二階差分的參數。

        因此,MFCC的全部組成其實是由: N維MFCC參數(N/3 MFCC係數+ N/3 一階差分參數+ N/3 二階差分參數)+幀能量(此項可根據需求替換)。

        這裏的幀能量是指一幀的音量(即能量),也是語音的重要特徵,而且非常容易計算。因此,通常再加上一幀的對數能量(定義:一幀內信號的平方和,再取以10爲底的對數值,再乘以10)使得每一幀基本的語音特徵就多了一維,包括一個對數能量和剩下的倒頻譜參數。另外,解釋下最開始說的40維是怎麼回事,假設離散餘弦變換的階數取13,那麼經過一階二階差分後就是39維了再加上幀能量總共就是40維,當然這個可以根據實際需要動態調整。

       注:水平有限,如有錯誤,還請指正!

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