成利江,景新幸,楊海燕
(桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
基于SOC FPGA的車載語音識別系統設計
成利江,景新幸,楊海燕
(桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
針對車載語音識別系統對實時性要求高、小型化及低功耗等要求,提出了一種基于SOC FPGA的語音識別系統的設計方案。該系統采用軟硬件結合的設計思路,語音信號采集及預處理部分由FPGA的Verilog DHL實現;特征參數提取及模式匹配算法由ARM核處理器在內核Linux系統上用C語言實現。硬件板級測試表明,該系統識別速度分別為DSP系統的4.59倍及嵌入式ARM系統的1.96倍。
語音識別;片上系統;可編程門陣列;梅爾倒譜
隨著我國汽車的普及度不斷提高,人們對汽車駕駛的舒適性和安全性要求也越來越高,因此在汽車上安裝語音識別系統將擁有較好的市場前景。車載環境下的語音識別系統在保證識別準確率的前提下,必須考慮系統實時性及小型化等問題,否則難以保證高速狀態下汽車的安全性。
鑒于此,設計了基于FPGA的語音識別SOC系統[1]。該系統利用FPGA的Verilog HDL語言及ARM硬核Linux系統下的C語言實現語音識別,包括對WM8731音頻編解碼芯片的配置及語音預處理、特征提取及模式匹配算法的實現等,并對語音分幀加窗及端點檢測等模塊進行了硬件優化,在Quartus II中對Qsys及各個Verilog HDL下的自定義模塊進行連線,通過DS-5進行底層硬件與軟件的設置及調試。
語音識別由語音的訓練過程和識別過程組成。在語音訓練時,通過錄入說話人的語音并對語音信號進行分析,得到各幀語音信號的特征參數,以此為基礎建立語音模型;當進入語音識別模式時,系統對輸入的語音數據進行與訓練時相同的處理,并提取語音特征參數,將提取的語音特征參數與語音模板進行匹配,最后得到與輸入語音匹配距離最接近的模板作為識別結果。語音識別系統實現流程如圖1所示。

圖1 語音識別系統流程Fig.1 Process of speech recognition
1.1 語音信號預處理
在對語音信號進行特征提取之前,要對語音信號進行預處理,主要包括AD轉換、預加重、分幀加窗、端點檢測。
1.1.1 語音信號預加重
受口唇輻射的影響,語音信號高頻分量分辨率很低。為了增加語音的高頻分量,使信號頻譜變得平坦,對語音信號進行預加重處理。一般采用傳遞函數為H(z)=1-0.93z-1的一階高通濾波器來實現預加重。
1.1.2 語音信號分幀加窗
由于人在發音時具有連貫性,在很小的時間段里語音信號接近不變,即語音信號是短時平穩的。因此可以將語音信號分為一些短段(幀)來處理。為了使幀與幀之間平滑過渡,分幀時采用交疊分段的方法,前一幀與后一幀的交疊部分為幀移[2]。分幀與幀移如圖2所示。

圖2 幀長與幀移Fig.2 Frame length and frame shift
語音分幀用一個有限長度的窗口進行加權的方法實現,窗函數沿時間方向移動,用以分析任意幀語音。加窗運算的定義如下:
(1)
加窗運算為一種卷積運算,語音識別比較常用的窗函數有矩形窗和漢明窗。矩形窗:

(2)
漢明窗:
(3)
式(2)、(3)中N為窗長。
1.1.3 語音信號端點檢測
為了壓縮語音信號幀長度,使語音信號更緊湊,需要提取語音信號的非靜音部分,即語音信號的端點檢測[3]。本系統采用短時能量和短時平均過零率雙門限法進行端點檢測。短時平均能量為:
(4)
短時過零率即語音信號幀中波形通過零點的次數。由于語音信號高頻段的過零率比低頻段高很多,因此可以用短時平均過零率來區分語音信號的清濁音。第n幀信號Xn(m)的短時平均過零率為:
(5)
其中:

(6)
一般語音信號的非語音部分,En、Zn變化均不明顯,而在非語音段和語音段的過渡階段,這2個參數變化要明顯得多,因此,可通過這2個參數的變化情況判斷信號是否進入語音段。
1.2 語音信號特征提取
人耳對聲波頻率大小的感應與實際頻率的大小近似成對數關系,因此,人對聲音頻率大小的感知并非呈現為線性關系;而MEL頻率尺度與實際頻率近似呈對數關系,其能較好地模仿聽覺特性。聽覺實驗結果表明,利用MEL頻率倒普系數(MFCC)作為特征參數,系統具有較高的識別率,同時其魯棒性較好。MFCC的計算過程如下:
首先,需將時域信號轉換成頻域信號,也就是將語音幀時域信號Xn作離散快速傅里葉變換,得到語音信號的離散功率譜Pn(k),
(7)
再將Pn(k)通過三角濾波器組,計算各頻帶內的能量和,得到矢量參數:
(8)
最后,對Tn(m)作對數運算,將對數值通過離散余弦變換得到MFCC參數。離散余弦變換公式為:
(9)
其中:M為三角濾波器組的階數;L為Mel頻率倒普特征參數的維數。由于語音特征參數波動隨其維數的增大而變小,一般取12~16維較為合適,本系統選取12維。
1.3 DTW模式匹配
動態時間規整(dynamic time warping,簡稱DTW)算法是一種將時間規整與距離測度計算相結合的非線性規整技術,其解決了測試語音與匹配模板語音長度不等的難題。
設待試語音特征矢量序列為R={R(1),R(2),…,R(n)},1≤n≤N。其中:R(n)為第n幀特征矢量;N為待測語音的總幀數。參考模板特征序列為T={T(1),T(2),…,T(m)},1≤m≤M。其中:T(m)為參考模板第m幀特征矢量;M為參考模板的總幀數。DTW算法通過時間規整函數m=ω(n),把待測模板的時間軸非線性地映射到參考模板的時間軸上,其表達式為:

(10)
最佳路徑累加距離為:
2.1 語音信號AD采樣模塊
根據語音信號的頻率范圍,本系統的采樣頻率設為8 kHz,整個采樣過程由24位語音編解碼芯片WM8731實現[4],通過I2C總線對芯片配置模式,其重點配置的寄存器參數有數據轉換長度、采樣頻率、工作模式的設置、數據對齊方式。本系統采用16位數據轉換長度,音頻芯片設置為從模式,數據對齊方式為左對齊,一次采集數據的時長為3.2 s。由于該芯片輸出為16位PCM碼,用Q8格式的16位定點數表示PCM碼。WM8731的配置字設置及定義如表1所示。

表1 WM8731控制字
2.2 預處理模塊FPGA硬件優化
2.2.1 分幀加窗算法FPGA硬件優化
本系統一幀為256個采樣點,幀移與幀長的比值為1/2,故幀移的采樣點為128個;采用2個FIFO實現幀移動,FIFO的深度為256幀長。通過狀態機實現2個FIFO之間的讀寫控制及輸入輸出的切換。控制過程的狀態轉移如圖3所示。

圖3 分幀模塊狀態機Fig.3 State process of frame shift
FIFO1、FIFO2的讀寫控制信號分別為r_1、r_2、w_1、w_2;stack_half_1為FIFO1的半滿標志位,stack_half_2、stack_empty_2為FIFO2的半滿標志位及空標志位。各個狀態之間的轉移操作如下。
S0:初始化狀態。en_state為高電平時進入S1態。
S1:FIFO1寫信號w_1置1,讀信號r_1置1;FIFO2寫信號w_2置1,讀信號r_2置0。當stack_half_1為高電平時,進入S2狀態。
S2:FIFO1寫信號w_1置0,讀信號r_1置0;FIFO2寫信號w_2置0,讀信號r_2置1;當stack_half_1及stack_half_2為高電平,stack_empty_2為低電平時,進入S3狀態。
S3:FIFO1寫信號w_1置1,讀信號r_1置1;FIFO2寫信號w_2,讀信號r_2置0;當stack_half_1及stack_empty_2為高電平,stack_half_2為低電平時,進入S3狀態。分幀模塊的Modelsim仿真如圖4所示。

圖4 分幀模塊仿真Fig.4 Simulation of frame shift
分幀后要經過加窗處理,該系統使用漢明窗[5],利用查找表的方法對數據實現加窗處理。先用Matlab生成256個點的窗函數值,存入深度為256的ROM中,用計數器鏈接ROM的地址線,當計數到256時計數器清零。用分幀后的信號乘ROM中對應點的值,得到加窗后的信號。
2.2.2 端點檢測模塊FPGA硬件優化
端點檢測模塊的準確性對整個語音識別系統至關重要,大部分無法識別的情況都是由端點檢測不準確造成的。該系統由硬件實現端點檢測,并對預進入語音段延長到10幀,增強系統實時性的同時,10幀的距離可有效地防止錯誤進入或退出語音段。
短時能量及短時過零率的計算模塊的Modulsim仿真結果如圖5所示。

圖5 短時能量與短時過零率的仿真Fig.5 Simulation of short-time energy and short-time zero crossing rate
從圖5可看出,輸入testbench的仿真數據,第1幀的短時能量為26,2~9幀的短時能量為27,前10幀的短時能量平均值(能量門限)為23;第1幀的短時過零率為125,2~9幀的短時過零率為128,前10幀的短時過零率平均值(過零率門限)為111。
在端點檢測單元中:en為輸入使能標志位;energy、zero分別為輸入幀的短時能量、短時過零率;前5幀信號的平均短時能量和短時過零率作為閥值分別記為Genergy、Gzero;counter1、counter2為幀計數器;確定起始語音幀和結束語音幀延續幀長寄存器分別為start_longth和finish_longth;寄存器frame_start、frame_end分別為起始幀、結束幀幀數。端點檢測模塊用狀態機實現的具體步驟如下:
1)初始化各單元。
2)en有效時,幀信號經過子單元計算出輸入幀短時能量與短時過零率,并得出前10幀信號的Genergy和Gzero。
3)端點檢查單元進入待檢測狀態S0。
4)當energy>Genergy或zero>Gzero時,進入語音數據起點的臨界狀態S1,counter2開始計數,若energy 5)當energy 端點檢測模狀態機如圖6所示。端點檢測模塊的Modelsim仿真結果如圖7所示。 圖6 端點檢測模塊狀態機Fig.6 State process of point detecting module 圖7 端點檢測模塊仿真Fig.7 Simulation of point detection 從圖7可看出,當counter2=start_longth=9時,進入有效數據狀態,此時frame_start寄存器的值為46;當counter2=end_longth=9時,進入靜音數據狀態,此時frame_end寄存器的值為79。 2.3 DTW模式匹配算法實現 DTW算法在孤立詞識別中有較好的表現,故本系統采用DTW算法來實現模式匹配模塊[5]。ARM處理器對之前提取的MFCC特征參數與訓練階段儲蓄于內存的模板庫詞條進行DTW模式匹配,最終將匹配結果輸出給LED控制器。C語言實現DTW模塊流程如圖8所示。首先對參數值初始化,設置模板庫中的矢量詞條數,并標記為rflag。然后分配距離矩陣的內存空間,讀取當前模板庫中的詞條特征值矢量,讀取待測詞條特征矢量,計算各幀距離及幀最小累積距離。此時rflag加1,判斷是否小于模板庫詞條的總數,若是,則返回輸入參考模板步驟繼續重復上面的測試;否則,結束測試,輸出測試結果。 圖8 DTW模塊流程圖Fig.8 Flow chart of DTW module 3.1 硬件部分 本系統采用Altera公司基于28 nm工藝的cyclone v系列FPGA。該FPGA使用帶寬互聯干線鏈接,將基于ARM硬核處理器的系統(hard processor system,簡稱HPS,)集成在FPGA核心芯片中。本系統的實現平臺為DE1開發板,包括雙核ARM Cortex-A9處理器、FPGA上64 MB SDRAM、HPS上1 GB DDR3 SDRAM、24位語音編解碼芯片wm8731、若干外設及自定義組件。整個系統分為FPGA、HPS兩部分,兩者間的通信由AXI[6]橋實現,HPS端各外設與ARM之間由Avalon總線進行互聯[7],并按需求配置各外設參數。本系統整體框架如圖9所示。 FPGA部分語音信號首先由麥克風輸入到WM8731芯片進行語音AD采樣,采樣得到的數據經過一級FIFO存入SDRAM中,然后以流水線方式經過預加重、分幀加窗、端點檢測模塊,并將處理后的數據由HPS-to-FPGA axi bridge供HPS讀取,同時在Linux系統中的應用程序對數據進行MFCC處理并將處理后的數據存入DDR3中作為參考模板。通過LightWeight HPS-to-FPGA Bright來實現語音特征模板的存儲模式和模板匹配模式的轉換。在匹配模式時,Linux系統通過Avalon-MM總線讀取DDR3中的模板對被測模板進行模板匹配[8],最后映射HPS外設區域PIO控制器物理地址到虛擬地址,得到pio_led的虛擬地址[9],將該地址對應各個特征模板,供應用程序調用輸出。 圖9 系統整體框架Fig.9 Framework of the system 3.2 軟件部分 軟件部分主要完成3個功能:1)獲取FPGA端的語音數據,并對此數據進行MFCC處理后傳輸到HPS端的DDR3;2)通過輕量級HPS-to-FPGA橋總線,控制系統進行語音識別模式和采集模式的轉換;3)將PIO_LED控制器物理地址映射到應用程序可以訪問的虛擬地址。 程序中先用nmap()函數將HPS-to-FPGA橋和輕量級HPS-to-FPGA橋的物理地址空間映射到Linux內核虛擬地址空間,供應用程序訪問虛擬地址。映射完成后,通過端點檢測模塊在Qsys中分配地址,以訪問到此模塊。部分代碼如下: unsigned char GetBmpData,unsigned char*bit Countperpix,unsigned int*width, unsigned int*height,const char*filename,unsigned long*menory_vip_frame; lw_axi_virtual_base=nmap(null,hw_regs_span,(prot_read|prot_write),map_shared,fd,hw_regs_base); axi_virtual_base=nmap(null,hw_fpga_axi_span,(prot_read|prot_write),map_shared,fd,alt_axi_fpgaslvs_ofst); 為了實現對LED的控制,先在hps_led.h的頭文件中找到pio_led在Qsys中分配的相對于lwaxi的基地址pio_led_base,pio_led位寬信息表示為宏定義pio_led_data_width。將pio_led的物理地址映射為應用程序可以訪問的虛擬地址時,系統調用open函數打開memory設備驅動“/dev/mem”,調用mmap函數映射HPS的L3外設區域物理地址到虛擬地址,并表示為一個空指針變量virtual_base。通過virtual_base增加輕量級HPS-to-FPGA AXI總線相對于HPS的L3外設區域基地址的偏移地址和pio_led相對于輕量級HPS-to-FPGA AXI總線的偏移地址,計算得出pio_led的虛擬地址。pio_led的虛擬地址被定義為空指針h2p_lw_led_addr,應用程序可以直接用該指針變量訪問pio_led控制器的寄存器。 部分關鍵程序如下: Virtual_base=nmap(null,hw_regs_span,(prot_read|prot_write),map_shared,fd,hw_regs_base); h2p_lw_led_addr=virtual_base+((unsigned long)(alt_lwfpgaslvs_ofst+pio_led_base)&(unsigned long)(hw_regs_mask))。 對LED進行控制時,應用程序將每個輸出結果對應相應的輸入寫入PIO控制器,如“開窗”命令時,應用程序將0x0FFFFFF1值寫到偏移地址為0的寄存器中,對應第一盞燈點亮,其他各個命令同理點亮其他LED燈。 在車載環境下對系統進行測試,將系統初始化,并對“開窗”、“關窗”、“左轉燈”、“右轉燈”、“雨刷”5個詞分別進行100次識別。板級識別準確率如表2所示。 表2 板級識別準確率 在基于Cyclone V的設計中,利用Quartus II進行時序分析,在100 MHz的時鐘頻率下,關鍵路徑仍然保有14 ns的余量。經過測試分析,分幀模塊與加窗模塊分別只需4.096 ms,而端點檢測模塊由于要先計算能量以及平均過零率,經過端點檢測模塊測試端點,再將數據存入SDRAM緩存,并根據端點檢測結果對SDRAM中對應幀進行提取,數據手冊查SDRAM的存取需要6個時鐘周期,因此整個端點檢測需要9個流水線流程,需要36.882 ms。MFCC及DTW模式匹配由ARM核軟件實現,分別耗時31.011、18.387 ms。系統各模塊耗時見表3。 表3 系統各模塊耗時 嵌入硬核ARM Cortex-A9處理器的SOC FPGA語音識別系統在保證識別率的前提下,分別與PC、DSP及ARM上運行的語音識別系統進行實時性對比,結果如表4所示。從表4可看出,本系統的識別速度為PC機的9.24倍,DSP系統的4.59倍,ARM系統的1.96倍。 表4 不同平臺實時性對比 以SOC FPGA架構設計了車載語音識別系統,相比傳統的基于DSP的語音識別系統,基于FPGA的片上系統(SOC)具有體積小、功耗低、靈活性高、實時性好的優點。而與傳統的ASIC系統相比,避免了流片的高成本風險,同時具有ASIC所不具備的靈活性。并且相對于基于ARM處理器的嵌入式系統,SOC FPGA系統具有FPGA實現簡單算法時對大數據進行并行高速處理的能力和ARM硬核處理復雜算法時強大的軟件編程能力,在保證識別率的同時兼顧實時性及穩定性。不足之處是在此車載語音識別系統中,并未考慮車載環境下的噪聲因素,以后可以在FPGA部分加入去噪模塊來提高系統的識別率,這也是SOC FPGA可定制及方便系統升級的一大優勢。 [1] EZHUMALAI P,MANOJKUMAR S,ARUM C.High performance hybrid two layer router architecture for FPGAs using network-on-chip[J].International Journal of Computer Science and Information Security,2010,7(1):266. [2] 楊釧釧.基于FPGA的非特定人孤立詞語音識別系統設計與實現[D].西安:西安電子科技大學,2014:37-38. [3] KEPUSKA V Z,HUSSIEN A.Robust speech recognition system using conventional and hybrid features of MFCC,LPCC,PLP,RASTA-PLP and hidden markov model classifier in noisy conditions[J].Journal of Computer and Communications,2015,3(6):1-9. [4] 王海榮.基于SOPC嵌入式數字存儲音頻采集與回放系統設計[J].山東農業大學學報(自然科學版),2014(2):223-228. [5] JING Xinxing,SHI Xu.Speech recognition based on efficient DTW algorithm and its DSP implementation[J].Procedia Engineering,2012,9(8):832-836. [6] LANDING E,KROGER B.Cephalopod ancestry and ecology of the hyolith “Allatheca” degeeri s.l.in the cambrian evolutionary radiation[J].Palaeogeography Palaeoclimatology Palaeoecology,2012,4(10):21-30. [7] ANONYMOUS.Altera's Quartus II Software Version 11.0 Features the Production Release of Qsys System Integration Tool[M].San Jose:Altera Corporation,2011:114-117. [8] KYUNG H M,PARK G,JONG W K.Design and implementation of performance analysis unit (PAU) for AXI-based multi-core system on chip (SOC)[J].Microprocessors and Microsystems,2011,34(2):102-116. [9] Patel J J,Reddy N,JIGNESHKUMAR J P,et al.Linux platform for data acquisition systems[J].Fusion Engineering and Design,2014,13(2):211-212. 編輯:張所濱 Design of SOC FPGA based on board speech recognition system CHENG Lijiang, JING Xinxing, YANG Haiyan (School of Information and Communication Engineering, Guilin University of Electronic Technology, Guilin 541004, China) Aiming at the high demand of real-time performance and miniaturization and low power consumption of speech recognition system in vehicle environment, an on-board voice recognition system is designed based on SOC FPGA. The system is designed by combination of software and hardware. Speech signal acquisition and preprocessing part realized by VDHL of FPGA. Characteristic parameters extraction and pattern matching algorithm are implemented by C language in the Linux kernel of ARM. Board-level hardware tests show that the system's recognition speed is 4.59 times of DSP system and 1.96 times of the embedded ARM system separately. voice recognition; system on chip; FPGA; MFCC 2016-03-06 廣西自然科學基金(2012GXNSFAA053221);廣西千億元產業產學研用合作項目(信科院0168) 楊海燕(1975-),女,山西運城人,副教授,研究方向為語音信號處理。E-mail:yhy@guet.edu.com 成利江,景新幸,楊海燕.基于SOC FPGA的車載語音識別系統設計[J].桂林電子科技大學學報,2016,36(6):454-460. TP391.42 A 1673-808X(2016)06-0454-07


3 系統整體架構

4 系統測試



5 結束語