文獻標識碼: B
文章編號: 0258-7998(2010)07-0024-03
1 算法簡介
說話人識別系統(tǒng)主要實現(xiàn)建模及識別兩方面功能。建模功能提取語音的特征參數(shù)并存儲起來形成用戶模板,。識別功能提取語音的特征參數(shù),,與模板參數(shù)進行匹配,計算其距離,。系統(tǒng)框圖如圖1所示,。本文采用改進的DTW(Dynamic Time Warping)算法和LPCC(Linear prediction cepstrum coefficients)特征參數(shù)。
1.1 LPCC算法
(1)分幀:語音信號具有短時平穩(wěn)性[1],,因此先將其分幀,,再逐幀處理。
(2)有效音檢測:有效音檢測基于短時能量和短時過門限率兩個參數(shù),。判決時采取兩級判斷法:若短時能量高于高門限則判為有聲,;若低于低門限則判為靜音;若介于兩者之間,,則再判斷其過門限率是否高于過門限率門限,,若滿足則判為有聲,否則為靜音。
(3)加窗:加窗可濾去不需要的頻率分量,,同時有利于減少LPCC算法在幀頭及幀尾處的誤差,。本設計采用漢明窗,其表達式如下:
1.2 改進的DTW算法
1.2.1 全局約束
圖2和圖3中,,橫軸為測試語音參數(shù),,縱軸為模板參數(shù),單位為幀,。算法以測試語音為基準逐幀進行。如圖2,,傳統(tǒng)的DTW算法中,,測試參數(shù)長度無法預知時全局約束便無法確定。圖3為改進后的DTW,,可在未知測試參數(shù)長度的情況下進行全局約束,,配合幀同步算法,便于算法的實時處理,。
1.2.2 局部約束
得到當前距離后便要進行前向路徑搜索,。n=1指定與m=1匹配。從n=2開始,,每個交叉點(n,,m)可能的前向路徑為(n-1,m),、(n-1,,m-1)、(n-1,,m-2),,選出其中最小者作為當前點(n,m)的前向路徑,,并將該點的累加距離和加上其當前距離作為當前點的累加距離,。最終在n=N處可得到若干個累加距離,選其最小者為最終匹配結果,。
1.3 Matlab仿真
1.3.1 實驗1:對個性信息的識別能力
實驗1的目的在于觀察算法對于話者個性信息的識別能力,,實驗用的語音均為各話者對正確詞“開門”的發(fā)音,以避免不同單詞帶來的影響,。實驗結果如圖4所示,,系統(tǒng)的等錯誤率(EER)為0.01,即當錯識率為0.01時錯拒率也為0.01,。
1.3.2 實驗2:對語意信息的識別能力
實驗2的目的在于觀察識別算法對于語意的識別能力,,實驗用的語音均為同一話者對正確詞及錯誤詞的發(fā)音,以避免因不同話者帶來的影響,。如圖5所示,,在門限為1.25時得到系統(tǒng)的等錯誤率(EER)為0.01,。比較實驗1、實驗2的結果可知,,算法對語義的識別能力和對話者個性信息的識別能力相近,。
1.3.3 實驗3:綜合測試
實驗3綜合考慮了話者的個性信息及語意信息。如圖6所示,,在門限為1.4時,,得到系統(tǒng)的等錯誤率為0.01,也即此時系統(tǒng)的正確識別率為99%,,同時存在1%的錯誤識別率,。
2 SoPC系統(tǒng)構建
(1)CPU設置。NiosII core選定為NiosII/f,。使能嵌入式硬件乘法器,。復位地址設為cfi_flash,異常向量地址設定為ssram_2M,,在custom instructions中添加用戶自定義指令floating Point Hardware,。
(2)定時器設置。本設計使用了兩個定時器,。Timer用于產(chǎn)生內部中斷采集語音樣點,,設其計時周期為125 μs(對應采樣率8 kHz)。Timer_stamp用于插入時間標簽,,定時周期采用默認值,。
(3)其他外設。NiosII核中還包含以下外設:片上RAM/ROM,、FLASH,、SDRAM、SSRAM,、按鍵,、開關、LED,、音頻模塊,、七段數(shù)碼管、LCD,。
3 軟件流程
總體工作流程如圖7所示,。系統(tǒng)首先初始化,然后讀出模板數(shù)據(jù),,等待用戶按下按鍵,。在此期間,用戶應設置好系統(tǒng)工作模式(建模或識別)及話者代碼,。然后按下按鍵開始以中斷方式采集語音,,并運行函數(shù)主體。
識別部分流程如圖8所示,。函數(shù)首先判斷語音是否已經(jīng)采集完畢及LPCC算法是否已經(jīng)進行到最后一幀,,若同時滿足則結束運算,否則繼續(xù)運行,。若當前幀為有效音,,則計算出其LPCC,并調用DTW子函數(shù),,針對各模板分別計算距離得分,。運算完所有語音幀后,便可得到測試語音對各模板的最終得分,,取其最大者記為當次得分。若該得分大于得分門限,,則識別通過,;否則予以拒絕。
建模部分流程的前半部分與識別過程類似,,不同之處在于建模過程只調用了LPCC算法,。算法完成后,系統(tǒng)將LPCC矩陣寫入對應的Flash地址空間存儲,。
4 軟硬件協(xié)同設計與優(yōu)化
4.1 軟件設計與優(yōu)化
(1)將數(shù)據(jù)緩存至SDRAM,。最初的程序設計中使用數(shù)組存儲大型變量,后來改為將這些數(shù)據(jù)緩存于SDRAM中,。改進后,,在板運行速度無明顯改變,但NiosII軟件的運行速度及穩(wěn)定性得到了提高,。
(2)用float數(shù)據(jù)類型代替double,。最初的程序大量使用了雙精度數(shù)據(jù)類型,但后來發(fā)現(xiàn)單精度浮點型已經(jīng)可以滿足要求,,因此將數(shù)據(jù)類型改為單精度浮點型(float),,使得程序運行速度提升了一倍。
(3)用指針方式訪問數(shù)組,。改用指針的方式訪問數(shù)組改善了程序的執(zhí)行效率,,運行速度有一定提升。
(4)用讀表法獲取漢明窗函數(shù),。最初的程序是通過運算公式的方式得到窗函數(shù)的各個樣點值的,,后改用讀表法,使得加漢明窗這一步驟耗時減少了98.7%,整個LPCC運算耗時因此減少了59.3%,。
(5)語音數(shù)據(jù)存儲為float類型,。最初的設計中,系統(tǒng)采集到原始語音數(shù)據(jù)后直接將其存儲起來,,后來改為將數(shù)據(jù)解碼后再存儲,,使得LPCC中取語音部分的時間由888 μs降至98μs。
4.2 硬件設計與優(yōu)化
(1)用定時器中斷方式采集語音,。最初的設計中,,系統(tǒng)必須在采集完所有語音數(shù)據(jù)之后才能對其進行處理。后改用中斷方式采集語音,,則可實現(xiàn)每采集滿一幀語音數(shù)據(jù)便進行處理,,極大地提升了處理速度。
(2)添加用戶自定義浮點指令,。語音信號處理過程涉及大量單精度浮點型數(shù)據(jù)的運算,,因此在CPU中添加浮點指令。加入浮點指令后,,系統(tǒng)耗時降低了90%以上,。
本設計在算法上充分利用了DTW算法的特點,既能識別語音內容又能區(qū)分說話人,,很好地完成了文本有關的說話人識別功能,。同時對識別算法進行幀同步處理,為算法的實時實現(xiàn)打下基礎,。本設計在實現(xiàn)時采用軟硬件協(xié)同設計方法,,在軟件和硬件上進行設計和優(yōu)化,使得設計有很好的實時性,。
作品的實際測試情況是:選取門限為1.5時,,系統(tǒng)的錯識率可降至0%,此時正確識別率為90%,,還有10%的拒識,。識別時系統(tǒng)的響應時間是8.5 ms。
參考文獻
[1] 趙力.語音信號處理[M].北京:機械工業(yè)出版社,,2003.
[2] 馬志欣,,王宏,李鑫.語音識別技術綜述[J].昌吉學院學報,,2006(3).
[3] 周立功.SoPC嵌入式系統(tǒng)基礎教程[M].北京:北京航空航天大學出版社,,2006.
[4] 周鳳偉,劉操.1比特Sigma Delta調制在DSD中的應用[J].廣播與電視技術,,2010(1).
[5] 沈佳銘.一種可重構的24bitΣ-Δ調制器的設計[J].微電子學與計算機,,2007,,24(4).
[6] 石博雅.G.726語音編解碼器在SoPC中的實現(xiàn)[J].電子技術應用,2005(8).
[7] 葛保建.基于SoPC的軟硬件協(xié)同設計平臺的研究與實現(xiàn)[D].武漢科技大學碩士學位論文集,,2008(3).