張海龍
(中國傳媒大學(xué) 信息工程學(xué)院,北京 100024)
?
基于語音識別技術(shù)的語音控制智能手系統(tǒng)※
張海龍
(中國傳媒大學(xué) 信息工程學(xué)院,北京 100024)
本文以凌陽SPCE061A單片機(jī)作為核心控制器,設(shè)計了一種基于語音識別技術(shù)的語音控制智能手系統(tǒng)。系統(tǒng)由微控制器、語音模塊、電機(jī)模塊、光電尋跡模塊、無線控制模塊等部分組成??刂破骼谜Z音模塊識別出操作人員的語音命令后,通過電機(jī)模塊與光電尋跡模塊的協(xié)同工作來完成預(yù)設(shè)的多個復(fù)雜動作。本設(shè)計還加入了無線控制功能,可以在特殊情況下替代部分語音指令來操控智能手。
SPCE061A;智能手;語音識別;語音控制
本系統(tǒng)以SPCE061A單片機(jī)為控制核心,通過采集操作員的聲音信號,配合無線控制模塊、光電尋跡模塊,設(shè)計了一個能夠完成多種復(fù)雜動作的語音控制智能手系統(tǒng)。它可以替代人工完成多種任務(wù),應(yīng)用前景廣闊。
本設(shè)計由微控制器SPCE061A、電源模塊、電機(jī)模塊、語音模塊、無線控制模塊、光電尋跡模塊等部分組成。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
系統(tǒng)以SPCE061A單片機(jī)為控制核心。SPCE061A通過小型麥克風(fēng)采集聲音信號,并將聲音信號與事先訓(xùn)練好的存儲于Flash中的語音庫進(jìn)行特征對比,從而實現(xiàn)語音命令的識別。根據(jù)識別出的命令,SPCE061A控制智能手作出相應(yīng)的動作。
智能手執(zhí)行的動作由4個直流減速電機(jī)來控制。電機(jī)驅(qū)動芯片采用L298N,兩塊L298N控制4個電機(jī)的轉(zhuǎn)向。電機(jī)1通過SPCE061A的IOB0、IOB1引腳控制智能手向上和向下;電機(jī)2通過IOB2、IOB3控制智能手向左和向右;電機(jī)3通過IOB4、IOB5控制智能手升高和降低;電機(jī)4通過IOB6、IOB7控制智能手轉(zhuǎn)向A區(qū)或者B區(qū)。智能手通過光電尋跡模塊判斷A區(qū)和B區(qū)的位置。設(shè)計中還加入了無線控制功能,用來代替部分語音命令。當(dāng)按下發(fā)射端的K1鍵時,智能手轉(zhuǎn)向A區(qū);按下K2鍵時,智能手轉(zhuǎn)向B區(qū)。
2.1 微控制器模塊
SPCE061A主要包括輸入/輸出端口、定時器/計數(shù)器、數(shù)/模轉(zhuǎn)換、模/數(shù)轉(zhuǎn)換、串行設(shè)備輸入/輸出、通用異步串行接口、低電壓監(jiān)測和復(fù)位等部分,并且內(nèi)置在線仿真電路ICE接口。其CPU最高時鐘可以達(dá)到49 MHz,在處理復(fù)雜的數(shù)字信號方面可以與專用DSP芯片相媲美,但價格卻非常低廉。SPCE061A支持10個中斷向量及十多個中斷源,適合應(yīng)用于對中斷處理能力要求較高的實時語音信號處理場景中。其還具備8通道10位ADC輸入功能,內(nèi)置的具有自動增益控制的麥克風(fēng)輸入功能,雙通道10位DAC音頻輸出功能及A、B兩個I/O口輸入/輸出功能,為語音處理帶來了極大便利。圖2為SPCE061A內(nèi)部結(jié)構(gòu)圖。
圖2 SPCE061A內(nèi)部結(jié)構(gòu)圖
2.2 語音模塊
凌陽的 SPCE061A是 16位單片機(jī),最高時鐘頻率可達(dá)49 MHz,具有很強(qiáng)的實時信息處理能力,這些無疑為語音的采集、辨識、合成及播放提供了條件。SPCE061A內(nèi)部含有語音識別相關(guān)的函數(shù),通過在程序中調(diào)用相關(guān)API函數(shù),即可完成語音采集、語音播放及語音識別等任務(wù)。
2.2.1 語音播放
與SPCE061A高度集成的61板上有兩對語音輸出接口:一個是耳機(jī)插孔,連接耳機(jī);另一個是外接喇叭的兩針插針。語音信號由DAC 輸出引腳21 或22 輸出后經(jīng)語音集成放大器SPY0030 放大,然后輸出。SPY0030 是凌陽自產(chǎn)芯片, 功能類似于LM386, 但是比LM386音質(zhì)好。它可以工作在2.4~6.0 V范圍內(nèi), 最大輸出功率可達(dá)700 mW。
凌陽壓縮算法中,SACM_A2000、SACM_S480、SACM_S240主要用來放音,可用于語音提示,而 DVR則用來錄放音。本設(shè)計采用S480算法,該壓縮算法壓縮比為80:3,存儲容量大,音質(zhì)介于 A2000和 S240之間,適用于語音播放。圖3為S480算法播放語音流程圖。
圖3 S480算法播放語音流程圖
2.2.2 語音采集
語音信號經(jīng)過麥克風(fēng)轉(zhuǎn)換成電信號,輸入到SPCE061A內(nèi)置的自動增益放大器。SPCE061A內(nèi)部帶有自動增益控制電路AGC,能夠隨時跟蹤、監(jiān)視前置放大器輸出的音頻信號電平,并對電平信號進(jìn)行動態(tài)調(diào)節(jié),以便使進(jìn)入A/D的信號保持在最佳電平。系統(tǒng)采集到的聲音信號是模擬信號,需要通過模數(shù)轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字信號存儲在SPCE061A的片內(nèi)Flash中。
2.2.3 語音辨識
語音識別的過程可歸結(jié)為模式識別與匹配。通過對語音信號進(jìn)行預(yù)處理和分析可以抽取出語音特征信息,建立一個特征模型;在匹配階段,單片機(jī)對采集到的語音樣本提取特征信息并與系統(tǒng)中存放的特征模型進(jìn)行比較,根據(jù)一定的算法和策略,找出最優(yōu)的與待辨識語音匹配度最高的模塊,并輸出識別結(jié)果。圖4表示語音識別系統(tǒng)的基本流程。
圖4 語音識別系統(tǒng)基本流程
2.3 電機(jī)模塊
為了能夠方便控制直流減速電機(jī)的正反轉(zhuǎn),設(shè)計采用電機(jī)驅(qū)動芯片L298N。L298N為15引腳的單塊集成電路,內(nèi)部包含4通道邏輯驅(qū)動電路。L298N無需隔離電路,可以直接分別驅(qū)動兩個直流減速電機(jī)的正轉(zhuǎn)與反轉(zhuǎn)。根據(jù)L298N芯片的特點以及SPCE061A的引腳特性,本方案將SPCE061A的IOB0~I(xiàn)OB7作為輸出口,分別與兩塊L298N芯片的IN1~I(xiàn)N4相接。L298N的VS、VSS分別接+12 V、+5 V電源,輸出口OUT1~OUT4接兩個直流減速電機(jī)。PWM調(diào)制端口接SPCE061A的IOB8腳,通過IOB8引腳輸出的PWM波來調(diào)節(jié)電機(jī)轉(zhuǎn)速。L298N電機(jī)驅(qū)動原理圖如圖5所示。
圖5 L298N電機(jī)驅(qū)動原理圖
2.4 光電尋跡模塊
本設(shè)計光電尋跡模塊采用RPR220反射型光電對管。RPR220是一種一體化反射型光電探測器,其發(fā)射器是一個砷化鎵紅外發(fā)光二極管,而接收器是一個高靈敏度、硅平面光電三極管。通過紅外敏感端對不同顏色的感光能力的不同,RPR220光電對管檢測到黑白顏色時輸出的電壓不同。將光電對管輸出的電壓送入比較器進(jìn)行處理,從而實現(xiàn)當(dāng)光電對管遇到黑線時,比較器輸出高電平,而遇到白線時輸出低電平。本方案使用的比較器是LM339N。電路原理圖如圖6所示。
圖6 光電尋跡模塊原理圖
將LM339N的數(shù)據(jù)輸出端接IOA0引腳,當(dāng)碰到黑線時,LM339N的輸出跳變?yōu)楦唠娖剑琒PCE061A根據(jù)設(shè)定的算法作出相應(yīng)動作。
2.5 無線控制模塊
無線控制模塊由編解碼模塊和無線傳輸模塊組成。無線傳輸模塊的數(shù)據(jù)傳輸采用FSK-2A型高頻無線數(shù)據(jù)發(fā)射模塊。該模塊工作電壓為9~12 V,采用SAW穩(wěn)頻,發(fā)射功率大,空曠地發(fā)射距離可達(dá)1 km,性價比高。
編解碼模塊選用PT2262/PT2272編解碼芯片組。本設(shè)計中,PT2272解碼芯片的D0和D1兩個引腳與SPCE061A的IOA8和IOA9連接。PT2262編碼芯片發(fā)送0x01和0x02兩個編碼信號,PT2272負(fù)責(zé)解碼這兩個信號。SPCE061A根據(jù)收到的信號依照設(shè)定的算法控制電機(jī)執(zhí)行動作。
本設(shè)計采用C語言和匯編語言混合編程。其中,C語言作為主程序編程,可以充分利用C語言簡單易懂的優(yōu)點來控制其他模塊。設(shè)計實現(xiàn)程序均在凌陽公司提供的u′nSP集成開發(fā)環(huán)境中開發(fā)完成。軟件設(shè)計采用模塊化程序結(jié)構(gòu),主要包括初始化程序、系統(tǒng)主程序、語音識別子程序、智能手動作執(zhí)行子程序等。系統(tǒng)的軟件設(shè)計流程如圖7所示。
圖7 系統(tǒng)軟件設(shè)計流程圖
程序的初始化部分完成語音訓(xùn)練以及辨識器、I/O口的初始化,部分代碼如下:
unsigned int uiFlagFirst; //是否為第一次下載
unsigned int uiRes; //識別結(jié)果
unsigned int uiActivated; //是否處于待命狀態(tài)
unsigned int uiTimerCount; //時間是否超時
unsigned int uiBS_Team;
//標(biāo)識現(xiàn)在是第幾組命令在內(nèi)存當(dāng)中
unsigned int uiKey;
//存儲鍵盤值,按下將重新訓(xùn)練
RobotSystemInit();
uiActivated = 0;
uiFlagFirst = IsFirstDownLoad();
//是否為第一次下載程序
if(uiFlagFirst == 1){
FormatFlash(); //格式化需要存儲命令的存儲器
TrainFiveCommand(); //訓(xùn)練需要的5條命令(一組)
SaveFiveCommand(0xf700); //存儲5條命令
PlaySnd(OK);
//播放“收到”,表示一組命令存儲結(jié)束
TrainFiveCommand(); //訓(xùn)練第二組命令
SaveFiveCommand(0xf900);
PlaySnd(OK);
TrainFiveCommand(); //訓(xùn)練第三組命令
SaveFiveCommand(0xfb00);
PlaySnd(OK);
uiFlagFirst = 0xaaaa; //標(biāo)志已訓(xùn)練過
F_FlashWrite1Word(0xfd00,0xaaaa);
//置標(biāo)志位寄存器
}
ImportFiveCommand(0xf700);
//將第一組命令存到內(nèi)存當(dāng)中
uiBS_Team = 0;
*P_IOA_Dir=0x0;
//設(shè)置IOA口為帶下拉電阻的輸入引腳
*P_IOA_Data=0x0;
*P_IOA_Attrib=0x0;
PlaySnd(RSP_STAR); //開始識別命令
*P_Watchdog_Clear=0x0001;
Loop:
BSR_InitRecognizer(BSR_MIC); //辨識器初始化
BSR_EnableCPUIndicator(); //啟動實時監(jiān)控
while(1){} //進(jìn)入語音識別的循環(huán)中
3.1 語音訓(xùn)練
在以后的語音識別過程中,如果已經(jīng)訓(xùn)練過,會把存儲在 Flash中的語音模型調(diào)出來裝載到辨識器中使用。本設(shè)計使用的語音命令結(jié)構(gòu)圖如圖8所示。
圖8 語音命令結(jié)構(gòu)圖
3.2 語音識別
辨識器初始化時,先將第一組命令存儲在要被調(diào)用的內(nèi)存當(dāng)中。在識別環(huán)節(jié)當(dāng)中,如果辨識結(jié)果是觸發(fā)名稱,輔助手將進(jìn)入待命狀態(tài),并播放聲音告知收到,然后等待識別下一級動作命令。如果辨識出動作指令,輔助手會語音告知并執(zhí)行相應(yīng)動作。注意,每次進(jìn)行每條語音識別,都必須先使用觸發(fā)名稱進(jìn)行狀態(tài)激活。語音識別流程圖略——編者注。
3.3 重新訓(xùn)練
考慮到有重新訓(xùn)練的需求,設(shè)置了重新訓(xùn)練的按鍵,即61板上的KEY3鍵。SPCE061A控制器一旦檢測到此鍵按下,則將擦除訓(xùn)練標(biāo)志位,并等待復(fù)位。復(fù)位后,程序進(jìn)入初始化階段,當(dāng)檢測到訓(xùn)練標(biāo)志位為 0xffff時,會要求重新對其進(jìn)行訓(xùn)練。
3.4 無線控制模塊
通過兩個按鍵K1、K2,無線控制模塊發(fā)射端可以向接收端發(fā)送控制信號,SPCE061A根據(jù)接收端收到的控制信號執(zhí)行相應(yīng)動作。
執(zhí)行動作略——編者注。
通過多次的修改與調(diào)度,智能手能夠很好地滿足預(yù)定的設(shè)計要求。在最后階段對智能手做了語音識別的準(zhǔn)確度測試,結(jié)果如表1所列。每次測試前都要進(jìn)行語音訓(xùn)練,以提高結(jié)果的可信度。
表1 語音識別測試
我們還測試了光電尋跡模塊與無線控制模塊的工作情況,結(jié)果略——編者注。
數(shù)據(jù)表明,智能手可以較準(zhǔn)確地識別語音命令,光電尋跡模塊與無線控制模塊工作也較為穩(wěn)定。
本文基于SPCE061A設(shè)計了語音控制的智能手系統(tǒng),系統(tǒng)測試結(jié)果表明,智能手能夠較準(zhǔn)確地完成語音命令的識別并執(zhí)行相應(yīng)動作,各個模塊工作穩(wěn)定,達(dá)到了設(shè)計目的。
[1] 陳言俊. 大學(xué)生創(chuàng)新競賽實戰(zhàn)——凌陽16位單片機(jī)應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,2009.
[2] 郭天祥. 新概念51單片機(jī)C語言教程[M].北京:電子工業(yè)出版社,2009.
[3] 英鋒,馮玉芬.基于SPCE061A的語音識別系統(tǒng)的設(shè)計[J].微計算機(jī)信息,2008(17):121-122.
[4] 邱國普,楊立,張立.電動小車的電機(jī)驅(qū)動及控制[J].電子世界,2004(7):41-42.
[5] 羅亞非. 凌陽十六位單片機(jī)應(yīng)用基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2005.
[6] 余孟嘗. 數(shù)字電子技術(shù)基礎(chǔ)簡明教程[M].2版. 北京:高等教育出版社,1999.
[7] 譚浩強(qiáng),張基溫. C語言程序設(shè)計教程[M].3版. 北京:高等教育出版社,2006.
[8] 李曉白,秦紅磊.凌陽16位單片機(jī)C言語開發(fā)[M]. 北京:北京航空航天大學(xué)出版社,2006.
[9] 王振,胡清,黃杰. 基于nRF24L01的無線溫度采集系統(tǒng)設(shè)計[J]. 電子設(shè)計工程,2009(12):24-26.
[10] 孫肖子,張企民. 模擬電子技術(shù)基礎(chǔ)[M]. 西安:西安電子科技大學(xué)出版社,2001.
張海龍(碩士研究生),研究方向為單片機(jī)與嵌入式系統(tǒng)、計算機(jī)網(wǎng)絡(luò)、軟件定義網(wǎng)絡(luò)。
Zhang Hailong
(College of Information Engineering,Communication University of China,Beijing 100024, China)
In this paper, an intelligent hand system of voice control based on speech recognition technology is designed,which uses the SPCE061A as the core controller.This system consists of microcontroller,voice module,motor module,photoelectric tracing module, wireless control module and other components. After the controller using voice module to identify the operator's voice command, it will use the motor module and photoelectric tracing module to complete some complex actions which were set in advance. The design also includes a wireless control function, which can replace part of voice command to control the intelligent hand in special conditions.
SPCE061A; intelligent hand; speech recognition; voice control
TP241
A
迪娜
2014-07-28)