基于ARM處理器的非特定人語(yǔ)音識(shí)別系統(tǒng)設(shè)計(jì)
SYN6658語(yǔ)音合成電路采用芯片硬件數(shù)據(jù)手冊(cè)提供的典型應(yīng)用電路進(jìn)行設(shè)計(jì)[5],在此不做介紹,功率放大電路采用美國(guó)國(guó)家半導(dǎo)體生產(chǎn)的音頻功率放大器LM386進(jìn)行放大。
本文引用地址:http://www.ex-cimer.com/article/201609/303639.htm在進(jìn)行語(yǔ)音合成時(shí)首先進(jìn)行初始化,包括發(fā)音人選擇、數(shù)字處理策略、語(yǔ)速調(diào)節(jié)、語(yǔ)調(diào)調(diào)節(jié)、音量調(diào)節(jié)等。
由于該系統(tǒng)要模擬多人發(fā)音,所以不同的從設(shè)備設(shè)置不同的發(fā)音人及語(yǔ)調(diào)與語(yǔ)速以便于區(qū)分。初始化后等待測(cè)控計(jì)算機(jī)的語(yǔ)音合成命令,待收到命令后芯片會(huì)向上位機(jī)發(fā)送1字節(jié)的狀態(tài)回傳,上位機(jī)可根據(jù)這個(gè)回傳來(lái)判斷芯片目前的工作狀態(tài)。語(yǔ)音合成流程圖如圖7所示。
3 系統(tǒng)軟件設(shè)計(jì)
示教與回放系統(tǒng)的軟件設(shè)計(jì)包括測(cè)控計(jì)算機(jī)的軟件設(shè)計(jì)和各從設(shè)備Arduino mega260控制器的軟件設(shè)計(jì)。
測(cè)控計(jì)算機(jī)是整個(gè)系統(tǒng)的控制核心,其軟件采用C#進(jìn)行編寫(xiě),在示教與回放系統(tǒng)中主要是對(duì)操作數(shù)據(jù)的記錄以便根據(jù)所記錄的數(shù)據(jù)對(duì)操作過(guò)程進(jìn)行精確回放,需要記錄的數(shù)據(jù)包括:各從設(shè)備操作人員的操作口令,操作動(dòng)作,口令及動(dòng)作時(shí)間,各操作對(duì)應(yīng)的操作現(xiàn)象。為簡(jiǎn)化記錄數(shù)據(jù),事先編制好各事件代碼,記錄過(guò)程只記錄代碼,大大提高程序效率。建立結(jié)構(gòu)體如下:
在操作訓(xùn)練過(guò)程中測(cè)控計(jì)算機(jī)每隔50 ms 對(duì)下位機(jī)進(jìn)行控制及輪詢,并記錄反饋數(shù)據(jù),在數(shù)據(jù)記錄時(shí)以50 ms 為一個(gè)單位。采用定時(shí)器對(duì)時(shí)間進(jìn)行控制。在回放過(guò)程中首先比對(duì)當(dāng)前時(shí)間和所記錄的時(shí)間,當(dāng)所記錄的時(shí)間與當(dāng)前時(shí)間吻合時(shí)測(cè)控計(jì)算機(jī)控制下位機(jī)執(zhí)行該事件,完成事件回放。
Arduino mega2560控制器負(fù)責(zé)接收測(cè)控計(jì)算機(jī)的控制指令并執(zhí)行指令,讀取語(yǔ)音識(shí)別結(jié)果,對(duì)聲強(qiáng)數(shù)據(jù)采集和處理,控制語(yǔ)音合成單元進(jìn)行語(yǔ)音合成等。Arduinomega2560 控制器采用串口中斷的方式進(jìn)行命令接收。
只有正確接收到命令才會(huì)執(zhí)行并回傳結(jié)果,若測(cè)控計(jì)算機(jī)在限定時(shí)間內(nèi)未收到回傳結(jié)果則表明發(fā)生錯(cuò)誤,測(cè)控計(jì)算機(jī)需重新發(fā)送。數(shù)據(jù)接收流程圖如圖8所示。
4 總結(jié)
本文利用智能語(yǔ)音芯片設(shè)計(jì)了某模擬訓(xùn)練器的示教與回放系統(tǒng),該系統(tǒng)不需要現(xiàn)在流行的虛擬現(xiàn)實(shí)技術(shù)的支持,僅在MCU的控制下就可以運(yùn)行。該系統(tǒng)也可以在小型的便攜式設(shè)備上實(shí)現(xiàn),具有良好的應(yīng)用前景。
評(píng)論