??? 摘 要: 針對當前基于DSP,、ARM等硬核處理器設計的嵌入式說話人識別" title="說話人識別">說話人識別系統(tǒng)訓練和辨認時間長等缺陷,,根據(jù)MFCC提取過程的特點與遺傳聚類" title="聚類">聚類算法中適應度計算的原理,,提出一種基于SoPC平臺與矢量量化" title="矢量量化">矢量量化原理的說話人識別系統(tǒng)" title="說話人識別系統(tǒng)">說話人識別系統(tǒng)實現(xiàn)方案。經(jīng)測試,,該實現(xiàn)方案在保證識別率前提下,,可有效提高訓練與識別速度。
??? 關(guān)鍵詞: 說話人識別 ?矢量量化 ?遺傳算法" title="遺傳算法">遺傳算法 ?適應度 ?SOPC
?
??? 說話人識別(Speaker Recognition)又稱話者識別,,是指根據(jù)特定說話人語音波形中反映生理和行為等特征的語音參數(shù)來對說話人身份進行識別[1],。說話人識別技術(shù)作為一種非接觸性識別技術(shù),在保安,、司法,、軍事和信息服務等領(lǐng)域都有廣泛的應用前景。
??? 文本無關(guān)的說話人識別方法是當前說話人識別技術(shù)的研究重點,。常用的識別算法有:基于矢量量化VQ(Vector Quantization)的方法[2],、基于HMM的方法、基于ANN的方法等,。其中,,基于VQ的說話人識別方法無需考慮復雜的統(tǒng)計模型和時間歸整問題,運算過程簡單,,在說話人識別領(lǐng)域被廣泛應用,。
??? 基于VQ的說話人識別通常采用MFCC參數(shù),因為MFCC是一種基于人耳對語音頻率的非線形感知特征的描述參數(shù)[3],,在說話人識別中,,其性能優(yōu)于LPC,、LPCC等參數(shù),。
??? SoPC技術(shù)是一種基于FPGA解決方案的SoC,由美國ALTERA公司于2000年提出[4],?;赟oPC平臺的開發(fā)結(jié)合了FPGA靈活可編程與片上NiosII軟核處理器的用戶可配置等特點。在實現(xiàn)某功能時,,可編寫C/C++程序運行于NiosII處理器實現(xiàn),,也可設計硬件模塊實現(xiàn),不占用CPU,,起到了硬件加速效果,。本系統(tǒng)綜合兩種實現(xiàn)思路,采用高性價比的Cyclone II 2C35系列FPGA實現(xiàn),。經(jīng)驗證,,該說話人識別系統(tǒng)識別率高,實時性優(yōu)于硬核處理器系統(tǒng),,應用前景良好,。
1 基于矢量量化的說話人識別算法
??? 說話人識別中,,先需要建立表征用戶語音特征的碼書,碼書由從用戶的訓練語音中提取的MFCC聚類而成,。識別階段,,系統(tǒng)先采集一段測試者的語音,提取出MFCC,,再與用戶VQ碼書匹配,,如果失真測度達到一定范圍,則可認為測試者即為碼書表征的用戶,。
??? 建立碼書時,,先由系統(tǒng)采集一段用戶語音,經(jīng)分幀與MFCC提取后可得到N 個M 維原始矢量On={o1,,o2,,?
oM}(n=1,2,,3…,,N ),其中每一矢量相當于M維空間中的一點,。然后將N 個原始矢量在M 維空間作K聚類,,得到的聚類結(jié)果即是表征說話人語音特征的K容量碼書。其中,,用于構(gòu)建碼書的N幀M維MFCC稱為訓練序列,。
??? 根據(jù)實驗驗證并綜合考慮系統(tǒng)資源與識別性能,參數(shù)設定總幀數(shù)M一般取256或512,,碼書大小K取64,,M取12或16(若加上差分參數(shù)可擴至24、36等),。由于是在高維空間聚類,,普通聚類方法易導致結(jié)果陷入局部最優(yōu)點,因而選擇具有全局搜索性能的遺傳算法進行聚類,,可得到最優(yōu)碼書,。針對說話人識別設計的算法,具體細節(jié)如下:
??? 群體規(guī)模:30
??? 編碼方式:二進制編碼
??? 交叉變異:無回放隨機選擇策略選擇單點交叉,,交叉概率PC =90%,,變異概率PM =10%
??? 遷移間隔:每運行2代遷移一次
??? 選擇(替換) 輪盤賭方式+10%最優(yōu)個體保存
??? 個體適應度計算公式為:
??? X 為訓練序列,Y 為個體,,d(Xj,,Yi)是訓練序列中某點Xj與個體中某點Yi之間的歐氏距離。
停止條件為當遺傳代數(shù)達到規(guī)定閾值或最近三代最優(yōu)個體適應度比值達一定閾值。
??? 同時,,在遺傳過程中可每隔若干代執(zhí)行一次K-means聚類以加快收斂速度,。遺傳結(jié)束后,最末代得到的最優(yōu)適應度個體即為用戶的VQ語音碼書,。
??? 識別階段,,系統(tǒng)先采集一段測試者的語音,提取出MFCC,,稱為測試序列,,然后與用戶VQ碼書比較。如果匹配度達到一定范圍,,則可認為測試者即為碼書表征的用戶,。
2 系統(tǒng)方案與實現(xiàn)
??? 說話人識別系統(tǒng)主要有四項任務:(1)說話人語音采集與有效語音提取,;(2)語音幀MFCC提?。?3)通過遺傳算法計算得到說話人語音VQ碼書,;(4)在說話人識別時實時采集測試者語音并提取MFCC,,然后與已有碼書進行匹配并作出決策。
??? SoPC設計中,,根據(jù)需要可在單FPGA內(nèi)配置多CPU,。本系統(tǒng)配置了雙CPU,兩塊CPU均以同一片SDRAM為運行內(nèi)存,,由Avalon總線模塊提供仲裁機制實現(xiàn)雙CPU對SDRAM的分時訪問,。系統(tǒng)除含有必要的儲存器與語音輸入接口外,還外接PS2鍵盤與LCD,、VGA顯示器等人機交互設備,,整體設計框圖如圖1所示。
?
?
2.1 語音采集與有效語音提取
??? 語音A/D轉(zhuǎn)換由WOLFSON公司的WM8751語音芯片實現(xiàn),。系統(tǒng)上電后,,F(xiàn)PGA內(nèi)的用戶制定配置模塊以I2C時序配置該芯片工作模式為8kHz采樣頻率與16bit采樣深度,,采樣得到的語音數(shù)據(jù)以I2S時序串行傳輸?shù)紽PGA芯片中,。
??? 語音數(shù)據(jù)由采樣芯片傳至FPGA芯片端口后,由用戶制定硬件采集模塊負責接收,,該模塊還負責計算本次收到數(shù)據(jù)的前向差值與平方值,,然后將接收的數(shù)據(jù)、前向差值和平方值通過Avalon總線傳至SRAM,。這樣,,該模塊在實現(xiàn)數(shù)據(jù)采集的同時,完成部分過零率與短時能量計算的工作。SRAM中有兩塊地址固定的數(shù)據(jù)存儲區(qū)A與B,。當采樣模塊采集滿A區(qū)并通知CPU讀數(shù)后,,如果語音芯片繼續(xù)傳來數(shù)據(jù),采樣模塊將接收的數(shù)據(jù)存儲到B區(qū)中,,這樣CPU讀A區(qū)不會與模塊寫B(tài)區(qū)產(chǎn)生沖突,,B區(qū)寫滿后模塊與CPU以相同方式工作。
??? CPU采集到語音數(shù)據(jù)后進一步作分幀處理與靜音檢測,,經(jīng)檢測為有效語音的數(shù)據(jù)幀予以保留,。每一語音幀根據(jù)式(2)、式(3)計算短時能量與過零率,,然后通過雙門限法檢測該段數(shù)據(jù)是否為有效語音,。式(2)、式(3)中,,N為每幀采樣點數(shù),。由于每個采樣點的前向差值與平方值已由數(shù)據(jù)接收模塊算出,CPU只需提出這些值按幀累加即可,。檢測為有效語音的數(shù)據(jù)幀放入SDRAM中的循環(huán)緩沖區(qū)中,,當有效語音數(shù)據(jù)足量后,CPU停止采集模塊工作,。
??? ???
?
2.2 語音MFCC參數(shù)運算
??? 語音采集與檢測過程中,,若采用筆者設計的主-從CPU幀流水MFCC提取結(jié)構(gòu)(圖2),可使語音和MFCC提取在雙CPU上同步進行,,從而提高系統(tǒng)效率,。雙CPU結(jié)構(gòu)中,主CPU完成采集與檢測,,從CPU實現(xiàn)MFCC提取,。該結(jié)構(gòu)工作過程如下:
??????
?
??? 當主CPU采集到一段原始語音數(shù)據(jù)后,對該段數(shù)據(jù)進行分幀與檢測,,然后將有效語音數(shù)據(jù)按幀寫至緩沖區(qū)A2B,,并通過郵箱通知從CPU。若主CPU在下一段原始語音數(shù)據(jù)到來前通過郵箱得知緩沖區(qū)B2A有從CPU處理完成的MFCC,,則將其讀出至主CPU內(nèi)存中,。由于主CPU對MFCC的接收是查詢,對語音數(shù)據(jù)的接收是中斷,,故收發(fā)數(shù)據(jù)不會產(chǎn)生沖突,。由郵箱消息啟動從CPU,一旦獲悉有新語音數(shù)據(jù)到來,,即從緩沖區(qū)A2B中讀取數(shù)據(jù)到從CPU內(nèi)存,。當從CPU運算出MFCC,,將MFCC寫至B2A緩沖區(qū),然后發(fā)送信息至郵箱,。從CPU的內(nèi)存區(qū)內(nèi)設有MFCC緩沖區(qū),,若B2A內(nèi)的數(shù)據(jù)未被主CPU讀完,而新MFCC已經(jīng)提取完成,,則從CPU將新MFCC暫存在緩沖區(qū)中,,待B2A中的數(shù)據(jù)被讀完后再將新MFCC寫入。主從CPU進行通信的郵箱由硬件邏輯資源構(gòu)成,,雙CPU可通過該郵箱同時收發(fā)信息,。
??? 主-從CPU流水結(jié)構(gòu)串行處理語音數(shù)據(jù)可有效加速MFCC參數(shù)的提取,相當于數(shù)據(jù)在雙CPU系統(tǒng)中以幀為單位作流水處理,使語音采集與MFCC參數(shù)提取同步進行,。
2.3 適應度計算硬件結(jié)構(gòu)及遺傳算法實現(xiàn)
??? MFCC參數(shù)提取完成,,設得到N幀M維MFCC。根據(jù)前面討論,,碼書容量選擇為F=64,,若取M=12并加上一階差分參數(shù),N=512,,遺傳個體T=30,;根據(jù)式(1)估算,執(zhí)行一代群體適應度計算至少需作(2M)×N × T × F =23592960≈24M次乘法和48M次加減法,,加上遺傳動作,,執(zhí)行一代遺傳的總步驟更遠遠超過運算次數(shù)。實驗可知,,遺傳收斂代數(shù)大約為40~150,,因此直接用軟件程序?qū)崿F(xiàn)必導致耗時過長。
??? 根據(jù)適應度計算的算法特點,,在設計中采用并行流水結(jié)構(gòu)實現(xiàn)適應度計算,,可大大減少耗時。根據(jù)式(1),,K維空間中兩點之間距離的計算可采用K路并行運算器實現(xiàn),,得到的K路輸出并行進入K輸入加法器,再作開方處理即得到兩點距離,,然后通過比較得到式(1)中的最短距離值 并累加,,再將此距離累加便可得到適應度的倒數(shù)。這一系列計算可通過流水硬件結(jié)構(gòu)實現(xiàn),。
??? 根據(jù)該思路設計的適應度計算的硬件結(jié)構(gòu)框圖如圖3所示,。由圖3可知,CPU將訓練序列與單個個體通過地址分配單元按維寫入K路數(shù)據(jù)存儲與運算單元,,由選擇與控制單元啟動運算,K路并行運算的結(jié)果通過K輸入加法器與距離運算單元得到兩點歐氏距離,選擇與控制單元輸出結(jié)果進行比較,,搜索 并累加,,經(jīng)過N次處理后,得到該個體適應度的倒數(shù),,并由控制與選擇單元以中斷方式將該值返回給CPU,,完成一個個體的適應度運算,。CPU處理完這個個體的適應度值后,,再將下一個個體寫入存儲單元并重復上述過程,,直至求出最佳個體,。
?
?
??? 該適應度運算并行流水結(jié)構(gòu)由硬件實現(xiàn),,執(zhí)行一代群體適應度計算僅需時鐘周期數(shù)為:(F + 1)×N ×T +(2M ×T×F)=1044480≈1M,,遠優(yōu)于軟件實現(xiàn),。
??? 在嵌入式系統(tǒng)中實現(xiàn)遺傳算法,,為降低運算量,,通常要對適應度函數(shù)作各種簡化,,如穩(wěn)態(tài)方式[5],通過限制每一代發(fā)生變化的個體數(shù)量來減少運算,,但是這些改進一定程度上限制了算法的隨機性,。SoPC系統(tǒng)采用硬件資源設計的適應度計算硬件結(jié)構(gòu)加速了適應度運算,克服了算法實現(xiàn)上的難點,。
??? 遺傳聚類算法中,,交叉和變異等遺傳操作主要是對存儲器的讀寫與位操作,采用硬件加速效果提升不大,,因此這部分功能由軟件在處理器上實現(xiàn),。總體而言,,系統(tǒng)設計中,,將運算量小但步驟繁雜的部分通過軟件完成,運算量大的部分通過硬件模塊實現(xiàn),,體現(xiàn)了SoPC設計的靈活性能,。
2.4 實現(xiàn)說話人識別
??? 說話人識別階段是針對說話人的辯識過程,通過VQ特征提取與遺傳算法操作得到的說話人模板的1個64容量的碼書,,其值表征某用戶的個人語音特征,。識別階段,先采集一定量測試者語音并提取MFCC,,由主CPU執(zhí)行測試者語音MFCC和用戶碼書的匹配操作,,匹配度計算公式與適應度計算公式相同。當?shù)玫降钠ヅ涠却笥诮?jīng)驗閾值,,則測試者為合法用戶,,小于閾值則測試者被拒絕,。
3 實驗分析與結(jié)論
??? VQ說話人識別中,參數(shù)的選擇對系統(tǒng)性能有一定影響,。主要可選參數(shù)有訓練序列長度與MFCC維數(shù),;被影響的性能參數(shù)有誤識率,F(xiàn)PGA資源消耗與訓練識別時間,。
??? 實驗測試環(huán)境為普通實驗室,,參與實驗者共24人(男15人,女9人),,測試語音時長不低于5秒,。實驗中,隨機選不同人員語音生成用戶碼書,,然后全體人員參與測試,。
??? 表1為不同參數(shù)設置下系統(tǒng)性能與資源耗用情況。根據(jù)表1可知:在相同的訓練語音時長(即訓練序列幀數(shù))基礎上,,使用MFCC+差分參數(shù)的系統(tǒng)識別率優(yōu)于單純使用MFCC,,但帶來的數(shù)據(jù)處理量、存儲單元和邏輯單元的消耗也相應增大,;同時,,訓練序列幀數(shù)對識別率的影響比提高維數(shù)更加重要。這是因為在訓練語音幀數(shù)有限的情況下,,訓練語音時長對用戶碼書的修正效果更加明顯,,使碼書更能反映用戶的語音特征。但是這樣也帶來大量存儲單元的消耗與訓練時間的增加,。
?
??? 此外,,還進行了不同平臺上相同算法的耗時比較實驗,結(jié)果如圖4所示,。圖4中DSP平臺采用C5502,,PC平臺為主頻1.6GHz的AMD處理器,縱軸表示完成訓練過程的用時,??梢姡捎眠m應度計算模塊的SoPC系統(tǒng)速度性能遠遠優(yōu)于硬處理器系統(tǒng),。
?
參考文獻
[1] O′SHAUGHNESSY D.Speaker recognition.IEEE Acoustic. Speech and Signal Processing Magazine,,1986,3(4):4-7.
[2] SOONG F K.Vector quantization approach to speaker?recognition.ProcICASSP85,,1985:387~390.
[3] 張軍英.說話人識別的現(xiàn)代方法與技術(shù)[M].西安:西北大學出版社,,1994.
[4] 任愛峰,初秀琴,,常存,,等.基于FPGA的嵌入式系統(tǒng)設計[M].西安:西安電子科技大學出版社,,2004.
[5] BORNHOLDT S,GRAUDENZ D.General asymmetric neural networks and structure design by genetic algorithm.Neural?Networks,,1992,,5(2):327-334.
?
?