kaldi中的特徵提取

   本翻譯原文http://kaldi.sourceforge.net/feat.html,由@煮八戒翻譯,@wbglearn校對和修改。

 

特徵提取

簡介

我們做特徵提取和波形讀取的這部分代碼,其目的是爲了得到標準的MFCC(譯註:梅爾倒譜系數)和PLP(譯註:感知線性預測係數)特徵,設置合理的默認值但留了一部分用戶最有可能想調整的選項(如梅爾濾波器的個數,最小和最大截止頻率等等)。這部分代碼只讀取wav文件裏的pcm(譯註:脈衝編碼調製)數據。這類文件通常帶.wav或.pcm後綴(雖然有時.pcm後綴會用於sph文件;這種情況下必須轉換該文件)。假如源數據不是wav類文件,則用戶可自由選擇命令行工具來轉換,而我們提供的sph2pipe工具已能滿足一般的情況。

命令行工具compute-mfcc-feats和compute-plp-feats計算特徵;同其它Kaldi工具一樣,不帶參數地運行它們會給出一個選項列表。例子腳本里顯示了這些工具的用法。

計算MFCC特徵

這裏我們介紹如何使用命令行工具compute-mfcc-feats計算MFCC參數。該程序需要兩個命令行參數:rspecifier是用來讀.wav數據(以發音爲索引)和wspecifier是用來寫特徵(以發音爲索引);參見The TableconceptSpecifying Table formats: wspecifiers and rspecifiers獲取更多關於這些術語的解釋。典型的用法是,將數據寫入一個大的“archive”文件,也寫到一個“scp”文件以便隨機存取;參見Writing an archive and a script file simultaneously解釋。程序沒有添加增量功能(如需添加,參見add-deltas)。它接收選項-channel來選擇通道(如–channel=0, –channel=1),該選項在讀取立體聲數據時很有用。

計算MFCC特徵由Mfcc類型的對象完成,它有Compute()函數可以根據波形計算特徵。

完整的MFCC計算如下所示:

·       計算出一個文件中幀的數目(通常幀長25ms幀移10ms)。

·       對每一幀:

o      提取數據,可選做dithering(注:直譯爲抖動,在這裏可以理解爲類似歸一化的預處理),預加重和去除直流偏移,還可以和加窗函數相乘(此處支持多種選項,如漢明窗)

o      計算該點能量(假如用對數能量則沒有C0)

o      做FFT(譯註:快速傅里葉變換)並計算功率譜

o      計算每個梅爾濾波器的能量;如23個部分重疊的三角濾波器,其中心在梅爾頻域等間距

o       計算對數能量並作餘弦變換,根據要求保留係數(如13個)

o       選做倒譜變換;它僅僅是比例變換,確保係數在合理範圍。

 

上下截止頻率根據三角濾波器界定,由選項–low-freq和–high-freq控制,通常分別設置爲0Hz和奈奎斯特頻率附近,如對16kHz採樣的語音設置爲–low-freq=20 和 –high-freq=7800。

Kaldi的特徵和HTK的特徵在很多方面不同,但是幾乎所有這些不同歸結於有不同的默認值。用選項–htk-compat=true並正確設置參數,能得到同HTK非常接近的特徵。一個可能重要的選項是我們不支持能量最大歸一化。這是因爲我們希望能把無狀態方式應用到歸一化方法,且希望從原理上計算一幀幀特徵仍能給出相同結果。但是程序compute-mfcc-feats裏有–subtract-mean選項來提取特徵的均值。對每個語音做此操作;每個說話人可以有不同的方式來提取特徵均值。(如在腳本里搜“cmvn”,表示倒譜均值和方差歸一化)。

計算PLP特徵

計算PLP特徵的算法與MFCC的算法前期是一樣的。稍後我們也許會在此部分增加些內容,但目前參見Hynek Hermansky《語音的感知線性預測(PLP)分析》,Journal ofthe Acoustical Society of America, vol. 87, no. 4, pages 1738–1752 (1990).

特徵級聲道長度歸一化(VTLN)

程序compute-mfcc-feats和compute-plp-feats接收一個VTLN彎折因子選項。在目前的腳本中,這僅用作線性版的VTLN的初始化線性轉換的一種方法。VTLN通過移動三角頻率箱的中心頻率的位置來實現。移動頻率箱的彎折函數是一個在頻域空間分段線性的函數。爲理解它,記住以下數量關係:

0 <= low-freq <=vtln-low < vtln-high < high-freq <= nyquist

此處,low-freq和high-freq分別是用於標準MFCC或PLP計算的最低和最高頻率(忽略更低和更高的頻率)。vtln-low和vtln-high是用於VTLN的截止頻率,它們的功能是確保所有梅爾濾波器有合適的寬度。

我們實現的VTLN彎折函數是一個分段線性函數,三個部分映射區間[low-freq,high-freq]至[low-freq, high-freq]。記彎折函數爲W(f),f是頻率。中段映射f到f/scale,scale是VTLN彎折因子(通常範圍爲0.8到1.2)。x軸上低段和中段的連接點是滿足min(f,W(f)) = vtln-low的f點。x軸上中段和高端的連接點是滿足max(f, W(f)) = vtln-high的f點。要求低段和高段的斜率和偏移是連續的且W(low-freq)=low-freq, W(high-freq)=high-freq。這個彎折函數和HTK的不同;HTK的版本中,"vtln-low"和"vtln-high"的數量關係是x軸上可以不連續的點,這意味着變量"vtln-high"必須基於彎折因子的可能範圍的先驗知識謹慎選擇(否則梅爾濾波器可能爲空)。

一個合理的設置如下(以16kHz採樣的語音爲例);注意這反映的是我們理解的合理值,並非任何非常細緻的調試實驗的結果。

low-freq

vtln-low

vtln-high

high-freq

nyquist

40

60

7200

7800

8000


 

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