語音識別之DTW算法的應用(Python)

簡介

本文目的是探究語音識別中DTW算法的應用,本人在相關算法中加入了自己的理解並對實時識別進行了擴展。

代碼鏈接:基於Python的智能家居語言識別模擬系統

注意:在運行之前,需要修改代碼os.chdir()中的絕對路徑。

1  設計任務及要求

設計高準確率的連續語音識別系統。本實驗模擬智能家居聲控系統,對使用者的語音進行錄製與識別,得到對應的命令詞。10個命令詞爲:開燈、關燈、播放音樂、關閉音樂、打開空調、關閉空調、打開電視、關閉電視、開始掃地、停止掃地。

2  引言

語音識別以語音爲研究對象,是語音信號處理的一個重要研究方向,也是語音信號處理的一個基本問題。是模式識別的一個分支,涉及到生理學,心理學,語言學,計算機科學,以及信號處理等諸多領域,其最終實現的是人機交互,同時也在其他領域發揮着重要的作用,如導航,輔助機器人技術,移動設備服務等多個領域。

語音識別系統的分類方式及依據是根據說話人說話方式的要求,可以分爲孤立字(詞)語音識別系統,連接字語音識別系統以及連續語音識別系統,本文建立的系統爲連續語音識別系統。不同的語音識別系統,儘管設計和實現的細節不同,但所採用的技術都是相似的,一個典型的語音識別系統如圖1所示,主要包括預處理,特徵提取和訓練識別網絡。

圖1 語音識別系統組成部分

本系統用於模擬智能家居的聲控部分,對10個命令詞進行識別。系統首先對原始語音進行預加重、分幀、加窗等預處理操作,提取語音對應的特徵參數。在得到了特徵參數的基礎上,採用不同的方法進行識別:(1).採用模板匹配技術DTW算法進行進行時間的對準和相似度度量. (2).利用GMM-HMM建立聲學模型,最終完成識別。

3  實驗原理及應用

3.1 預處理

在信號處理系統中,對原始信號進行預處理是必要的這樣可以獲得一個比較理想的處理對象。在語音識別系統中,語音信號的預處理主要包括分幀,預加重及端點檢測。

3.1.1  分幀

語音信號是一種典型的非平穩信號,它的均值函數u(x)和自相關函數R(xl,x2)都隨時間而發生較大的變化。但研究發現,語音信號在短時間內頻譜特性保持平穩,即具有短時平穩特性。因此,在實際處理時可以將語音信號分成很小的時間段(約10~30ms),稱之爲“幀”,作爲語音信號處理的最小單位,幀與幀的非重疊部分稱爲幀移,而將語音信號分成若干幀的過程稱爲分幀。分幀小能清楚地描繪語音信號的時變特徵但計算量大;分幀大能減少計算量但相鄰幀間變化不大,容易丟失信號特徵。一般取幀長20ms,幀移爲幀長的1/3~1/2。

在本系統中幀長25ms,幀移10ms。

3.1.2  預加重

對於語音信號的頻譜,通常是頻率越高幅值越小,在語音信號的頻率增加兩倍時,其功率譜的幅度下降6dB。因此必須對高頻進行加重處理,一般是將語音信號通過一個一階高通濾波器1-0.9375z-1,即爲預加重濾波器。其目的是濾除低頻干擾,特別是50Hz到60Hz的工頻干擾,將對語音識別更爲有用的高頻部分進行頻譜提升。在計算短時能量之前將語音信號通過預加重濾波器還可起到消除直流漂移、抑制隨機噪聲和提升清音部分能量的效果。

3.1.3  端點檢測

語音信號起止點的判別是任何一個語音識別系統中必不可少的組成部分。因爲只有準確的找出語音段的起始點和終止點,才能得到真正要分析的語言信號。爲達到提取人聲部分的語音段,本實驗採用雙門限法進行端點檢測。該算法使用了三個閾值(包括兩個短時能量閾值和一個過零率閾值)。

