李政儀, 宮二玲
(1.長沙民政職業技術學院 軟件學院,湖南 長沙 410004; 2.國防科技大學 智能科學學院,湖南 長沙 410073)
每個人的聲音特征與說話習慣存在差異,語音具有明顯的區分性,因此可以作為身份識別工具。這涉及到聲紋識別技術,即通過對一種或多種語音信號的特征分析對未知聲音進行辨別,簡而言之就是辨別某一句話是否是某一個人所說的方法[1]。根據在驗證階段的說話內容是否是識別系統所規定的,可以分為與文本相關的和與文本無關的,前者是識別系統規定說話人所說的內容為已知,也就是說話人的語句是固定的或者是由系統提示的,后者則不限制說話人所說的內容[1]。
本文旨在利用聲紋識別技術,設計一個文本相關的嵌入式語音鎖,并分析不同的聲紋特征、噪聲水平對于識別結果準確性的影響,為下一步的實際應用奠定基礎。
一個嵌入式的對講設備,配置一個麥克風,擬增加一個語音鎖的功能。注冊時,自動生成一個隨機的8位數密碼,注冊人錄入2遍作為訓練樣本;驗證時,設備顯示密碼,并由驗證人讀出,判斷是否通過驗證。
目前常用的聲紋識別算法可以分為三大類[1]:1)模板匹配法:利用距離測度,對訓練好的特征矢量集合和待測矢量進行比較,距離越近,說明一致性越好。常用的算法有動態時間規整、矢量量化(vector quantization,VQ)等。2)概率模型法:根據特征矢量的統計特性建立數學模型,從統計學的角度進行匹配識別。常見方法包括隱馬爾可夫模型、高斯混合模型等。3)人工智能算法:以深度學習方法為主,如深度神經網絡、支持向量機等方法。這種方法需要海量數據支持,是一種數據驅動方法。
由于嵌入式系統的計算能力有限,因此,對于本問題而言,計算量小的模板匹配法是最為適合的。本文擬采用VQ方法進行聲紋鎖的設計。
VQ算法的基本原理是將若干個標量數據組構成一個矢量,然后在矢量空間進行整體量化,能夠壓縮了數據而不損失過多信息。1980年,Linden Y等人提出一種基于訓練序列的VQ設計算法,繞開了多維積分的求解,由于其廣泛的適用性,該方法被命名為LBG-VQ的算法[2,3]。
VQ算法中的基本概念包括碼矢和碼書。碼矢是所有特征矢量的分類中心矢量,可用一個k維向量cn=(cn,1,cn,2,…,cn,k),n=1,2,…,N表示。所有碼矢的集合稱為碼書,用C={c1,c2,…,cN}表示。VQ算法的核心就是在給定訓練樣本集合T和碼矢數量N的前提下,找到能夠使得平均失真度最小的碼書C。LBG-VQ算法交替地調整空間劃分P和碼書C,使失真度不斷地趨向于局部最小值。在算法初始化階段,可通過分裂方法得到一個初始的碼書C(0)。具體流程可參見文獻[2,3]。
典型的聲紋識別流程包括語音信號預處理、特征提取、模型訓練和特征識別。語音信號預處理包括預加重、加窗分幀和端點檢測等;特征提取包括特征選擇和頻域變換等;模型訓練就是根據提取到的特征,訓練出說話者的模型;特征識別則是針對一個輸入的語音,判斷屬于哪個說話者。
2.2.1 語音信號預處理
首先,對語音信號進行預加重,提升高頻部分,使得在低頻到高頻的整個頻帶中,信噪比基本一致。通常是將語音信號通過一個高通濾波器H(z)=1-μz-1。本文中,μ=0.975。其次,進行語音加窗分幀。通常認為語音信號在10~20 ms內是平穩的。因此,可按照這一個時間段進行分幀,分幀過程通常取重疊分段,重疊部分稱為幀移。本文幀移設定為50 %。加窗可以減少截斷效應對于分幀的影響,避免頻譜泄漏,本文采用漢寧窗。最后,進行端點檢測,消除噪聲段、靜音段等無效片段,保留有效語音片段。本文采用雙門限檢測方法,根據短時能量和短時過零率進行聯合檢測,具體方法可參見文獻[1,4]。
2.2.2 特征提取
常用的語音特征參數包括線性預測倒譜系數、梅爾頻譜倒譜系數(Mel frequency Cepstrum coefficient, MFCC)和感知線性預測系數等[5]。其中,MFCC是最為常用的,首先通過Mel濾波器組轉換為Mel頻譜,再進行倒譜計算,具體過程可參見文獻[5~8]。MFCC可反映語音信號的靜態特性,但人耳對語音信號的動態特性比較敏感,所以,可以取MFCC的差分來增強特征參數的動態特性,包括一階差分和二階差分。本文采用了12階MFCC系數和12階MFCC一階差分作為特征,組成一個24維特征矢量。
2.2.3 模型訓練與識別
利用2.1節中提到的VQ算法,針對提取到的特征矢量進行訓練,得到該說話者的模型,即碼本。碼本模型的訓練算法可參見文獻[9],此處不再贅述。
利用對講設備的麥克風錄制了10個人聲音,6男4女,每人讀一個各不相同的,8位數字,重復3遍。前兩遍作為訓練數據,最后一遍作為測試數據。采樣頻率為8 kHz,編碼位數為16位。
首先,對數據進行預處理,幀長設定為256,幀移為50 %,進行端點檢測,某一個語音段端點檢測結果如圖1所示。可以看出,在第一段語音中,漏檢了部分語音段,但在第二段語音中得到了較好的彌補。同時,基本上排除了絕大部分靜音段。由于是貼近麥克風錄音,語音信號的信噪比較高。

