梁小龍,劉九龍,歐陽歆,盧 仕,宋 敏,徐 磊
(湖北大學 物理與電子科學學院,湖北 武漢 430061)
生活垃圾分類不合理等問題加重了環境污染[1],國家發改委及住建部于2017年3月發布了《生活垃圾分類制度實施方案》,隨著《生活垃圾分類制度實施方案》的不斷貫徹落實,越來越多的城市采取了生活垃圾強制分類措施。但垃圾分類給市民帶來的煩惱也隨之產生:生活垃圾如何分類困擾了大部分人。
為解決生活垃圾分類難的問題,文中設計實現了一種基于FPGA的智能語音垃圾箱。
智能垃圾箱的控制系統主要由FPGA芯片(Artix-7 XC7A75T)、WM8978語音采集電路、SD卡、4路舵機組成。
FPGA芯片作為主控,接收WM8978芯片通過麥克風采集的語音信號,即使用者說出的垃圾名稱,然后進行語音識別,識別結果分為4種,即干垃圾、濕垃圾、可回收垃圾與有害垃圾,識別完成后讀取存儲于SD卡中的4種識別結果的音頻文件,語音播報匹配結果,之后控制4路舵機實現相應垃圾箱蓋的開合。
所有子電路和模塊均連接到FPGA芯片的GPIO口,在FPGA中設計各子電路的控制模塊以及其余功能模塊,包含WM8978控制模塊、FFT模塊、識別結果播報模塊、舵機控制模塊、SD卡讀取模塊、特征提取與模板匹配模塊,分別完成語音信號采集、語音信號預處理、識別結果播報、垃圾箱蓋開合控制、SD卡語音播報文件的讀取、待處理語音信號的特征提取與模板匹配工作。
系統組成如圖1所示。

圖1 系統組成
語音識別引擎大致分為2種類型:模板識別和聲學語音系統。前者使用已知或經過訓練的模板來確定是否匹配,后者使用人體屬性比較語音特征(如元音等)[2]。對于垃圾名稱的識別,詞匯量較小,且為孤立詞識別,所以本系統采用模板識別方案,具體語音識別流程如圖2所示。

圖2 語音識別流程
在本項目中,使用FFT變換對語音信號進行預處理,借助MATLAB制作識別模板,模板數據庫包含“菜葉”“紙巾”“藥瓶”“易拉罐”4個詞匯的特征參量,存儲于FPGA的片上ROM中。
語音信號經麥克風采集后被存儲為時域信號,時域信號中包含的信息隨時間的變化而變化,通過對頻域信號進行分析,能獲取在時域信號中很難觀察的信號特征[3]。由于本文提出的系統僅為語音識別與智能家居產品相結合的嘗試,所以采用標準傅里葉變換對信號進行頻域分析。
語音信號預處理模塊負責完成快速傅里葉變換以及結果取模的語音信號預處理工作,快速傅里葉變換使用Xilinx提供的XFFT IP核進行,取模過程中的開平方運算利用CORDIC IP核的square root完成。
結合XFFT IP核特點,本系統選擇8 kHz采樣頻率,采取16 384個樣本點后進行FFT變換。完成FFT變換后,進入CORDIC IP核進行取模運算,輸出語音信號的頻譜圖。
FFT作為DFT的一種快速算法,具有DFT的圓周共軛對稱性質,模|F(k)|滿足圓周偶對稱關系,即在k=N處補上與k=0處相同的序列值后,關于k=N/2成鏡像對稱[4-5]。
為減少后面特征提取及模板匹配模塊的工作量,根據對稱性完成預處理后,僅將前一半的數據傳輸至特征提取與模板匹配模塊。
圖3展示了語音信號預處理模塊仿真圖中存儲的語音信號時域圖。對語音信號預處理模塊進行功能仿真前,先使用MATLAB錄制一段語音信號,在仿真頂層模塊中讀取該語音文件,通過adc_data接口傳輸至語音信號預處理模塊,觀察該模塊中保存的語音信號時域圖,縮小后可以看到,與MATLAB獲得的時域圖保持一致,說明該模塊已正確存儲語音信號。

