陳奕成, 殳國華, 匡政睿, 余玟錚, 沈澤宇
(上海交通大學(xué) 電子信息與電氣工程學(xué)院,上海 200240)
隨著信息技術(shù)不斷發(fā)展,微信、QQ等手機APP和計算機應(yīng)用中包含了越來越多的個人和財產(chǎn)信息,一旦賬號被盜取,后果不堪設(shè)想。因此人們越來越注重個人信息和財產(chǎn)安全問題。然而,傳統(tǒng)的密碼識別方式存在被遺忘或泄露等風(fēng)險,具有一定安全隱患。因此,生物特征識別技術(shù)逐漸興起,從指紋識別到人臉、聲紋識別,該技術(shù)已經(jīng)越來越多地滲透到日常生活中。
聲紋是攜帶語音信息的聲波頻譜[1]。一方面,聲紋具有唯一性,任何兩個人的聲紋都有或多或少的差異;另一方面,聲紋采集方便,只需要一個錄音裝置就可以得到聲紋識別所需要的數(shù)據(jù)。因此聲紋識別技術(shù)具有廣闊的應(yīng)用前景和較高的市場價值。目前該技術(shù)已作為社保中的身份認證手段[2],并應(yīng)用在了金融安全領(lǐng)域[3]中。
聲紋識別分為說話人辨認和說話人確認[4]。前者指根據(jù)一段語音來辨別屬于哪位說話人,屬于N選1的識別方法;后者指根據(jù)一段語音來確認這段語音是否是聲稱的某人所說,屬于1對1的識別方法。說話人辨認又分為文本相關(guān)和文本無關(guān)。文本相關(guān)要求所有說話人的訓(xùn)練語音和測試語音采用一樣的文本內(nèi)容,而文本無關(guān)則沒有此要求。本文研究的是說話人辨認系統(tǒng),即在一個閉集的說話人集合中進行文本無關(guān)的說話人辨認。
本文所實現(xiàn)的系統(tǒng)框圖如圖1所示。
圖1 說話人辨認系統(tǒng)框圖
在說話人辨認系統(tǒng)模型的建立過程中,首先需要在系統(tǒng)中進行聲紋錄入,利用計算機麥克風(fēng)為每個說話人錄入10段時長約5 s的語音,加入訓(xùn)練語音庫,并對每一段語音進行預(yù)處理,接下來提取其梅爾頻率倒譜系數(shù)(MFCC)特征矩陣,建立說話人聲紋的高斯混合模型,加入到聲紋模型庫中。在測試過程中,說話人需錄制一段長約5 s的測試語音,經(jīng)過預(yù)處理、特性提取后得到待測語音特征矩陣,與之前建立好的聲紋模型庫進行匹配打分,根據(jù)匹配不同說話人模型得到的最大似然分數(shù),選取最大值,從而確定說話人身份。
系統(tǒng)軟件算法包括了語音信號預(yù)處理、聲紋特征提取和聲紋模型建立與匹配三個部分。
語音信號是由人類聲帶振動或嘴唇發(fā)出的聲音或氣音,在工程上可建模為一個時間域上連續(xù)的波形函數(shù)。語音信號預(yù)處理流程如圖2所示。下面對預(yù)處理的步驟作詳細介紹。
圖2 語音信號預(yù)處理流程
2.1.1 語音檢測和降噪
麥克風(fēng)采集的語音不能直接用于特征提取,因為語音中會有說話人或長或短的停頓,而且錄音環(huán)境中難免有噪聲干擾,給聲紋特征模型帶來污染。因此,在建模和識別語音信號前,需要先進行語音端點檢測(EPD)[5]和降噪處理[6]。
語音端點檢測采用時域的方法,主要根據(jù)能量大小進行檢測,通過設(shè)定閾值來判斷語音的有效部分。語音降噪算法采用頻譜相減法,它假設(shè)噪聲是加性噪聲,即直接加在語音上的,只要將其減去就可以得到干凈語音。頻譜相減法不僅降噪效果好,而且計算量小,易于實時實現(xiàn)。
2.1.2 語音信號采樣和預(yù)加重
為了將連續(xù)的語音信號變?yōu)殡x散的數(shù)字信號,需要對信號進行采樣,等間隔地取出連續(xù)信號上的點。
一般來說,人類正常說話聲音基頻在50~500 Hz范圍內(nèi),高于800 Hz的部分,信號功率會以6 dB/倍頻程跌落[7]。為了減少語音信號高頻部分信息的損失,需要對其進行預(yù)加重,該過程可以通過一個高通濾波器來實現(xiàn)。高通濾波器的傳遞函數(shù)為:
H(z)=1-μz-1
(1)
式中:μ為預(yù)加重系數(shù),可以取0.9~1之間的值,一般取0.96。如果時刻n的采樣值為x(n),那么完成預(yù)加重之后的信號為:
y(n)=x(n)-μx(n-1)
(2)
2.1.3 分幀和加窗
數(shù)字語音信號是隨時間變化的離散函數(shù),在短時間內(nèi)可以認為基本不隨時間變化,具有短時平穩(wěn)性,因此可以將語音信號分為若干小片段進行處理,其中每個小片段叫作幀。在音頻處理中,一幀的時長約為10~30 ms。為了使幀與幀之間平穩(wěn)過渡,兩幀之間會有部分重疊,一般重疊部分與幀長之間的比值取0~0.5。分幀后需要對每一幀進行加窗操作,加窗的作用是使每一幀開始和結(jié)束的時候漸變到0,可以提高后期傅里葉變換結(jié)果頻譜的分辨率。本文選用漢明窗。
聲紋特征提取是聲紋識別過程中的核心環(huán)節(jié)。目前已有的研究包括線性預(yù)測系數(shù)(LPC)、線性預(yù)測倒譜系數(shù)(LPCC)和梅爾倒譜系數(shù)(MFCC)[8],本文采用MFCC提取聲紋特征矩陣。
2.2.1 MFCC
梅爾倒譜分析是基于聲音頻率的非線性梅爾刻度的對數(shù)能量頻譜的線性變換。梅爾倒譜的頻帶是在梅爾刻度上等距劃分的,它比正常的對數(shù)倒頻譜中的頻帶更能模擬人類的聽覺系統(tǒng)。MFCC的提取流程如圖3所示。
圖3 MFCC提取流程
具體分為以下幾個步驟進行:
(1) 傅里葉變換。首先要對每一幀進行N點快速傅里葉變換(FFT)轉(zhuǎn)換為線性頻譜X(k),k=1,2,…,N-1。在聲紋識別應(yīng)用中,可以忽略FFT結(jié)果的相位信息,只取幅度|X(k)|進行接下來的步驟。
(2) 梅爾濾波器濾波。梅爾濾波器是一系列(M個)三角帶通濾波器Hm(k),其中心頻率為f(m),m=1,2,…,M。對每一幀信號加上M個三角濾波器之后,可以將這一幀信號由線性頻率轉(zhuǎn)換到梅爾頻率上,通常M取30左右。梅爾頻率和線性頻率的映射關(guān)系為:
(3)
式中:fMEL為梅爾頻率;fLIN為線性頻率。根據(jù)上述關(guān)系可以得到三角濾波器的傳遞函數(shù)為:
(4)
將M個此函數(shù)加在經(jīng)過N點FFT變換后的每幀信號上,然后將每個三角濾波器的結(jié)果累加起來,最終得到M個值,記為S1,S2,…,SM。
(3) 倒譜分析。由于人的聽覺在動態(tài)范圍內(nèi)呈現(xiàn)對數(shù)壓縮,因此需要把每一幀的M個對數(shù)濾波器頻譜值log10(Sm)利用離散余弦變換(DCT)轉(zhuǎn)換為L個倒譜系數(shù)。DCT變換函數(shù)為:
(5)
經(jīng)過DCT變換得到L個特征值,這L個特征值即為MFCC特征向量,一般來說L取12,當n=0時,c0代表的是一幀語音信號的平均對數(shù)能量,通常把c0和L個系數(shù)值一起組成一個13維的向量MFCC。假設(shè)一個語音信號由T幀組成,那么最終得到的一段語音的MFCC是一個T×(L+1)的二維矩陣。
2.2.2 高階MFCC
(6)
提取出聲紋特征矩陣后,需要對其進行訓(xùn)練建立模型。目前機器學(xué)習(xí)領(lǐng)域在聲紋識別方面已有很多研究,常用建模方法有支持向量機(SVM)[9]、高斯混合模型(GMM)[10]和卷積神經(jīng)網(wǎng)絡(luò)(CNN)[11]等。對于閉集說話人辨認系統(tǒng)來說,使用GMM即可得到很好的識別效果。
1) GMM原理
高斯概率密度函數(shù)即正態(tài)分布。自然界事物大多并不遵循正態(tài)分布,但是將多個正態(tài)分布函數(shù)按一定權(quán)重混合起來,可以精確地表示一個事物。高斯概率密度函數(shù)表達式為:
(7)
式中:μ為期望值,決定了曲線位置;σ為標準差;決定了分布的幅度。
(8)
(9)
2) EM算法
GMM三個參數(shù)(權(quán)重、均值和協(xié)方差)的選擇需要用期望最大化(EM)算法進行優(yōu)化。
該算法采用K-means的方法生成高斯混合模型各項參數(shù)的初始值,并將期望值作為已知量,根據(jù)最大似然估計得到該分布的參數(shù),假設(shè)這個參數(shù)比原先的參數(shù)更能表達真實分布,即得到一組更好的參數(shù)。再通過這個參數(shù)確定的分布求隱含變量的期望,再求最大值,得到另一組更好的參數(shù),這樣迭代下去,直至收斂。
設(shè)樣本集X=x1,x2,…,xN,p(xi|θ)為概率密度函數(shù),表示抽到xi的概率,θ為待求參數(shù)。因此同時抽到N個樣本的概率就是它們各自概率的乘積。
(10)
對上述似然函數(shù)求對數(shù)logL(θ)得到:
(11)
式中:z為模型中的隱變量;p(x(i),z(i)|θ)為變換后的概率密度函數(shù)。在EM算法中此函數(shù)?。?/p>
Qi(z(i))=p(x(i),z(i)|θ)
(12)
式中:p(z(i)|x(i),θ)為隱變量z對應(yīng)的隱分布。
似然函數(shù)最大化得到新的參數(shù)值為:
(13)
(14)
(15)
(16)
3) 匹配打分
(17)
式中:P(λj|X)為X與每個說話人模型的后驗概率,概率最高者即為預(yù)測的說話人。
試驗的測試環(huán)境為基于Windows操作系統(tǒng)的計算機,其中CPU為Intel Corei71.8 GHz,內(nèi)存為16 GB。語音庫中共采集30位說話人(20名男性,10名女性)數(shù)據(jù)。每人通過計算機麥克風(fēng)錄制10段語音,每段平均時長約為5 s,語音內(nèi)容為隨機中文語句。
在本地主機進行試驗時,根據(jù)不同訓(xùn)練語音長度來測試識別準確率。本文分為以下五種情況進行試驗:訓(xùn)練語音5句,測試語音1句;訓(xùn)練語音6句,測試語音1句;訓(xùn)練語音7句,測試語音1句;訓(xùn)練語音8句,測試語音1句;訓(xùn)練語音9句,測試語音1句。測試結(jié)果如表1所示。
由表1試驗結(jié)果可以看出,當訓(xùn)練語句減少為7句(總時長35 s)時可以達到30/30的識別準確率,并且所用時間是所有試驗中最短的。因此本系統(tǒng)最少可以使用7句語音進行模型訓(xùn)練,即可以保證識別準確率的條件下識別速度最快。
表1 不同訓(xùn)練語音長度情況下識別結(jié)果
本文利用Python在Windows操作系統(tǒng)搭建了一個利用高斯混合模型識別梅爾倒譜系數(shù)的具有降噪功能的說話人辨認系統(tǒng),包括了語音信號預(yù)處理、聲紋特征提取和聲紋模型建立與匹配等過程。語音庫中共采集30位說話人數(shù)據(jù),每人通過計算機麥克風(fēng)錄制10段語音,其中最少5句用于訓(xùn)練,1句用于測試。經(jīng)過試驗,此系統(tǒng)在閉集說話人測試集中可以達到30/30的識別準確率。相比于傳統(tǒng)說話人識別系統(tǒng),該系統(tǒng)增加了降噪功能,應(yīng)用場景更加廣泛,并且訓(xùn)練語音長度最短僅需要35 s即可達到30/30的識別效果,具有識別速度快、識別精度高的特點,為未來的生物特征識別技術(shù)提供了新思路。