基于嵌入式Linux的語音識別系統(tǒng)硬軟件設(shè)計
別功能程序設(shè)計
本文引用地址:http://www.ex-cimer.com/article/278135.htm語音識別芯片LD3320的特色是兼有語音識別和MP3播放的兩項功能,在功能切換的時候,必須進(jìn)行通用初始化,對芯片進(jìn)行一系列的設(shè)置。
語音識別功能的驅(qū)動程序工作流程為通用初始化à語音識別用初始化→寫入識別列表→開始識別→響應(yīng)識別中斷。為了提高識別成功率,在識別列表中增加了“垃圾關(guān)鍵詞”以吸收錯誤的識別。上層應(yīng)用程序為語音識別功能分配了單獨的進(jìn)程,通過ioctl()函數(shù)控制LD3320的工作狀態(tài),read()函數(shù)可以讀取識別結(jié)果。程序中使用select機(jī)制實現(xiàn)read()函數(shù)的非阻塞訪問。同時,設(shè)定select監(jiān)控超時時間,在超時后,重新初始化語音識別芯片LD3320,為下一次語音識別做準(zhǔn)備,如圖6所示。
4.2語音播放功能程序設(shè)計
LD3320支持MP3數(shù)據(jù)播放,程序中操作順序為:通用初始化à播放模式初始化à音量調(diào)節(jié)à開始播放,并準(zhǔn)備好中斷響應(yīng)函數(shù),打開中斷允許位。在程序中,首先將數(shù)字0~9、“十”、“百”、“點”的語音MP3數(shù)據(jù)分別轉(zhuǎn)換為標(biāo)準(zhǔn)C語言數(shù)組格式文件,將該文件添加到工程中進(jìn)行統(tǒng)一編譯。然后把需要播放的距離數(shù)據(jù)進(jìn)行拆分,并對每一位進(jìn)行查表操作,得到相應(yīng)的語音數(shù)據(jù)。例如,將距離數(shù)據(jù)12.5拆分為:“1”、“十”、“2”、“點”、“5”。最后將查表得到的語音數(shù)據(jù)按從左到右的順序組合,并存儲到LD3320的播放數(shù)據(jù)存儲器,在即將播放完畢時,芯片會發(fā)出中斷請求,在中斷響應(yīng)函數(shù)中連續(xù)寫入播放數(shù)據(jù),直到聲音數(shù)據(jù)播放完畢。
4.3超聲波測距和云臺控制程序設(shè)計
超聲波測距功能的驅(qū)動程序?qū)儆?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/Linux">Linux字符型驅(qū)動,利用ioctl()函數(shù)對相應(yīng)GPIO進(jìn)行時序控制,完成超聲波的發(fā)射和接收。在接收端口輸出高電平脈沖信號時,觸發(fā)系統(tǒng)中斷并使用定時器計算得到高電平持續(xù)時間△T,根據(jù)公式(1)完成距離S的測量。式中V為超聲波的傳播速度,常溫下超聲波在空氣中的傳播速度是340米/秒。在應(yīng)用程序中,可以通過read()函數(shù)讀取到所測量的距離值。
S =V XΔT/ 2(1)
兩自由度云臺由兩個舵機(jī)組成,分別控制云臺水平和垂直方向的旋轉(zhuǎn)角度。在驅(qū)動程序中,首先打開定時器PWM功能并設(shè)置定時周期,然后映射定時器中斷函數(shù),最后使能定時器,使定時器開始運(yùn)行。程序中根據(jù)實驗者發(fā)出的語音指令,利用ioctl()函數(shù)控制定時器輸出兩路PWM信號,分別控制兩個舵機(jī)的旋轉(zhuǎn)角度,最后將運(yùn)動合成為云臺的位姿。
5.結(jié)語
本文介紹了嵌入式語音識別技術(shù)在超聲波測距系統(tǒng)中的一種應(yīng)用以及實現(xiàn)方式,實驗人員可以通過預(yù)先定義好的語音指令(例如:“開始測量”、“左上方”、“前方”)實現(xiàn)對系統(tǒng)的控制,并利用超聲波進(jìn)行距離測量。測量完成后,系統(tǒng)通過語音播放的方式將測量結(jié)果反饋給實驗人員,完成人機(jī)交互,提高了用戶體驗度。本系統(tǒng)具有易擴(kuò)展的優(yōu)點,可以將其應(yīng)用到其它嵌入式控制系統(tǒng)中。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論