短時能量計算方法:

這裏使用矩形窗w(m),對於每一個要計算的幀而言,它是1,因此這裏可以忽略掉,因此,每一幀採樣點平方和對應的就是該幀的短時能量。

短時過零率計算方法:

其中,sgn函數:

w(m)函數爲:

本實驗採用的端點檢測算法具體分爲三步:

圖2 雙門限法示意圖

第一步:取一個較高的短時能量作爲閾值MH,首先分出語音中的濁音部分(如圖2,A1-A2區間)。本實驗的MH,取值爲所有幀的短時能量的平均數的一半(平均數偏大)。

第二步:取一個較低的能量閾值ML,從A1-A2區間,向兩端進行搜索,將較低能量段的語音部分也加入到語音段,進一步擴大語音段範圍(如圖所示,B1-B2區間)。本實驗中,首先計算語音前一段的靜音部分的能量均值(前5幀),本文將靜音部分的能量均值和MH相加的一半作爲ML。

第三步:使用短時過零率閾值爲Zs。由於語音的兩端部分是輔音(也就是清音部分),也是語音中的一部分,但是輔音的能量與靜音部分的能量一樣低,但是過零率比靜音部分高出很多。爲了區分開二者,將利用短時能量區分完的語音段繼續向兩端進行搜索,短時過零率大於3倍Zs的部分,則認爲是語音的清音部分。將該部分加入語言段,就是求得的語音段(如圖2,C1-C2區間)。

3.2 特徵提取

人的聽覺系統是一個特殊的非線性系統,它響應不同頻率信號的靈敏度是不同的,基本上是一個對數的關係。近年來,一種能夠比較充分利用人耳的這種特殊感知特性的係數得到了廣泛應用,這就是Mel尺度倒譜系數(Mel-scaled Cepstrum Coefficients,簡稱MFCC)。

MFCC係數的計算流程(圖3)如下:

  1. 先對語音進行預加重、分幀和加窗;
  2. 對每一個短時分析窗,通過FFT得到對應的頻譜;
  3. 將上面的頻譜通過Mel濾波器組得到Mel頻譜;
  4. 在Mel頻譜上面進行倒譜分析(取對數,做逆變換,實際逆變換一般是通過DCT離散餘弦變換來實現),獲得Mel頻率倒譜系數MFCC,這個MFCC就是這幀語音的特徵;
圖3 MFCC係數計算流程圖

本實驗採用 HTK工具包中的Hcopy命令進行FFCC特徵提取,存儲在.mfc文件中。提取的特徵39維MFCC特徵。包括12維dct係數,能量特徵,一階差分和二階差分等。提取算法如下:

首先進行預加重,然後進行分幀,加窗,然後進行快速傅里葉變換,將它轉換爲頻域上的能量分佈;將能量譜通過一組Mel尺度的三角形濾波器組,對頻譜進行平滑化,並消除諧波的作用,突顯原先語音的共振峯;計算每個濾波器輸出的對數能量,經離散餘弦變換(DCT)得到MFCC係數;然後計算對數能量;最後提取動態差分參數(包括一階差分和二階差分等)

圖4爲Hcopy命令參數設置,圖5爲一段語音信號的第一幀MFCC特徵:

圖4 Hcopy命令參數設置
圖5 語音信號單幀MFCC特徵值

3.3 DTW語音匹配

由於即使同一個人不同時間發出同一個聲音,也不可能具有相同的長度,因此就需要用到動態時間歸正(DTW)算法。把時間歸正和距離測度計算結合起來的一種非線性歸正技術。DTW 本質上是一個簡單的動態規劃算法,是用來計算兩個維數不同的向量之間的相似度的問題,即計算向量 M1 和 M2 的最短距離。是一種非常常用的語音匹配算法。

3.3.1  算法基本思想

