天天看點

c++ 提取傅裡葉描述子_MFCC特征提取

c++ 提取傅裡葉描述子_MFCC特征提取

梅爾倒譜系數(MFCC)做為語音信号進行中的常見特征之一,在各個語音任務中都取得了不錯的效果,本文将講解一下MFCC特征的通用的提取過程。與大家一起探讨一下~

c++ 提取傅裡葉描述子_MFCC特征提取

MFCC特征通用提取過程

預設連續語音為

c++ 提取傅裡葉描述子_MFCC特征提取

共含有107000個點;預加重系數

c++ 提取傅裡葉描述子_MFCC特征提取

幀長為

c++ 提取傅裡葉描述子_MFCC特征提取

,幀移

c++ 提取傅裡葉描述子_MFCC特征提取

;窗函數為

c++ 提取傅裡葉描述子_MFCC特征提取

,fft的個數為

c++ 提取傅裡葉描述子_MFCC特征提取

,采樣頻率為

c++ 提取傅裡葉描述子_MFCC特征提取

預加重、分幀、加窗

  • 預加重

預加重的目的是為了去除口唇輻射的影響,增加語音的高頻分辨率,其具體實作可以用差分方程實作:

c++ 提取傅裡葉描述子_MFCC特征提取

預加重後,語音信号變化為

c++ 提取傅裡葉描述子_MFCC特征提取

,數組大小還是107000。 其中預加重系數

c++ 提取傅裡葉描述子_MFCC特征提取
  • 分幀

為了保證輸入信号是平穩的,我們需要将語音分成一小段(幀),也就是分幀。幀數為

c++ 提取傅裡葉描述子_MFCC特征提取

,則其

numframes 
           

對連續語音

c++ 提取傅裡葉描述子_MFCC特征提取

c++ 提取傅裡葉描述子_MFCC特征提取

個采樣點為一幀的長度,以

c++ 提取傅裡葉描述子_MFCC特征提取

個采樣點為相鄰幀移動的距離,對不足一幀長的進行補零,最終我們可以獲得

c++ 提取傅裡葉描述子_MFCC特征提取

個幀。

  • 加窗

加窗是為了解決由于信号的非周期截斷,導緻頻譜在整個頻帶内發生了拖尾現象的洩漏問題,可以使得使全局更加連續,避免出現吉布斯效應。窗函數一般為“漢明”窗、‘’‘漢甯’窗、矩形窗。

加窗相當于把每一語音幀裡面的抽樣點與窗函數中對應元素的相乘。設每一幀為

c++ 提取傅裡葉描述子_MFCC特征提取

則加窗操作為:

for i in range(frame_len):
    x[i] = x[i]*w[i]
           

快速傅裡葉變換 FFT

離散傅裡葉變化的公式如下:

c++ 提取傅裡葉描述子_MFCC特征提取

,其中

c++ 提取傅裡葉描述子_MFCC特征提取

為滿足FFT“分治”的政策,我們需要對幀長

c++ 提取傅裡葉描述子_MFCC特征提取

進行補零,使其補零後的長度

c++ 提取傅裡葉描述子_MFCC特征提取

為2的幂次方;比如當原始幀長為

c++ 提取傅裡葉描述子_MFCC特征提取

,我們對其進行補零後的長度為

c++ 提取傅裡葉描述子_MFCC特征提取

,其中

c++ 提取傅裡葉描述子_MFCC特征提取

  • 在采樣頻率 為
    c++ 提取傅裡葉描述子_MFCC特征提取
    的情況下,
    c++ 提取傅裡葉描述子_MFCC特征提取
    的n隻是一個離散的數值,那每一點到底代表了什麼頻率分量?
假設采樣頻率是
c++ 提取傅裡葉描述子_MFCC特征提取
,則
c++ 提取傅裡葉描述子_MFCC特征提取
,是以事實上把
c++ 提取傅裡葉描述子_MFCC特征提取
的式子裡面的
c++ 提取傅裡葉描述子_MFCC特征提取
c++ 提取傅裡葉描述子_MFCC特征提取
替換。很明顯,在特定的
c++ 提取傅裡葉描述子_MFCC特征提取
點的頻率分量的頻率為
c++ 提取傅裡葉描述子_MFCC特征提取
,進而得出
c++ 提取傅裡葉描述子_MFCC特征提取
代表的是頻率為
c++ 提取傅裡葉描述子_MFCC特征提取
的頻率“分量”

