點擊上方“AI大道理”,選擇“置頂”公眾號
——————
1 特征提取流程
在語音識別和話者識別方面,最常用到的語音特征就是梅爾倒譜系數(Mel-scaleFrequency Cepstral Coefficients,簡稱MFCC)。
MFCC提取過程包括預處理、快速傅里葉變換、Mei濾波器組、對數運算、離散余弦變換、動態特征提取等步驟。


2 快速傅里葉變換
快速傅里葉變換即利用計算機計算離散傅里葉變換(DFT)的高效、快速計算方法的統稱,簡稱FFT。
FFT不是Fast FT,而是Fast DFT
FT的種類很多,以最簡單的基於2的FFT為例。
FFT實際上一種分治算法。FFT將長度為
N 的信號分解成兩個長度為
\frac{N}{2}信號進行處理,這樣分解一直到最后,每一次的分解都會減少計算的次數。理解FFT分以下三個步驟進行:



步驟1:將信號
x\left[n\right]分解成兩個子信號 偶數樣本點信號:
x\left[2n\right]; 奇數樣本點信號:
x\left[2n+1\right];
N=0,1,\cdots,\frac{N}{2}-1
![x\left[n\right]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD14JTVDbGVmdCU1Qm4lNUNyaWdodCU1RA==.png)
![x\left[2n\right]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD14JTVDbGVmdCU1QjJuJTVDcmlnaHQlNUQ=.png)
![x\left[2n+1\right]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD14JTVDbGVmdCU1QjJuJTJCMSU1Q3JpZ2h0JTVE.png)

步驟2:將兩個求和項理解成兩個長度為
\frac{N}{2}的DFT

步驟3:FFT的具體計算過程
對於任意
k都要進行
N次加法操作,所以DFT共有
N^2次乘法操作。 對於任意
k都要進行
N-1次加法操作,DFT共有
N\left(N-1\right)次加法操作。 FFT共有
N\left(\log_2N-1\right)次乘法操作和
Nlog_2N次加法操作。








語音信號是有限長的離散信號。
預處理后的語音信號:

FFT后效果:

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

三角帶通濾波器有兩個主要目的:
(1)三角形是低頻密、高頻疏的,這可以模仿人耳在低頻處分辨率高的特性;
(2)對頻譜進行平滑化,並消除諧波的作用,突顯原先語音的共振峰。頻譜有包絡和精細結構,分別對應音色與音高。對於語音識別來講,音色是主要的有用信息,音高一般沒有用。在每個三角形內積分,就可以消除精細結構,只保留音色的信息。
(3)傅里葉變換得到的序列很長(一般為幾百到幾千個點),把它變換成每個三角形下的能量,可以減少數據量
Mel頻率和頻率f的對應關系:

或者



Mel濾波器實現過程:
(1)確定最低頻率(0HZ),最高頻率(fs/2),Mel濾波器個數M(23);
(2)轉換最低頻率和最高頻率的Mel(f);
(3)計算相連兩個Mel濾波器中心Mel頻率的距離,在Mel頻率上,兩兩之間的中心頻率是等間距的;

(4)將各種中心Mel頻率轉化為頻率f(非等間距); (5)計算頻率所對應的FFT中點的下標;



靈魂的拷問:為什么有些Mel濾波器組不等高,我設計的是等高的?這樣有影響嗎?有優勢嗎?
AI大語音:不等高的原因是乘了一個遞減的系數,就是實現上一些細節的差別,保證了每個濾波器的能量和一樣。橫軸指的頻率,低頻的系數高,就是對低頻更加的關注 。沒有太大的影響,一般主要用等高的。
經過梅爾濾波器組后的Fbank特征:


4 對數運算
將原語音信號經過傅里葉變換得到頻譜:
X[k]=H[k]E[k]
只考慮幅度就是:
|X[k] |=|H[k]||E[k] |
兩邊取對數:
log||X[k] ||= log ||H[k] ||+ log ||E[k] ||
再在兩邊取逆傅里葉變換得到:
x[k]=h[k]+e[k]
靈魂的拷問:為什么要進行對數運算?它在干嘛?
對數運算包括取絕對值和log運算。取絕對值是僅使用幅度值,忽略相位的影響,因為相位信息在語音識別中作用不大。
log運算是為了分別包絡和細節,包絡代表音色,細節帶包音高,顯然語音識別就是為了識別音色。另外,人的感知與頻率的對數成正比,正好使用log模擬。
FFT變換后,卷積變成了乘法,取對數后,乘法變成了加法,把卷積信號轉換成加性信號。

5 離散余弦變換(DCT)
再在兩邊取逆傅里葉變換得到:
x[k]=h[k]+e[k]
在上一步中,我們成功地把基音信息與聲道信息變成了加性的。那么如何分離呢?它們有如下性質:
頻譜圖中(注意是一幀FFT變換內)
(1)基音信息在頻域是快速變化的。
(2)聲道信息在頻域是緩慢變化的。
因此再做一次DCT可以將其分離。我們稱之為"倒譜域"。因此倒譜域的低頻部分刻畫了聲道信息,高頻部分刻畫了基音信息。

由此得到12維的MFCC特征:


由於許多要處理的信號都是實信號,在使用DFT時由於傅里葉變換時由於實信號傅立葉變換的共軛對稱性導致DFT后在頻域中有一半的數據冗余。 將DFT式子拆開,抽出實數部分:

則實數部分:

虛數部分:

又有:

而當x[n]是實偶信號時:

把DFT寫成:

但是實際中並沒有那么多實偶信號,我們就認為造出來。將信號長度擴大成原來的兩倍,並變成2N,又為了讓造出來的信號關於0對稱,把整個延拓的信號向右平移 0.5 個單位,最終DCT變換公式:

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

式中,dt表示第t個一階差分,Ct表示第t個倒譜系數,Q表示倒譜系數的階數,K表示一階導數的時間差,可取1或2。將上式的結果再代入就可以得到二階差分的參數。
因此,MFCC的全部組成其實是由: N維MFCC參數(N/3 MFCC系數+ N/3 一階差分參數+ N/3 二階差分參數)+幀能量(此項可根據需求替換)。
這里的幀能量是指一幀的音量(即能量),也是語音的重要特征。
d_mfcc_feat = delta(wav_feature, 1) d_mfcc_feat2 = delta(wav_feature, 2)
feature = np.hstack((wav_feature, d_mfcc_feat, d_mfcc_feat2))
最終39維MFCC圖:

附錄(魔鬼寫手)





——————
淺談則止,細致入微AI大道理
掃描下方“AI大道理”,選擇“關注”公眾號

歡迎加入!

▼下期預告▼
AI大語音(五)——聲學模型
▼往期精彩回顧▼
AI大語音(一)——語音識別基礎
AI大語音(二)——語音預處理
AI大語音(三)——傅里葉變換家族