該設計運用三星公司的S3C2440,結合ICRoute公司的高性能語音識別芯片LD3320,進行了語音識別系統的硬件和軟件設計。在嵌入式Linux操作系統下,運用多進程機制完成了對語音識別芯片、超聲波測距和云臺的控制,并將語音識別技術應用于多角度超聲波測距系統中。通過測試,系統可以通過識別語音指令控制測量方向,無需手動干預,最后將測量結果通過語音播放出來。 1.引言
語言是人類傳播信息的重要手段,語音識別則是實現語音控制的關鍵技術。采用嵌入式語音識別技術使得設備具有功耗低、使用簡便、靈活等優點,擺脫了復雜按鍵和按鈕的困擾,在服務機器人、智能家居及消費電子等領域發揮著重要作用。
2.系統構成與原理
語音識別主要包括兩個階段:訓練階段和識別階段。在訓練或識別過程中,都必須對輸入語音進行預處理和特征提取。訓練階段通過用戶輸入的若干次訓練語音,經過預處理和特征提取后得到特征參數,最后通過特征參數建模,進而建立訓練語音的參考模型庫。而識別階段是將輸入語音的特征矢量參數和參考模型庫中的參考模型進行相似性度量,然后把相似度最高的輸入特征矢量作為識別結果輸出,從而達到語音識別目的,如圖1 所示。
語音識別技術可分為:特定人識別和非特定人識別兩種。特定人識別是指需要對待識別人的語音進行采集訓練,識別對象為專門的人;非特定人識別是指識別對象為大多數用戶,一般要采集多個人的語音進行錄音、訓練和學習,從而達到較高的識別率。
在實際應用中,現代技術開發嵌入式語音識別有兩種實現方式:調入嵌入式語音開發包和外擴語音識別芯片。本文的語音識別系統方案是以嵌入式處理器S3C2440 為核心,外擴非特定人語音識別芯片LD3320,并將超聲波測距模塊和云臺相結合作為系統的機械執行機構。系統測量過程如下:首先根據語音指令控制兩自由度云臺的位姿,使超聲波探測器指向特定方向,然后開啟超聲波探測器,測量出前方障礙物距離,最后將測量結果轉化為可以播放的二進制數據流,通過LD3320的播放功能完成數據的播放。
3.硬件電路設計方案
硬件電路主要包括語音識別部分、主控部分、超聲波測距部分和舵機控制部分,如圖2 所示。處理器為三星公司的S3C2440,系統主頻最高可達533 MHz,支持SPI、I2C、UART等接口,能夠滿足控制系統的需求。主控芯片S3C2440 通過SPI 總線完成對語音識別模塊的讀寫操作,超聲波測距部分和舵機控制部分由處理器的GPIO進行統一控制。
3.1 語音識別電路設計
為了使系統能夠識別操作人員發出的語音指令,設計中采用了由ICRoute 公司設計生產的非特定人語音識別芯片LD3320,它集成了語音識別處理電路和一些外部電路,包括AD、DA轉換器、麥克風接口、聲音輸出接口等,不需要外接任何的輔助芯片如Flash、RAM。在主控制器的控制下,可以識別出預先添加到識別列表中的內容。設計中參考了ICRoute 發布的LD3320 數據手冊,圖中LD3320 的P0、P1、P2引腳通過SPI 接口與嵌入式處理器相接,控制信號WRB、CSB、RSTB以及中斷返回信號引腳INTB與處理器S3C2440直接相連,如圖3 所示。
3.2 超聲波測距和舵機控制電路設計
超聲波測距原理相對比較成熟,系統中采用超聲波測距模塊HC-SR04。該模塊有兩個TTL電平通信引腳,兼容3.3V電平。其中,控制端口Trig 發一個10us 以上的高電平,接收端口Echo 將輸出與距離成正比的高電平信號。當Echo 有高電平輸出時就開啟處理器定時器,當端口電平跳變為低電平時關閉定時器,根據定時器的值可計算得到障礙物的距離。其中,控制端口Trig 和接收端口Echo 分別接至處理器的GPG9、GPG6引腳。
超聲波測距模塊的感應角度小于15°,為了擴大測距的感應角度范圍,將超聲波測距模塊安裝在兩自由度云臺上,其中,舵機為SG90(9G),旋轉角度為180°。處理器通過GPB0和GPB1分別控制兩個舵機以實現云臺的旋轉,以測量不同方向的障礙物,如圖4 所示。
4.軟件設計方案
系統軟件基于嵌入式Linux 操作系統,實現了語音識別、語音播放、超聲波測距和舵機控制等任務,使用fock 機制為每項任務分配獨立的進程,使系統可以進行多任務處理。針對不同功能模塊編寫了相應的底層驅動程序,為上層應用程序提供了調用接口。
系統工作流程如下:處理器通過SPI 總線對語音識別芯片LD3320 進行通用初始化,使語音識別芯片進入循環識別模式,系統處理器反復啟動語音識別過程。如果有識別結果,則根據識別作相應處理后(比如播放某個聲音作為應答)再啟動下一個識別過程。處理器通過SPI 總線讀取C5 寄存器的識別結果并分析,將語音命令轉換為超聲波測距和舵機的控制信號,完成多方位測距任務,如圖5 所示。
4.1 語音識別功能程序設計
語音識別芯片LD3320 的特色是兼有語音識別和MP3播放的兩項功能,在功能切換的時候,必須進行通用初始化,對芯片進行一系列的設置。
語音識別功能的驅動程序工作流程為通用初始化à語音識別用初始化→寫入識別列表→開始識別→響應識別中斷。為了提高識別成功率,在識別列表中增加了“垃圾關鍵詞”以吸收錯誤的識別。上層應用程序為語音識別功能分配了單獨的進程,通過ioctl()函數控制LD3320 的工作狀態,read()函數可以讀取識別結果。程序中使用select 機制實現read()函數的非阻塞訪問。同時,設定select 監控超時時間,在超時后,重新初始化語音識別芯片LD3320,為下一次語音識別做準備,如圖6 所示。
4.2 語音播放功能程序設計
LD3320支持MP3數據播放,程序中操作順序為:通用初始化à播放模式初始化à音量調節à開始播放,并準備好中斷響應函數,打開中斷允許位。在程序中,首先將數字0~9、“十”、“百”、“點”的語音MP3數據分別轉換為標準C語言數組格式文件,將該文件添加到工程中進行統一編譯。然后把需要播放的距離數據進行拆分,并對每一位進行查表操作,得到相應的語音數據。例如,將距離數據12.5 拆分為:“1”、“十”、“2”、“點”、“5”。最后將查表得到的語音數據按從左到右的順序組合,并存儲到LD3320的播放數據存儲器,在即將播放完畢時,芯片會發出中斷請求,在中斷響應函數中連續寫入播放數據,直到聲音數據播放完畢。
4.3 超聲波測距和云臺控制程序設計
超聲波測距功能的驅動程序屬于Linux 字符型驅動,利用ioctl()函數對相應GPIO進行時序控制,完成超聲波的發射和接收。在接收端口輸出高電平脈沖信號時,觸發系統中斷并使用定時器計算得到高電平持續時間△T,根據公式(1)完成距離S 的測量。式中V為超聲波的傳播速度,常溫下超聲波在空氣中的傳播速度是340 米/秒。在應用程序中,可以通過read()函數讀取到所測量的距離值。
S =V X ΔT/ 2 (1)
兩自由度云臺由兩個舵機組成,分別控制云臺水平和垂直方向的旋轉角度。在驅動程序中,首先打開定時器PWM功能并設置定時周期,然后映射定時器中斷函數,最后使能定時器,使定時器開始運行。程序中根據實驗者發出的語音指令,利用ioctl()函數控制定時器輸出兩路PWM信號,分別控制兩個舵機的旋轉角度,最后將運動合成為云臺的位姿。
5.結語
本文介紹了嵌入式語音識別技術在超聲波測距系統中的一種應用以及實現方式,實驗人員可以通過預先定義好的語音指令(例如:“開始測量”、“左上方”、“前方”)實現對系統的控制,并利用超聲波進行距離測量。測量完成后,系統通過語音播放的方式將測量結果反饋給實驗人員,完成人機交互,提高了用戶體驗度。本系統具有易擴展的優點,可以將其應用到其它嵌入式控制系統中。
交流可以加QQ2685896890
|