對兩個不同維數的語音向量 m1 和 m2進行匹配(m1 和 m2 的每一維也是一個向量,是語音每一幀的特徵值,這裏利用的是 MFCC 特徵)。設兩個向量的長度爲 M1 和 M2,則距離可以表示爲:

那麼,就可以這樣進行匹配:

  1. 每一條從(1,1)到(M1,M2)路徑都有一個累計距離稱爲路徑的代價;

  2. 每一條路徑都代表一種對齊情況;

  3. 代價最小的路徑就是所求的對準路徑。

這樣就可以將對準問題,或者說將求兩個語音段的相似度問題,轉化成了搜索代價最小的最優路徑問題,圖6爲其中一條路徑。

6 11)到(M1,M2)路徑其中一條路徑

在搜索過程中,往往要進行路徑的限制,如圖7,(i,j)點只能由相鄰的三點到達:

7 路徑限制

在此限制條件下,可以將全局最優化問題轉化爲許多局部最優化問題一步一步地來求解,這就動態規劃(Dynamic Programming,簡稱DP )的思想。

3.3.2  算法基本步驟

1. 定義一個代價函數 , 表示從起始點(1,1)出發,到達(i,j)點最小代價路徑的累計距離。有:

2. 要計算兩個向量之間的最短距離,可以表示爲:

依次類推,可由更低一層的代價函數計算得到:

3. 因此,可以從  開始計算,遞推出(1,1)到(i,j)的路徑。遞推過程中定義加權係數wn,加權係數的取值與局部路徑有關:

4. 爲了減少計算量,可以定義平行四邊形區域約束,如圖8:

8 平行四邊形路徑限制

3  實驗結果(DTW)

3.1 設計實驗任務及過程

本實驗旨在模擬智能家居聲控系統,一共錄製了6組語音,每組 10 個命令詞,一共 60 段語音。通過實驗,取出2組作爲模板。剩餘的 40 個語音命令作爲測試樣例,測試 語音識別系統的精確度。

實驗過程如下:

  1. 首先錄製 60 個語音,採樣頻率爲16kHz,存儲在 RecordedVoice 文件夾下;
  2. 利用實驗一的代碼對錄製的語音進行端點檢測,存儲在 RecordedVoice-EndPointed 文件夾下;
  3. 對端點檢測後的語音命令進行操作,利用 HTK 中的 HCopy 工具提取出 MFCC 特徵,存放在 xxx.mfc 文件中,放在 MFCC-EndPointedVoice 文件夾下;
  4. 在代碼中取出所有語音命令的 MFCC 特徵,區分開模板和測試樣例。根據 DTW 算法,對 40 個測試樣例進行靜態語音匹配,檢測正確率;
  5. 在代碼中錄音,然後保存錄音的文件,存放在 RecordedVoice-RealTime 中。利用端點檢測的代碼對其進行端點檢測,保存在 RecordedVoice-RealTime 中;
  6. 在代碼中動態調用 HCopy 程序,對實時錄的語音進行 MFCC 特徵提取,然後進行語音匹配,檢測是否與對應的命令匹配上;

3.2 實驗結果

本次測試的4組數據,40段語音,識別率達到95%,結果如圖9。該結果表明,DTW算法的語音識別率十分理想,最後兩端語音識別失敗的主要原因是,錄音者的聲調、響度和速度與模板差別巨大所造成的。因此,DTW的識別率受到模板數量的限制,因此在實際的智能家居聲控系統應用中,需要採集每個家庭成員儘量多的語音作爲模板,以提高系統識別率。

圖9 前兩組段語音識別結果

另外,本實驗還設計了簡潔的GUI界面,用於實時對使用者的語音信號進行採集和識別,更好的模擬智能家居聲控系統。GUI界面如圖10:

圖10 語音識別GUI界面

4  總結

在使用DWT匹配算法過程中,模板的好壞直接影響了整個識別系統的準確率,因此我們通過多組數據對比,選取了最優的模板,便能夠達到高識別率。

參考:https://blog.csdn.net/rocketeerLi/article/details/84638701

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