楊 瑤, 陳 曉,b
(南京信息工程大學a.電子與信息工程學院;b.江蘇省大氣環(huán)境與裝備技術協(xié)同創(chuàng)新中心,南京210044)
說話人識別是通過對說話人語音信號分析自動確定說話人是誰的過程[1-2]。由于語音特征的特殊性,很難在目前實驗中看到關于語音的案例或實驗。然而,語言在極大程度上增加了人們的交流互動,深入語音信號的研究也越來越受到人們的關注[3]。神經網絡是由若干個神經元組成的一個錯綜復雜的網絡系統(tǒng),是一種既有多層式的,又不斷向前進行反饋的網絡,廣泛運用于各個方面,很強的非線性能力、容錯能力、泛化能力和自適應能力,且其是通過逆?zhèn)鞑ニ惴▉韺崿F(xiàn)的,所以又被稱為誤差逆向傳播神經網絡[4]。神經網絡的研究范圍較廣,體現(xiàn)了許多學科結合交叉的特點。而人工智能課程實驗,可以幫助學生更好地探討人工智能算法和系統(tǒng)的運行和實現(xiàn)過程。目前高校在教學過程中,都相對比較重視實際動手的操作能力,只有開展相對的實驗課程,讓學生更好地參與到整個教學過程中,主動思考,從而提高學習能力和創(chuàng)新能力[5]。
本文設計了說話人的語音識別實驗,采用BP 神經網絡對語音信號進行分類。實驗過程中采取實驗者的訓練語音和測試語音,先對輸入語音進行預處理,提取特征參數(shù)MFCC,BP 算法對語音特征向量進行訓練,進而獲得有效的網絡權值[6]。用訓練好的BP 神經網絡對說話人的語音歸類,從而識別出說話人身份。實驗時既可用訓練好的網絡直接進行說話人識別的驗證性實驗,也可作為創(chuàng)新性實驗,由學生自行設計并編程實現(xiàn)神經網絡來進行說話人識別。實驗訓練和測試樣本也可以由學生自行采集完成。
表示語音信號個性的特征參數(shù)有LPCC、LPC、MFCC和DWTC[7]。對語音信號可以通過兩方面進行分析:①時域過程中的語音信號。運用短時間內的能量函數(shù)判斷一段語音信號中有、無聲音的區(qū)間,判斷該聲音的清濁。②結合以上幾個特征參數(shù)判斷語音信號起始點和終止點的位置,進行對能量的門限調整,就是實現(xiàn)對各端點進行檢測的過程。而后,在頻域的范圍內對語音進行分析處理,則需要分析信號的頻譜值、倒譜值、功率譜值以及將不同頻率的振幅中最高的那個點進行連接;并且在頻域過程中,實驗經常采用通過帶通濾波器的方法和對其進行傅里葉的變換方法進行分析處理[8]。
說話者身份確認的實驗過程就是從說話者的一段語音中,提取出表現(xiàn)其特征的參數(shù),將參數(shù)進行一定的處理分析,從而得出測試者的身份。根據(jù)實驗者聲音處理的目的不同,可以分為對實驗者的辨認和對實驗者的確認,一個說話者的識別系統(tǒng)可以分成①訓練過程,②測試過程,如圖1 所示。
圖1 說話人識別典型結構
1.1.1 數(shù)據(jù)預處理
首先將語音信號數(shù)字化,隨后對輸入的語音信號進行預加重、去噪、分幀、加窗以及端點檢測等處理[9]。
(1)預加重。為了使參與實驗的語音信號更加穩(wěn)定,處于高低的頻率之間,也可以減少噪聲所帶來的影響。
(2)分幀。將一大段信號分解成一小段一小段的操作過程,稱這一小段為“幀”,通常情況下幀的長度為(10 ~30)×106s[10]。
(3)加窗。使信號能夠在一定的范圍內,讓整個語音系統(tǒng)的語音信號更加連續(xù),并且在進行加窗的操作后,讓原本沒有周期的語音信號能夠表現(xiàn)出部分的周期特征。對可移動的有限長度窗口進行加權。
(4)檢測端點。端點檢測主要分兩步走,①先通過一定的操作方法分割出語音信號中無聲、有聲部分;②選取有聲部分片段作為處理的實驗對象,根據(jù)語音信號的個性特征進行判斷,從而確定其起始點和終止點。
1.1.2 提取MFCC參數(shù)
提取特征[11]的任務是去掉所輸入語音信號里無用的冗余信息,并從輸入的一段說話人語音信號中提取可代表其個性特征的參數(shù),本文主要涉及的特征參數(shù)是梅爾倒譜系數(shù)(Mel Frequency Cepstrum Coefficient,MFCC)[12]。MFCC的提出是以聽覺的模型為基礎,不同于LPCC和LPC,且根據(jù)研究表明,MFCC參數(shù)的性能是超越LPCC的。實驗提取MFCC主要過程[13]為:①用mel 濾波器進行實驗需要的處理步驟,將各系數(shù)進行歸一處理;②對倒譜的提升窗口也歸一;③由輸入語音信號實施起始點和最終點;④處理大段語音信號,分成一小部分的語音片段,并求各部分的參數(shù);⑤合并參數(shù)的一階差分值和所求值;⑥取出合適范圍內的MFCC系數(shù)。
MFCC特征區(qū)分于其他倒譜特征的顯著特點是其擁有不均勻劃分的頻率軸,MFCC 系數(shù)的計算步驟如下[14]:①先輸入待實驗的語音;②提取的實驗者待測試的信號,對其進行預加重、分幀、加窗處理;③對一小段一小段的信號進行傅里葉變換從而得到語音信號的線性頻譜值;④對上一步所求的頻譜通過mel 濾波器組生成mel頻譜,并且對其進行平方求值,則能夠得到能量譜的值,用K 帶通濾波器進行實驗步驟,得出其輸出功率譜為X(K);⑤MFCC參數(shù)的求解是通過對其做反離散余弦變換,M一般取12 ~16。
BP神經網絡[15-16]就是將輸入的信號通過中間隱含層對輸出層所做出的反應。BP 算法主要由工作信號的正向傳播和誤差信號的反向傳播組成[17]。
(1)正向傳遞工作信號過程。輸入的語音信號經過前兩層的處理,將結果傳到輸出層,倘若輸出的實際值與期望值不一致時,則轉向誤差的逆?zhèn)鞑ァ?/p>
(2)誤差信號逆?zhèn)鞑ミ^程。將其輸出層得出的輸出結果反饋給輸入層和隱含層,并把產生的誤差分給所有的神經元,主要目的是為了反復求權值和閾值,直至它與BP算法求出的誤差相對應。
設輸入節(jié)點、隱含層節(jié)點、輸出層節(jié)點分別用j、k、i表示,計算權值和偏置的表達式如下:
根據(jù)梯度下降法原理,前兩層的權值和偏置可表示為:
實驗時構建BP神經網絡需要對網絡參數(shù)進行設置,從而完成訓練過程。實驗過程為:
(1)網絡初始化。第1 層表示樣本各分量的值。令3 層的節(jié)點數(shù)表示為m、l、n,并且各兩層之間連接的權值設為wjk、wki,使第1 個輸入的初始閾值為a,輸出的閾值為b。
隱含層
(2)隱含層輸出。設輸入的數(shù)據(jù)為x,且前兩層之間的可連接權值為wjk,隱含層閾值為a,則該層的輸出相當于輸入的數(shù)據(jù)經
(3)輸出層輸出。設后兩層之間的連接權值為wki,閾值為b,根據(jù)上述所求的輸出,從而計算最后一層的輸出
(4)網絡錯誤率的計算。由上述的步驟可得出輸出的預測值,并設定此網絡輸出的期望值為Y,網絡所產生的錯誤率
(5)更新權值。根據(jù)步驟(4)所產生的數(shù)據(jù)不斷地更迭計算網絡間的連接權值
(6)更新閾值。根據(jù)錯誤率計算網絡各節(jié)點的閾值
(7)返回(2)。進行不斷地循環(huán),直至該網絡計算的錯誤率符合原本所要達到的要求。
(1)利用已建立好的語音庫,主要包括p 個實驗者的q遍錄音,前r遍用于訓練,后q-r遍用于測試。
(2)將語音數(shù)據(jù)的幅度進行歸一化操作,整合到[-1,1]之間,對常數(shù)的取值進行設置,并于計算過零率、計算短時能量、調整能量門限后,進行端點檢測的步驟,找出語音信號的起始點和終止點,從而完成對語音數(shù)據(jù)的預處理。
(3)將mel濾波器組系數(shù)歸一化,對倒譜進行處理,增強其窗口,不斷地穩(wěn)定參數(shù)的高階、中階和低階的分量,從而增加參數(shù)的各方面性能。
(4)通過預加重濾波器對語音信號進行分幀,將一大段的語音信號分為多個小段的信號,對每一小段的信號進行參數(shù)求值,合并了一階參數(shù)和參數(shù)本身,去掉高低兩個值,進行刪選,從而提取出符合范圍內特征參數(shù)MFCC的值。
(5)對訓練后的數(shù)據(jù)進行疊加,把第i 份訓練數(shù)據(jù)組織為x,對每個輸出進行編碼,每個類別用N個數(shù)字來表示,并且定義神經網絡和設置神經網絡的輸入范圍,從而開始對train 文件夾中的語音進行訓練,并且訓練幀的類型分類,從而建立語音模板庫。
(6)讀入test 文件夾下的語音文件,計算幀的長度,提取MFCC參數(shù)的特征值并進行歸一化處理,每1幀可算出24 維度特征,對每1 幀求類別并得到每幀的類型,通過對這一類別進行索引,從而可得到這一類別的幀數(shù),幀數(shù)的得票越多,就為哪一實驗者的語音信號。
在Matlab 軟件中導入mytrain. m 和mytest. m 函數(shù),并對mytest.m函數(shù)開啟運行操作,訓練train 文件下的語音文件載入時都可以被系統(tǒng)識別出各個語音所屬人的身份。實驗過程中則需要用train 文件夾中的語音進行訓練,通過訓練完成后對test 下的語音文件進行測試環(huán)節(jié)。
2.2.1 訓練部分
BP網絡訓練設置如下:
hiden =15;
net =newff(pr,[hiden,typenum],{'logsig','purelin'},
'trainrp');net.trainParam.goal =1e-4;
net.trainParam.epochs =3000;
即迭代次數(shù)3 000 次,誤差目標為10-4,利用train 函數(shù)訓練BP神經網絡。本文所構建的BP 網絡是由24個輸入、15 個隱藏和7 個輸出組成,并且選擇Sigmoid激活函數(shù)。
選擇訓練p個人的各自r 段語音,仿真訓練結果如圖2 所示。繪制出訓練的錯誤率曲線如圖3 所示。
圖2 說話者訓練樣本界面
圖3 訓練誤差曲線
由圖3 可知,信號經過3 000 次迭代,誤差為0.080 219,且接近于0。本次測試的梯度為0.001 267,錯誤識別率為0,如圖4 所示。
2.2.2 實驗數(shù)據(jù)
利用alltest.m計算該系統(tǒng)的準確率,實驗結果如表1 所示。
由表1 可知,BP神經網絡適用于小范圍內語音數(shù)量的計算,所采取的數(shù)據(jù)庫越大,則其準確率越低,失真度就會隨之增加。
圖4 誤差梯度和錯誤識別率
表1 系統(tǒng)準確率
設計了基于神經網絡的說話人識別實驗,利用MFCC和BP神經網絡進行識別的操作過程。由實驗結果可知,這兩者的結合可以有效縮小識別的時間,從而大大提高了識別率,說話人的身份識別獲得了較好的效果。通過實驗的設計和完成,可以讓學生更深入的了解說話人識別的整體流程,也可以讓學生更加靈活地理解神經網絡的工作原理,從而提高學生的動手能力。