




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 .14/14用單片機實現(xiàn)語音控制機器人制作人:磊 pb02023035 盧恒 pb02006088題目:用凌陽單片機實現(xiàn)語音識別功能并傳遞給PIC單片機信號,由PIC單片機控制機器人實現(xiàn)動作關(guān)鍵字:PIC單片機,凌陽單片機,語音控制單片機在現(xiàn)今生活中占有越來越重要的地位,用語音控制單片機實現(xiàn)控制更具有廣泛的應(yīng)用價值。用語音控制舞蹈機器人做一些動作是我們這次實現(xiàn)的功能,雖然這在語音控制方面仍處于起步階段,但他體現(xiàn)了語音控制的原理和基本實現(xiàn),也為更高級的運用打下了基礎(chǔ)。原理:語音識別原理語音識別電路基本結(jié)構(gòu)如上圖所示:語音識別分為特定發(fā)音人識別(Speaker Dependent)和非特定發(fā)音人
2、識別(Speaker Independent)兩種方式。特定發(fā)音人識別是指語音樣板由單個人訓練,對訓練人的語音命令識別準確率較高,而其他人的語音命令識別準確率較低或不識別。非特定發(fā)音人識別:是指語音樣板由不同年齡、不同性別、不同口音的人進行訓練,可以識別一群人的命令。語音樣板的提取非常重要。我們將標準模式的存儲空間稱之為“詞庫”,而把標準模式稱之為“詞條”或“樣板”。所謂建立詞庫,就是將待識別的命令進行頻譜分析,提取特征參數(shù)作為識別的標準模式。識別過程首先要濾除輸入語音信號的噪音和進行預加重處理,提升高頻分量,然后用線性預測系數(shù)等方法進行頻譜分析,找出語音的特征參數(shù)作為未知模式,接著與預先存儲
3、的標準模式進行比較,當輸入的未知模式與標準模式的特征相一致時,便被機器識別,產(chǎn)生識別結(jié)果輸出。如果輸入的語音與標準模式的特征完全一致固然好,但是語音含有不確定因素,完全一致的條件往往不存在,事實上沒有人能以絕對一樣的語調(diào)把一個詞說兩遍,因此,預先制定好計算輸入語音的特征模式與各特征模式的類似程度,或距離度的算法規(guī)則固化在ROM中,把該距離最小,即最類似的模式作為識別相應(yīng)語音的手段。當然,影響識別率的因素還有一些,如連續(xù)發(fā)音(如英語)與斷續(xù)發(fā)音(如漢語)的不同(二者區(qū)別在于單詞間隔有200ms以上的空隙時間)。本程序采用特定人識別方式,將訓練的標準樣板存于部RAM中(掉電丟失),每次上電復位后都
4、要進行訓練,硬件電路硬件電路比較簡單,MIC選用駐極體電容話筒,這種話筒具有靈敏度高、無方向性、重量輕、體積小、頻率響應(yīng)寬、保真度好等優(yōu)點,駐極體話筒的偏壓由SPCE061A的VMIC管腳提供。其硬件電路如下圖所示。SPCE061A的A/D轉(zhuǎn)換器有8個通道,其中有1個通道是MIC-IN輸入,它專門用于對語音信號進行采樣。語音信號經(jīng)MIC轉(zhuǎn)換成電信號,由隔直電容隔掉直流成分,然后輸入至SPCE061A部前置放大器。SPCE061A部自動增益控制電路AGC能隨時跟蹤、監(jiān)視前置放大器輸出的音頻信號電平,當輸入信號增大時,AGC電路自動減小放大器的增益;當輸入信號減小時,AGC電路自動增大放大器的增益
5、,可使進入A/D的信號保持在最佳電平,又可使削波減至最小,A/D轉(zhuǎn)換器對輸入的音頻信號進行8kHz采樣,并按照凌陽音頻編碼格式進行編碼,每秒將占用16kBits的存儲器空間。2.機器人的控制。我們控制的機器人是“小強”,他總共有三個電機需要控制。行走由一個直流電機控制,手部有兩個步進電機控制。對每一個電機規(guī)定固定的端口,由PIC控制電機驅(qū)動電路H橋的使能端從而實現(xiàn)各種動作的控制。在這里,PIC單片機時刻監(jiān)視凌陽單片機的信號位,不同的電平組合進行不同的動作,實現(xiàn)語音控制。程序設(shè)計語音識別程序。程序包括三部分:訓練樣本、識別和語音提示。由于語音樣本是存在部RAM中,掉電將丟失,所以在每次上電復位時
6、都必須重新訓練,訓練過程主要是靠調(diào)用庫函數(shù) BSR_Train 來完成,為了防止誤命令,每條語音命令訓練2遍,只有2次命令一樣時才成功,BSR_Train函數(shù)有8種可能的返回值:0訓練成功;-1沒有檢測到命令;-2需要再訓練一次,每條命令訓練2次,第一次訓練成功則返回-2;-3環(huán)境太吵;-4存儲器滿;-5兩次命令不一樣;-6命令序號超出圍;-7命令已存在;訓練成功則訓練下一條,否則繼續(xù)訓練。語音識別程序包括識別程序和中斷服務(wù)程序。識別程序完成選取詞庫、初始化A/D和定時器TimerA、識別運算與識別結(jié)果處理,整個流程圖如圖。中斷服務(wù)程序定時讀取A/D轉(zhuǎn)換結(jié)果,并存入緩沖區(qū),A/D的輸入為MIC
7、通道的語音信號。語音識別和放音分時復用TimerA FIQ 中斷,由標志位判斷是語音識別處理還是放音處理。中斷服務(wù)程序的流程圖如圖所示。識別程序如下:/=/ 工程名稱: Guard_SD.spj/ 功能描述: 語音識別DEMO程 /每次上電復位后請訓練3條命令,第一條為觸發(fā)命令/后兩條為控制命令,/ 涉與的庫:CMacro.lib/ 組成文件:main.c/ FIQ.asm/hardware.asm/InitIO.asm/ hardware.inc/hardware.h /=#include bsrsd.h#define NAME_ID 0 x100#define COMMAND_ONE_ID
8、 0 x101#define COMMAND_TWO_ID 0 x102#define RSP_INTRO0 /0. I am your body guard.#define RSP_NAME1 /1. Please give me your name.#define RSP_FIRE2 /2. Say Fire.#define RSP_GUARD3 /3. Say Guard.#define RSP_AGAIN4 /4. Say again.#define RSP_NOVOICE5 /5. No voice detected.#define RSP_NAMEDIFF6 /6. Two giv
9、en names are different.#define RSP_HERE7 /10. Im here#define RSP_STANDBY8 /8. Iam standing by.#define RSP_GUNSHOT9 /11. Gun sound.#define RSP_READY10 /13. Im ready!int gActivated = 0;/global variables/1觸發(fā)命令識別成功/0無觸發(fā)命令/* 播放提示語音 */input:播放序號/output:NO/*/void PlayRespond(int Result)BSR_StopRecognizer()
10、; /關(guān)閉識別器SACM_A2000_Initial(1); /初始化播放器SACM_A2000_Play(Result, 3, 3); /播放提示語音while(SACM_A2000_Status()&0 x0001) != 0)SACM_A2000_ServiceLoop();SACM_A2000_Stop(); /停止播放BSR_InitRecognizer(BSR_MIC); /初始化識別器/BSR_EnableCPUIndicator(); /* 訓練命令函數(shù) */input:命令序號、提示語序號/output:0訓練成功 -1訓練失敗/*/int TrainWord(int Wor
11、dID, int RespondID)int res;PlayRespond(RespondID);while(1)res = BSR_Train(WordID,BSR_TRAIN_TWICE);if(res = 0) /訓練成功break;switch(res)case -1: /沒有檢測到命令PlayRespond(RSP_NOVOICE);return -1;case -2: /需要再訓練一次PlayRespond(RSP_AGAIN);break;case -3: /環(huán)境太吵return -1;case -4: /存儲器滿 return -1;case -5: /兩次命令不一樣Play
12、Respond(RSP_NAMEDIFF);return -1;case -6: /命令序號超出圍return -1;case -7: /命令已存在return -1;return 0;/* 主程序 */*/int main()int res, timeCnt=0;InitIO();BSR_DeleteSDGroup(0);/初始化存儲器,選用SPCE061A部RAM存儲語音樣本 PlayRespond(RSP_INTRO);while(TrainWord(NAME_ID,1) != 0) ; /訓練用戶名while(TrainWord(COMMAND_ONE_ID,2) != 0) ; /訓
13、練第一條命令while(TrainWord(COMMAND_TWO_ID,3) != 0) ; /訓練第二條命令BSR_InitRecognizer(BSR_MIC);/初始化識別器 /BSR_EnableCPUIndicator(); PlayRespond(RSP_STANDBY);/播放提示語?Im standing by.while(1)res = BSR_GetResult(); /進行識別,獲取識別結(jié)果if(res 0)/識別成功if(gActivated) /如果已經(jīng)觸發(fā)timeCnt = 0;switch(res)case NAME_ID: /用戶名PlayRespond(RS
14、P_HERE);break;case COMMAND_ONE_ID: /第一條命令PlayRespond(RSP_GUNSHOT);gActivated = 0;break;case COMMAND_TWO_ID: /第二條命令PlayRespond(RSP_READY);gActivated = 0;else /沒有觸發(fā)if(res = NAME_ID)PlayRespond(RSP_HERE);gActivated = 1;timeCnt = 0;else if (gActivated)if (+timeCnt 450)/如果已經(jīng)觸發(fā),但沒有命令識別出來PlayRespond(RSP_NO
15、VOICE); gActivated = 0;timeCnt = 0;中斷服務(wù)程序如下:/=/文件名稱:FIQ.asm/功能描述:中斷放音/=.PUBLIC _FIQ/EXTERNAL _BSR_FIQ_Routine.EXTERNAL _gIsStopRecog /This variable = 0 if recognizer is busy, / = 1 if recognizer is stopped, / = 2 if recognizer is paused.PUBLIC _BREAK,_IRQ0, _IRQ1, _IRQ2, _IRQ3, _IRQ4, _IRQ5, _IRQ6,
16、_IRQ7/INCLUDE A2000.inc;.INCLUDE hardware.inc.DEFINEP_WatchDog_Clear0 x7012.TEXT_FIQ: PUSH R1,R4 TO SP /寄存器入棧R1 = P_INT_Ctrl /讀中斷標志位R1 &= 0 x2000 JZ FIQ_ret /不是TimerA FIQ中斷R1 = _gIsStopRecog JNZ TimerA_is_S480TimerA_is_Recognize: /TimerA FIQ為語音識別服務(wù)call _BSR_FIQ_Routine /語音識別服務(wù)函數(shù)JMP FIQ_ret TimerA_is
17、_S480:/TimerA FIQ為放音服務(wù)CALL F_FIQ_Service_SACM_S480; /放音服務(wù)函數(shù)FIQ_ret: R1 = 0 xa800; P_INT_Clear = R1; /清中斷標志POP R1,R4 FROM SP; /寄存器出棧reti; _BREAK: _IRQ0:_IRQ1: _IRQ2: _IRQ3: _IRQ4: _IRQ5: _IRQ6: _IRQ7:.END2.機器人控制程序。以下為pic 單片機的程序,用 c 語言編寫。#include #include_CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS
18、);/_CONFIG (HS & UNPROTECT & PWRTEN & BORDIS & WDTEN);/_CONFIG (HS & PROTECT & PWRTEN & BORDIS & WDTEN);#define mg1 RC0/行走電機#define mg2 RC1#define ml1 RC2 /左腳電機#define ml2 RC3 #define mr1 RC4 /右腳電機#define mr2 RC5 #define ma RD1 /鎖存器輸入#define mb RD2 #define mc RD3 #define md RD4#define control1 RD5/鎖
19、存器#define control2 RD6 #define control3 RD7#define input1 RB4/PORTB 設(shè)為輸入接至凌陽單片機的輸出端口#define input2 RB5/控制 小強的動作 #define input3 RB6/中斷通過 PORTB 電平變化而引發(fā)#define on 1/控制鎖存器開關(guān)#define off 0#define right 1/步進電機轉(zhuǎn)向標志#define left 0#define freq 2000unsigned int length;/步進電機步長unsigned int tag;/正反轉(zhuǎn)unsigned int in
20、put=0;void stop()/停止mg1=0;mg2=0;void forward()/前進mg1=0;mg1=1;void backward()/后退mg1=1;mg1=0;void turnleft()/左轉(zhuǎn)mr1=1;mr2=0;ml1=1;ml2=0;void turnright()/右轉(zhuǎn)mr1=0;mr2=1;ml1=0;ml2=1;void turnstop()/停止轉(zhuǎn)彎mr1=0;mr2=0;ml1=0;ml2=0;void interrupt control (void) if(TMR1IF&TMR1IE)TMR1IF=0;if(tag=right)switch(leng
21、th)case 1:ma=1;mb=0;mc=0;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 2:ma=1;mb=1;mc=0;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 3:ma=0;mb=1;mc=0;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 4:ma=0;mb=1;mc=1;md=0;break;/TMR1H
22、=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 5:ma=0;mb=0;mc=1;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 6:ma=0;mb=0;mc=1;md=1;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break; case 7:ma=0;mb=0;mc=0;md=1;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;
23、break;case 8:ma=1;mb=0;mc=0;md=1;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;else if(tag=left)switch(length)case 8:ma=1;mb=0;mc=0;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 7:ma=1;mb=1;mc=0;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case
24、6:ma=0;mb=1;mc=0;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 5:ma=0;mb=1;mc=1;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 4:ma=0;mb=0;mc=1;md=0;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 3:ma=0;mb=0;mc=1;md=1;break;/TMR1H=(65536-
25、freq)/256;TMR1L=(65536-freq)%256;break; case 2:ma=0;mb=0;mc=0;md=1;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;case 1:ma=1;mb=0;mc=0;md=1;break;/TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256;break;else if(tag=3)ma=0;mb=0;mc=0;md=0;length+;if(length=9)length=1; TMR1H=(65536-freq)/256;TMR1L=(65536-freq)%256; if(T0IE&T0IF)/如果是 PORTB 外接電平變化引起的中斷T0IF=0;if(RBIF&RB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 造血干細胞移植基礎(chǔ)護理
- DB32/T 4634-2024涵洞工程技術(shù)管理規(guī)范
- 酒店生日宴會設(shè)計與策劃
- 小學生生理衛(wèi)生健康教育課
- DB32/T 4608.2-2023公共數(shù)據(jù)管理規(guī)范第2部分:數(shù)據(jù)共享交換
- 腎積水患者的護理查房
- 2025年模具行業(yè)數(shù)字化設(shè)計仿真技術(shù)產(chǎn)業(yè)協(xié)同與創(chuàng)新報告
- 醫(yī)院導視系統(tǒng)規(guī)劃與設(shè)計
- 新生兒誤吸護理常規(guī)
- 呼吸康復指南
- GB/T 11352-2009一般工程用鑄造碳鋼件
- 多層板來料檢驗報告
- GA/T 916-2010圖像真實性鑒別技術(shù)規(guī)范圖像真實性評價
- 一對一個性化輔導方案計劃
- 公路建設(shè)項目施工單位工程質(zhì)量責任登記表
- 老年社會保障總結(jié)課件
- 三級動火證 模板
- 評語大全之國家自然科學基金評語
- 電瓶車每月檢查表
- 獸藥監(jiān)管法規(guī)解讀課件
- 外貿(mào)業(yè)務(wù)員KPI考核量表
評論
0/150
提交評論