圖3 FFT模塊仿真圖1
圖4展示了該模塊對輸入信號進行FFT變換、取模后的輸出信號仿真圖,將語音信號的頻譜圖與MATLAB處理結果進行比較,兩幅圖的形狀保持高度一致,說明該模塊功能正常。

圖4 FFT模塊仿真圖2
語音識別過程的關鍵在于特征提取與模板匹配[6]。
本系統中,模板匹配即為頻譜圖匹配,將輸入的語音信號頻譜圖與各模板比較,與其最相似的頻譜圖即為識別結果。在特征提取過程中,需提取出頻譜圖的特征參數,本系統中選用“極大值點位置”作為頻譜圖的特征參數,算法步驟如下。
(1)存儲數據,計算均值。接收待處理語音信號的頻譜圖,接收完成后計算頻譜圖中所有點的均值。
(2)尋找極大值點。依次遍歷頻譜圖中的數據點,若某個數據點大于設定的閾值,便認為該點為一個極大值點,將所有極大值點位置依次保存到特征數組中,該數組即為該頻譜圖的特征參數。
(3)計算相似程度。依次比較特征數組與模板數組各點數據值,設定閾值,進行比較,若兩數組某點數據絕對值的差小于該閾值,則相似度加1。
(4)尋找最大相似度模板。與特征數組相似度最高的模板數組即為識別結果。
模塊為二段式有限狀態機,各狀態跳轉示意圖如圖5所示。

圖5 特征提取及模板匹配狀態跳轉圖
舵機控制模塊接收語音識別模塊輸出的識別結果,控制相應舵機運動:當接收到識別完成的信號后,根據識別結果打開相應舵機,經過一定時間后關閉此舵機。舵機控制模塊工作流程如圖6所示。

圖6 舵機控制模塊流程
識別結果播報模塊配合SD卡讀取模塊的工作,當語音識別完成后,讀取識別結果,根據結果選擇存儲于SD卡中相應音頻文件,進行語音播報。
語音模板制作借助MATLAB、特征提取及模板匹配模塊完成。FPGA控制模塊將得到的特征數組通過串口發送至計算機,對同一詞條進行4次相同的操作,即得到4個樣本頻譜圖,在MATLAB中對4個樣本頻譜圖取均值后按照VIVADO片上ROM IP核固化文件格式保存模板。
圖7展示了模板制作過程,即對4個樣本頻譜圖取均值后,輸出最終模板并保存。

圖7 模板制作過程
垃圾箱機械結構如圖8所示。4個垃圾箱蓋依靠4個獨立的舵機開合,內部使用十字隔板將空腔分為4部分,分別用于收集干垃圾、濕垃圾、可回收垃圾和有害垃圾。FPGA開發板、WM8978模塊電路、電源電路等均置于垃圾箱底部隔板內。

圖8 垃圾箱機械結構示意
測試前,使用手機錄制4個特定詞匯“菜葉”“紙巾”“藥瓶”“易拉罐”的音頻,測試時作為語音指令進行隨機播放。進行100次整體性能測試,記錄測試數據,并計算正確率。測試結果見表1所列。

表1 測試數據
由測試結果可知,該系統具有較高的識別正確率,但仍有改進的空間,使得系統實用性更強,改進方向分為如下2個方面:
(1)使用MFCC法提取特征參數[7-8];
(2)采用隱馬爾可夫模型作為語音識別的算法[9-10]。
本設計采用含Artix-7 XC7A75T芯片的FPGA開發板,應用WM8978模塊、SD卡、4路舵機實現具備語音指令采集、語音指令識別、識別結果播報、垃圾箱蓋自動開合等功能的智能語音垃圾箱。
在國家大力推行生活垃圾分類的背景下,智能語音垃圾箱的出現使生活垃圾的分類更加便捷、高效,由于無需連接互聯網,因此可充分保證用戶隱私,雖然目前人們對智能垃圾箱的認可度不高,但隨著生活垃圾分類政策的不斷推行,智能垃圾箱會不斷融入我們的生活。