因為傅裡葉變化固有的性質:實數信号變換的結果

c++ 提取傅裡葉描述子_MFCC特征提取

是一組複數,裡面一半資料和另一半是共轭的,是以有一半的FFT是多餘的,是以經過的FFT輸出的次元為

c++ 提取傅裡葉描述子_MFCC特征提取

,(實數和虛數不分開表示的情況下)經過FFT後,計算頻譜圖的功率譜。

Mel濾波器組

MFCC的分析着眼于人耳的聽覺特征,人耳所聽到的聲音高低與聲音的頻率并不成線性正比關系,而用Mel頻率尺度更符合人耳的聽覺特性。Mel頻率與實際頻率的具體關系為如下:

c++ 提取傅裡葉描述子_MFCC特征提取
c++ 提取傅裡葉描述子_MFCC特征提取

Mel頻率尺度濾波器組

其實作過程如下:

c++ 提取傅裡葉描述子_MFCC特征提取

相鄰三角形濾波器之間的關系

  1. 根據上述公式将實際頻率尺度轉化為Mel頻率尺度
  2. 在Mel頻率域上确定最低頻率
    c++ 提取傅裡葉描述子_MFCC特征提取
    、與最高頻率
    c++ 提取傅裡葉描述子_MFCC特征提取
    和Mel濾波器個數
    c++ 提取傅裡葉描述子_MFCC特征提取
    。将每一個三角形濾波器的中心頻率
    c++ 提取傅裡葉描述子_MFCC特征提取
    在Mel頻率與上等間隔配置設定。設
    c++ 提取傅裡葉描述子_MFCC特征提取
    分别為第
    c++ 提取傅裡葉描述子_MFCC特征提取
    個三角形濾波器的下限、中心頻率、上限,則:
    c++ 提取傅裡葉描述子_MFCC特征提取
  3. 每個三角形濾波器
    c++ 提取傅裡葉描述子_MFCC特征提取
    為:
c++ 提取傅裡葉描述子_MFCC特征提取

4.根據語音信号的功率譜

c++ 提取傅裡葉描述子_MFCC特征提取

,求每一個三角形濾波器的輸出:

c++ 提取傅裡葉描述子_MFCC特征提取
注意上述式子的采樣點“k”與實際頻率f的對應關系為:
c++ 提取傅裡葉描述子_MFCC特征提取

倒譜分析

語音信号的倒譜分析就是求信号倒譜特征參數的過程,可以通過同态處理來處理。同态處理實作了卷積關系變化為求和關系的分離操作。

c++ 提取傅裡葉描述子_MFCC特征提取

頻譜圖

上圖是一個語音的頻率圖,其中紅色細線為頻譜的包絡(Spectral Envelope),包絡攜帶聲音的辨識屬性,特别重要,是以我們需要把它提取出來。為了将其提取出來,我可以使用同态處理的方法:

  1. 我們可以将頻譜看成頻譜包絡(Spectral Envelope)與頻譜細節(Spectral details)的乘積。是以我們對其求log,将其轉化為加性關系
  2. 其中頻譜包絡(Spectral Envelope)可以視為“低頻信号”、頻譜細節(Spectral details)可以識别“高頻信号”
  3. 通過DCT将其分離,我們稱為“倒譜”,對DCT結果儲存前若幹維的低頻資訊即為頻譜包絡(Spectral Envelope)
c++ 提取傅裡葉描述子_MFCC特征提取

Delta與二階Delta

MFCC隻是描述了一幀語音上的譜包絡,但是語音信号似乎有一些動态上的資訊,是以就引入了一階差分(deltas)和二階差分(deltas-deltas),其計算公式如下:

c++ 提取傅裡葉描述子_MFCC特征提取

其中t表示第幾幀,N通常取2,c指的就是MFCC中的某個系數。deltas-deltas就是在deltas上再計算以此deltas。

引用

furious:深入了解離散傅裡葉變換(DFT)​zhuanlan.zhihu.com

c++ 提取傅裡葉描述子_MFCC特征提取

Anssel:AI(I)語音(I):MFCC特征參數提取​zhuanlan.zhihu.com

c++ 提取傅裡葉描述子_MFCC特征提取

倒譜分析(Cepstrum Analysis)​blog.csdn.net

c++ 提取傅裡葉描述子_MFCC特征提取

《語音信号處理》趙力著

繼續閱讀