圖1 語音端點檢測結果
接下來,提取MFCC及其一階差分,組成24維的特征矢量,利用VQ算法進行訓練。碼矢數量N需要通過調試確定,令N=8,16,32,48,46,分別訓練模型,利用測試數據進行測試,N=8時,部分說話者的測試數據無法通過驗證;其他碼矢數量均能準確通過測試。10個說話者均開展50次測試,每驗證成功一次則記一次識別成功;如果將說話者A識別為10個說話者中的其他9人,則記一次誤識(錯誤接受);如果認為說話者不屬于10個人中的任意一個,則記一次拒收。統計結果如表1所示。

表1 不同碼書數量下的識別效果
可以看出,碼書數量增加,識別效果明顯提升,當N≥48之后,識別效果提升并不明顯,甚至還出現稍微下降,可能是存在過擬合的原因。此外,碼書數量的增加,會導致訓練和識別的計算量增加。因此,綜合考慮識別效果和計算效率,將碼書數量設定為N=48。
將聲紋特征由“MFCC+一階差分”調整為單純的MFCC,碼書數量N=48,繼續進行上述測試,可得識別成功率為88.2 %,說明一階差分的加入,對于提升識別準確率是非常有幫助的。
理論上說,訓練信號和測試信號的信噪比越高,識別效果就會越好。當信噪比下降時,語音端點檢測會出現問題,導致噪聲段被當作語音段進入了訓練模型。通過人為給10段訓練數據增加白噪聲,使其信噪比分別為20,10,0,-10,-20 dB時進行訓練,并利用原始測試數據進行測試,可得不同信噪比下準確識別次數,如圖2所示。可見當信噪比下降時,準確率明顯下降,當下降到一定程度(0 dB)時,基本上無法正常訓練和識別了。這說明在錄入訓練數據時,必須保證一定的信噪比。可采用消噪算法進行適當處理[10]。

圖2 信噪比與識別率之間的關系
將算法移植到嵌入式平臺后,可以正常運行,證明算法的運算量可以滿足嵌入式平臺的需求。
設計了一種文本相關的語音鎖。通過提取語音的MFCC及其一階差分特征,利用VQ算法,訓練說話者的語音特征模型,并據此開展說話者識別。實驗結果表明,在一定的信噪比下,碼本數量N=48時,識別準確率可保證在95 %的水平,滿足工程實用性要求。