




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGE基于單片機(jī)的智能語音識別系統(tǒng)設(shè)計(硬件部分)系別:專業(yè)班:姓名:學(xué)號:指導(dǎo)教師:基于單片機(jī)的智能語音識別系統(tǒng)設(shè)計(硬件部分)TheDesignofIntelligentSpeechRecognitionSystemBasedonSingle-chipComputer(HardWare)PAGE15摘要本文設(shè)計一個讓機(jī)器通過識別和理解過程把語音信號轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的高技術(shù)的語音識別系統(tǒng)。本語音識別系統(tǒng)以LD3320語音識別芯片為核心部件,主控MCU選用STC10L08XE。主控MCU通過控制LD3320內(nèi)部寄存器以及SPIflash實現(xiàn)語音識別和對話。通過麥克風(fēng)將聲音信息輸入LD3320進(jìn)行頻譜分析,分析后將提取到的語音特征和關(guān)鍵詞語列表中的關(guān)鍵詞語進(jìn)行對比匹配,找出得分最高的關(guān)鍵詞語作為識別結(jié)果輸出給MCU,MCU針對不同的語音輸入情況通過繼電器對語音命令所對應(yīng)的電器實現(xiàn)控制。同時也可以通過對寄存器中語音片段的調(diào)用,實現(xiàn)人機(jī)對話。設(shè)計中,電源模塊采用3.3V供電,主要控制及識別部分采用LM1117-3.3穩(wěn)壓芯片,語音播放及繼電器部分采用7812為其提供穩(wěn)定的電流電壓。寄存器采用一片華邦SPIflash芯片W25Q40AVSNIG,大小為512Kbyte。系統(tǒng)聲音接收模塊采用的傳感器為一小型麥克風(fēng)——駐極體話筒,在它接收到聲音信號后會產(chǎn)生微弱的電壓信號并送給MCU。另外系統(tǒng)還采用單片機(jī)產(chǎn)生不同的頻率信號驅(qū)動蜂鳴器來完成聲音提示,此方案能完成聲音提示功能,給人以提示的可懂性不高,但在一定程度上能滿足要求,而且易于實現(xiàn),成本也不高。關(guān)鍵詞:語音識別LD3320STC10L08XE單片機(jī)頻譜分析
AbstractThispaperdesignsahi-techspeechrecognitionsystemwhichenablesmachinestotransferspeechsignalsintocorrespondingtextsorordersbyrecognizingandcomprehending.ThecenterpieceofthespeechrecognitionsystemisLD3320voicerecognitionchip,itsmasterMCUisSTC10L08XE.MasterMCUachievevoiceconversationbycontrollingtheinternalregistersandSPIflashLD3320.ThesoundinformationisinputtedintoLD3320bymicrophonetodospectrumanalysis.Afteranalyzingthevoicecharacteristicsextractedarecomparedandmatchedwiththekeywordsinthelistofkeywords.ThenthehighestscoresofkeywordsfoundwouldbeoutputtoMCUasrecognitionresults.MCUcancontrolthecorrespondingelectricalrealofspeechrecognitionfordifferentvoiceinputthroughtherelaysandcanalsoachievevoiceconversationthroughacalltovoiceclipsinregister.Inthedesign,powermoduleuses3.3V.ThemaincontrolandidentificationpartadoptLM1117-3.3voltageregulatorchip,and7812isusedtoprovidestablecurrentandvoltageforthepartofvoicebroadcastandrelay.RegisteruseschipSPIflashW25Q40AVSNIGwhichis512Kbyte.Thesensorusedinthespeechreceptionmoduleofthedesignismicrophone,namelyelectritmicrophone.Afterreceiveingthesoundsignal,itcanproduceaweakvoltagesignalwhichwillbesenttoMCU.Inaddition,thesystemalsoadoptsadifferentfrequencysignalsgeneratedbymicrocontrollertodrivethebuzzertocompletethevoiceprompt,andthisprogramcancompletethevoiceprompt.TheprogramgivesarelativelypoorintelligibilityTips.However,tosomeextent,itcanmeettherequirementsandiseasytoimplementandthecostisnothigh.Keywords:SpeechRecognitionLD3320STC10L08XESingle-chipcomputerSpectrumAnalysis目錄摘要 IAbstract II緒論 11設(shè)計方案 51.1系統(tǒng)設(shè)計要求 51.2總體方案設(shè)計 52系統(tǒng)硬件電路設(shè)計 62.1電源模塊 62.2寄存器模塊 62.3控制單元模塊 72.3.1STC10L08XE單片機(jī)簡介 82.3.2STC11/10xx系列單片機(jī)的內(nèi)部結(jié)構(gòu) 102.4聲音接收器模塊 102.5聲光指示模塊 112.6語音識別模塊 112.6.1LD3320芯片簡介 112.6.2功能介紹 122.6.3應(yīng)用場景 132.6.4芯片模式選擇 152.6.5吸收錯誤識別 162.6.6口令觸發(fā)模式 172.6.7關(guān)鍵詞的ID及其設(shè)置182.6.8反應(yīng)時間183系統(tǒng)軟件設(shè)計 203.1系統(tǒng)程序流程圖 203.2系統(tǒng)各模塊程序設(shè)計 203.2.1主程序 203.2.2芯片復(fù)位程序 273.2.3語音識別程序 283.2.4聲音播放程序 374系統(tǒng)調(diào)試 444.1軟件調(diào)試 444.1.1上電調(diào)試 444.1.2讀寫寄存器調(diào)試 444.1.3檢查寄存器初始值 444.2硬件電路調(diào)試 454.2.1硬件檢查 454.2.2硬件功能檢查 454.3綜合調(diào)試 46結(jié)論 47致謝 48參考文獻(xiàn) 49附錄1實物圖片 50附錄2系統(tǒng)電路圖 51緒論課題背景及意義讓機(jī)器聽懂人類的語音,這是人們長期以來夢寐以求的事情。語音識別是一門交叉學(xué)科,關(guān)系到多學(xué)科的研究領(lǐng)域,不同領(lǐng)域上的研究成果都對語音識別的發(fā)展作了貢獻(xiàn)。語音識別技術(shù)就是讓機(jī)器通過識別和理解過程把語音信號轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的高技術(shù)。計算機(jī)語音識別過程與人對語音識別處理過程基本上是一致的。目前主流的語音識別技術(shù)是基于統(tǒng)計模式識別的基本理論。一個完整的語音識別系統(tǒng)可大致分為三部分:(1)語音特征提?。耗康氖菑恼Z音波形中提取隨時間變化的語音特征序列。(2)聲學(xué)模型與模式匹配(識別算法):聲學(xué)模型是識別系統(tǒng)的底層模型,并且是語音識別系統(tǒng)中最關(guān)鍵的一部分。聲學(xué)模型通常由獲取的語音特征通過訓(xùn)練產(chǎn)生,目的是為每個發(fā)音建立發(fā)音模板。在識別時將未知的語音特征同聲學(xué)模型(模式)進(jìn)行匹配與比較,計算未知語音的特征矢量序列和每個發(fā)音模板之間的距離。聲學(xué)模型的設(shè)計和語言發(fā)音特點密切相關(guān)。聲學(xué)模型單元大?。ㄗ职l(fā)音模型、半音節(jié)模型或音素模型)對語音訓(xùn)練數(shù)據(jù)量大小、系統(tǒng)識別率,以及靈活性有較大影(3)語義理解:計算機(jī)對識別結(jié)果進(jìn)行語法、語義分析。明白語言的意義以便作出相應(yīng)的反應(yīng)。通常是通過語言模型來實現(xiàn)。語音識別過程實際上是一種認(rèn)識過程。就像人們聽語音時,并不把語音和語言的語法結(jié)構(gòu)、語義結(jié)構(gòu)分開來,因為當(dāng)語音發(fā)音模糊時人們可以用這些知識來指導(dǎo)對語言的理解過程。對機(jī)器來說,識別系統(tǒng)也要利用這些方面的知識,只是鑒于語音信號的多變性、動態(tài)性、瞬時性,語音識別技術(shù)與人類的大腦還有一定的差距。因此在語言識別技術(shù)選擇,其應(yīng)用模式和系統(tǒng)開發(fā)上,都需要專業(yè)的設(shè)計和調(diào)試,以實現(xiàn)最好的應(yīng)用效果[1]。1996年9月,CharlesSchwab開通了首個大規(guī)模商用語音識別應(yīng)用系統(tǒng):股票報價系統(tǒng)。該系統(tǒng)有效地提高了服務(wù)質(zhì)量和客戶滿意度,并減少了呼叫中心的費用。不久,Schwab又開通了語音股票交易系統(tǒng)。美國主要電信運營商Sprint的PCS部門以卓越和有創(chuàng)新的客戶服務(wù)著稱。自2000年來為客戶開通了語音驅(qū)動系統(tǒng),提供客戶服務(wù)、語音撥號、查號和更改地址等業(yè)務(wù)。2001年9月開通的可以自然方式對話的咨詢系統(tǒng),更實現(xiàn)了以自然、開放的詢問方式實時獲得所需要的信息。BellCanada,加拿大最大的電信運營商,也擁有多個語音驅(qū)動系統(tǒng),提供從客戶服務(wù),增值業(yè)務(wù)和資訊服務(wù)多種功能。這些系統(tǒng)不但減少了用戶的投訴,也為無線網(wǎng)絡(luò)服務(wù)增值,增強(qiáng)了客戶的忠誠度并開辟了新的收入來源。仔細(xì)分析這些案例不難發(fā)現(xiàn),一個成功的語音應(yīng)用首先是基于詳細(xì)準(zhǔn)確的用戶需求調(diào)查。只有詳細(xì)了解客戶需求,才能根據(jù)需要選用不同類型的產(chǎn)品。目前市場上的語音識別產(chǎn)品基本可分為:特定人/非特定人:是按照聲學(xué)模型建立的方式來劃分。特定人識別的聲學(xué)模型是針對某一特定用戶訓(xùn)練的。一般來說用戶需要先訓(xùn)練系統(tǒng),然后才能識別該用戶的發(fā)音。而非特定人識別的聲學(xué)模型是針對某一種特定的語言來訓(xùn)練的,發(fā)音人不需要訓(xùn)練既可使用。雖然在建立模型時需要大量的語料,對用戶來說卻提供了更大方便,他們甚至不需要了解該過程。嵌入式/服務(wù)器模式:嵌入式是將語言識別軟件及模型,寫在設(shè)備(如手機(jī))的存儲器里,識別過程在終端完成。在服務(wù)器模式,終端只負(fù)責(zé)收集和傳導(dǎo)語音信號,由服務(wù)器負(fù)責(zé)完成識別。因此,對于大規(guī)模,多用戶和有大量識別需求的系統(tǒng),服務(wù)器模式提供了有效的方式。目前運營商和企業(yè)用戶的需求多數(shù)適合采用非特定人服務(wù)器模式的服務(wù)。例如上面提到的CharlesSchwab,SprintPCS和BellCanada都選用了NuanceCommuni-cations提供的語音識別軟件。加之專業(yè)的系統(tǒng)集成方案及Nuance技術(shù)服務(wù)所提供的良好的語音用戶界面設(shè)計和后期優(yōu)化,使得應(yīng)用系統(tǒng)獲得了很高的客戶滿意度。在很多方面超過了接線員。國內(nèi)外發(fā)展現(xiàn)狀60年代,計算機(jī)的應(yīng)用推動了語音識別的發(fā)展。這時期的重要成果是提出了動態(tài)規(guī)劃(DP)和線性預(yù)測分析技術(shù)(LP),其中后者較好地解決了語音信號產(chǎn)生模型的問題,對語音識別的發(fā)展產(chǎn)生了深遠(yuǎn)影響。
70年代,語音識別領(lǐng)域取得了突破。在理論上,LP技術(shù)得到進(jìn)一步發(fā)展,動態(tài)時間歸正技術(shù)(DTW)基本成熟,特別是提出了矢量量化(VQ)和隱馬爾可夫模型(HMM)理論。在實踐上,實現(xiàn)了基于線性預(yù)測倒譜和DTW技術(shù)的特定人孤立語音識別系統(tǒng)。
80年代,語音識別研究進(jìn)一步走向深入,其顯著特征是HMM模型和人I神經(jīng)元網(wǎng)絡(luò)(ANN)在語音識別中的成功應(yīng)用。HMM模型的廣泛應(yīng)用應(yīng)歸功于AT&TBell實驗室Rabiner等科學(xué)家的努力,他們把原本艱澀的HMM純數(shù)學(xué)模型I程化,從而為更多研究者了解和認(rèn)識。ANN和HMM模型建立的語音識別系統(tǒng),性能相當(dāng)。
進(jìn)入90年代,隨著多媒體時代的來臨,迫切要求語音識別系統(tǒng)從實驗室走向?qū)嵱?。許多發(fā)達(dá)國家如美國、日本、韓國以及IBM、Apple、AT&T、NTT等著名公司都為語音識別系統(tǒng)的實用化開發(fā)研究投以巨資。我國對語音識別的研究起步相比于發(fā)達(dá)國家來說比較晚,但是經(jīng)過科研I作者們不懈的努力,現(xiàn)在已經(jīng)取得了巨大的突破。1988年,在清華大學(xué)和中科院聲學(xué)所的共同努力下,無限詞匯的漢語聽寫機(jī)被研制成功.此后不少公司陸續(xù)推出自己的漢語聽寫機(jī)產(chǎn)品,大大促進(jìn)了漢語語音識別的發(fā)展.之后,在國家的大力支持下,很多國內(nèi)單位在語音識別上進(jìn)行了大量的探索研究,為漢語的語音識別做出了杰出的貢獻(xiàn)。語音識別的應(yīng)用場合目前,語音識別技術(shù)己經(jīng)在生活中的諸多方面有了廣泛的應(yīng)用,而這方面的例子已經(jīng)屢見不鮮,其主要的應(yīng)用場合如下(1)聲控應(yīng)用在很多場合與特定環(huán)境中,使用聲控系統(tǒng)可以大大提高生活質(zhì)量和便利程度。比如司機(jī)通過語音進(jìn)行電話撥號,可以減少交通事故的發(fā)生率,而很多行動不便的人通過聲控系統(tǒng)更是可以將生活質(zhì)量提高.(2)數(shù)據(jù)庫檢索在不少行業(yè)部門當(dāng)中都需要對龐大的數(shù)據(jù)進(jìn)行檢索和查詢,這是一項非常復(fù)雜的I作。語音識別的引入可以大大的減少勞動量,既方便又節(jié)約人力成本.(3)語音聽寫機(jī)用口述來代替人工輸入文檔,提高了輸入速度,而且更加方便,可以為辦公自動化帶來革命性的變化。比如IBM出品的ViaVoicc系列產(chǎn)品就是這個方面典型的應(yīng)用。(4)自動口譯將語音識別應(yīng)用于自動口語翻譯是未來的一大趨勢,不僅可以節(jié)省大量的人力。同時也讓翻譯工作變得更加輕松簡單。一些發(fā)達(dá)國家在自動口譯方面的研究己經(jīng)取得了一定的進(jìn)展。目前,語音識別技術(shù)仍在高速發(fā)展之中。隨著時代的進(jìn)步,越來越多的領(lǐng)域開始引入這項技術(shù),人類的日常生活會級此而帶來更大改變。語音識別所面臨的難題雖然在過去的幾十年語音識別技術(shù)已經(jīng)取得了長足的發(fā)展,但是現(xiàn)在的技術(shù)還不足以讓電腦像人一樣隨意交談.具體說來,主要有以下幾個方面:首先,語音識別系統(tǒng)的魯棒性不夠強(qiáng),對環(huán)境的依賴程度過高。在某一種環(huán)境下訓(xùn)練的語音識別系統(tǒng)換了一種環(huán)境之后性能就會下降。其次,語音識別對于外部噪聲特別敏感。這不僅是因為外部噪聲會導(dǎo)致語音信號發(fā)生變化,而且由于嘈雜的環(huán)境下人的音調(diào),語速以及音量都會改變,因此識別難度也更大。再次,語音的隨機(jī)性很強(qiáng)。就算是同一個人在不同的時刻,由于身心狀態(tài)的差異,導(dǎo)致語音的特征也會不一樣。最后,由于目前對人類的聽覺理解、知識積累和神經(jīng)系統(tǒng)的機(jī)理等方面的研究水平不足,限制了語音識別的發(fā)展。為了解決上述問題,研究者們想出了各種方法,比如自適應(yīng)訓(xùn)練、神經(jīng)網(wǎng)絡(luò)等。這些做法雖然都取得了一定的成績,然而,如果要讓語音識別系統(tǒng)的性能得到大幅的提高,還有大量的工作要做。目前,市場上大詞匯量的語音識別系統(tǒng)多采樣PC機(jī)作為硬件平臺,而基于嵌入式的中小詞匯的語音識別系統(tǒng),其硬件設(shè)計常采用DSP或者AUM這樣的高性能芯片,這樣硬件成本較高。對于單片機(jī)來說,雖然成本低,但由于單片機(jī)本身計算能力有限,而語音識別的計算量過大,這對系統(tǒng)在單片機(jī)上的實現(xiàn)帶來了很大的困難。因此,如何改進(jìn)算法以減少計算量成為了語音識別能否在單片機(jī)上運行的一大難點。
1設(shè)計方案1.1系統(tǒng)設(shè)計要求(1)簡單語音對話交流。(2)語音點播:①唱兒歌②朗誦一古詩③講笑話本課題旨在開發(fā)一個將語音識別技術(shù),傳感器技術(shù)等技術(shù)應(yīng)用其中,并集教育性、娛樂性和互動性于一體的智能語音識別系統(tǒng)。1.2總體方案設(shè)計本語音識別系統(tǒng)以LD3320語音識別芯片核心部件,制作了一個語音識別控制系統(tǒng)。本系統(tǒng)主控MCU選用STC10L08XE。主控MCU通過控制LD3320內(nèi)部寄存器以及SPIflash實現(xiàn)語音識別語音對話。通過MIC將聲音信息輸入LD3320進(jìn)行頻譜分析,分析后將提取到的語音特征和關(guān)鍵詞語列表中的關(guān)鍵詞語進(jìn)行對比匹配,找出得分最高的關(guān)鍵詞語作為識別結(jié)果輸出給MCU,MCU針對不同的語音輸入情況同通過繼電器對語音命令所對應(yīng)的電器實現(xiàn)控制。同時也可以通過對寄存器語音片段的調(diào)用,實現(xiàn)人機(jī)對話。該系統(tǒng)框架圖如下圖1-1所示:主控MCUSTC10L08XE語音識別語音播放SPIFLASHW25Q40AVSNIG圖1-1系統(tǒng)框架圖2系統(tǒng)硬件電路設(shè)計2.1電源模塊本系統(tǒng)采用3.3V供電,主要控制及識別部分采用LM1117-3.3穩(wěn)壓芯片,語音播放及繼電器部分采用7812為其提供穩(wěn)定的電流電壓。電源模塊電路圖如圖2-1所示:圖2-1電源模塊電路圖(1)參數(shù)特性LM1117-3.3參數(shù)特性:輸入電壓(V)4.75~12輸出電流(A)1輸出電壓(V)3.3壓差(V)1.3(2)封裝類型:SOT-223引腳:3體寬:6.30-6.71mm長度:3.30-3.71mm引腳間距:2.22.2寄存器模塊本系統(tǒng)采用一片華邦SPIflash芯片W25Q40AVSNIG,大小為512Kbyte。用于存儲人機(jī)對話時的聲音素材。寄存器模塊電路圖如圖2-2所示:圖2-2寄存器模塊電路圖選用串行閃存的理由:(1)能夠減少微處理器的封裝管腳數(shù)目;
(2)線路板(PCB)可以更小,更簡單;
(3)能夠減少系統(tǒng)電路切換噪聲;
(4)能夠減低系統(tǒng)功能及制造成本。2.3控制單元模塊采用STC10L08XE單片機(jī)作為系統(tǒng)的主控制單元。STC10L08XE系列單片機(jī)具有強(qiáng)大的數(shù)據(jù)處理功能,且I/O口控制靈活??刂茊卧K電路圖如圖2-3所示:圖2-3控制單元模塊電路圖2.3.1STC10L08XE單片機(jī)簡介STC10L08XE單片機(jī)是宏品科技生產(chǎn)的單時鐘/機(jī)器期(IT)的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成高可靠復(fù)位電路,針對高速通信,智能控制,強(qiáng)干擾場合[1]。11/10xx系列單片機(jī)的定時器0/定時器1串行口與傳統(tǒng)8051兼容,增加了獨立波特率發(fā)牛器,省去了定時器2。傳統(tǒng)8051的111條指令執(zhí)行速度全面提速,最快的指令快24倍,最慢的指令快3倍。增強(qiáng)型8051CPU,IT,單時鐘/機(jī)器周期,指令代碼完全兼容傳統(tǒng)8051。工作電壓:STCIIF系列工作電壓:5.5V-4.1V/3.7V(5V單片機(jī));STCIIF系列工作電壓:3.6V一2.4V/2.1V(3V單片機(jī));STCIOFxx系列工作電壓:5.5V–3.8V/3.3V(5V單片機(jī));STCIOLxx系列工作電壓:3.6V一2.4V/2.1V(3V單片機(jī))。工作頻率范圍:0一35MHz,相當(dāng)于普通8051的0~420MHz。STCIIF/Lxx系列單片機(jī)用戶應(yīng)用程序空間:1/2/3/4/5/6/8/16/20/32/40/48/52/56/60/62K字節(jié)。STCIOF/Lxx系列單片機(jī)用戶應(yīng)用程序空間:4K/6K/8K/10K/12K/14K字節(jié)。STC11xx系列單片機(jī):片上集成1280字節(jié)或256字節(jié)RAM;STC11XX系列單片機(jī):片上集成51字節(jié)或256字節(jié)RAM。通用I/O口(36/40/12/14/16個)每個I/O口驅(qū)動能力均可達(dá)到2OmA,復(fù)位后為:(1)準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口);(2)可設(shè)置成四種模式:①準(zhǔn)雙向口/弱上拉;②強(qiáng)推挽/強(qiáng)上拉;③僅為輸入/高阻;④開漏。ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器。可通過串口(RxDIP3.0,TxD/P3.1)直接下載用戶程序,數(shù)秒即可完成一片[2]。有EEPROM功能。看門狗。內(nèi)部集成MAX810專用復(fù)位電路(晶體頻率在24MHZ以下時,要選擇高的復(fù)位門檻電壓,如4.1V以下復(fù)位,晶體頻率在12MHz以下時,可選擇低的復(fù)位門檻電壓,如3.7V以下復(fù)位,復(fù)位腳接1K電阻到地)。內(nèi)置一個對內(nèi)部Vcc。迸行掉電檢測的掉電檢測電路,可設(shè)置為中斷或復(fù)位。5v單片機(jī)掉電檢測門檻電壓為4.1V~3.7V附近,3.3V單片機(jī)掉電檢測門檻電壓為2.4V附近。時鐘源:外部高精度晶體/時鐘,內(nèi)部R/C振蕩器。用戶在下載用戶程序時,可選擇是使用內(nèi)部R/C振蕩器還是外部晶體/時鐘;常溫下內(nèi)部側(cè)R/C振蕩器頻率為:4MHz~8MHz;精度要求不高時,可選擇使用內(nèi)部時鐘,但因為有制造誤差和溫漂,以實際測試為準(zhǔn)。共2個16位定時器(與傳統(tǒng)8051兼容的定時器/計數(shù)器,16位定時器TO和T1)STCIOxx全系列都有1個獨立波特率發(fā)生器。3個時鐘輸出口,可由TO的溢出在P3.4/TO輸出時鐘,可由T1的溢出在P3.5/TI輸出時鐘,獨立波特率發(fā)生器可以在P1.0口輸出時鐘。外部中斷I/O口5路,傳統(tǒng)的下降沿中斷或低電平觸發(fā)中斷,PowerDown模式可由外部中斷喚醒,INTO/P3.2,INTI/P3.3,INT/TO/P3.4,INT/TI/P3.5,INTINT/RxD/P3.0r或INT/RxD/P1.6。PowcTDown(掉電)模式可由內(nèi)部掉電喚醒,可用定時器喚醒(STGIIxx系列有此功能,STCIOxx無此功能),也可由上面提到的外部中斷口中斷喚醒,由于INT/RxD支持下降沿中斷,故也可支持遠(yuǎn)程通信喚醒。一個獨立的通用全雙上異步串行口(UART),做主機(jī)時可以當(dāng)2個串口使用[RxD/P3.0,TxD/P3.1]可以切換到[RxD/P1.6,TxD/P1.7],通過將串口在P3口和P1口之間來回切換,將l個串口作為2個主串口分時復(fù)用,可低成本實現(xiàn)2個串口,當(dāng)然有其局限性。工作溫度范圍:-4℃-+85℃(工業(yè)級)/0℃-75℃(商業(yè)級)。封裝:SOP16lDIP16/DIP18/SOP20/DIP20/LSSOP20/PDIP-40/LQFP-44/PLCC-44(暫時不要選PLCC-44)。SOP16有12個I/O口,DIP18有14個I/O口,SOP20/PDIP20/LSSOP20有16個I/O口,LQFP44有40個I/O口。2.3.2STC11/10xx系列單片機(jī)的內(nèi)部結(jié)構(gòu)STC11/10xx系列單片機(jī)的內(nèi)部結(jié)構(gòu)框圖如圖2-1所示。STC11/10xx單片機(jī)中含中央處理器(CPU)、程序存儲器(Flash)、數(shù)據(jù)存儲器(SRA)、定時/計數(shù)器、UART串口、I/O接口、看門狗及片內(nèi)振蕩器和外部晶體振蕩電路等模塊。STC11/10xx系列單片機(jī)幾乎包含了數(shù)據(jù)采集和控制中所需的所有單元模塊,可稱得上一個片上系統(tǒng)。圖2-4STC11/10xx的功能與結(jié)構(gòu)圖如圖2-4所示:圖2-4STC11/10xx系列單片機(jī)的內(nèi)部結(jié)構(gòu)框2.4聲音接收器模塊系統(tǒng)聲音接收模塊采用的傳感器為一小型麥克風(fēng)—駐極體話筒。在它接收到聲音信號后會產(chǎn)生微弱的電壓信號。聲音接收器模塊如圖2-4所示圖2-4聲音接收器模塊電路圖2.5聲光指示模塊采用單片機(jī)產(chǎn)生不同的頻率信號驅(qū)動蜂鳴器來完成聲音提示,此方案能完成聲音提示功能,給人以提示的可懂性不高,但在一定程度上能滿足要求,而且易于實現(xiàn),成本也不高。2.6語音識別模塊采用芯片LD3320,一顆基于非特定人語音識別(SI一ASR:Speaker一IndependentAutomaticSpeechRecognition)技術(shù)的語音識別/聲控芯片。提供了真正的單芯片語音識別解決方案。語音識別模塊電路圖如圖2-6所示。2.6.1LD3320芯片簡介LD3320是一顆基于非特定人語音識別(SI-ASR:Speaker-IndependentAutomaticSpeechRecognition)技術(shù)的語音識別/聲控芯片。提供了真正的單芯片語音識別解決方案。LD3320芯片上集成了高精度的A/D和D/A接口,不再需要外接輔助的Flash和RAM,即可以實現(xiàn)語音識別/聲控/人機(jī)對話功能。并且,識別的關(guān)鍵詞語列表是可以動態(tài)編輯的?;贚D3320,可以在任何的電子產(chǎn)品中,甚至包括最簡單的51作為主控芯片的系統(tǒng)中,輕松實現(xiàn)語音識別/聲控/人機(jī)對話功能。為所有的電子產(chǎn)品增加VUI(VoiceUserInterface)語音用戶操作界面。圖2-6語音識別模塊電路圖2.6.2功能介紹尺寸:2*6.2cm排針:2*20標(biāo)準(zhǔn)DIP40排針。LD3320芯片的音頻模擬管腳連接相應(yīng)的電容/電阻后通過排針引出。M-LD3320模塊上設(shè)計有2個音頻插座,直接引出MIC輸入和Speak:輸出信號。用戶可以用一個帶麥克風(fēng)的耳機(jī)驗證語音識別和聲音播放,十分方便。M-LD3320模塊上沒有電源芯片,相應(yīng)的電源管腳由排針引出,由開發(fā)者連接入3.3v電源輸入。M-LD3320模塊上的CLK輸入可以選擇如下任意一種:(1)直接將晶振信號通過排針輸入到LD3320的相應(yīng)管腳。(2)或者用戶可以自行焊接晶振,在模塊上預(yù)留晶振的空間和連接點[3]。M-LD3320模塊上有兩個LED燈,連接到LD3320芯片的29,30管腳上,在LD3320上電重啟復(fù)位(RSTB*)并穩(wěn)定工作后,29,30管腳會穩(wěn)定輸出低電平,因此這兩個LED燈可以作為芯片上電指示。2.6.3應(yīng)用場景由于LD3320可以動態(tài)編輯的識別關(guān)鍵詞語列表,因此其可以應(yīng)用的范圍大大超過了那些不可以改變識別列表的芯片。又由于LD3320是一顆真正的單芯片解決方案,不需要輔助的外圍Flash/RAM/AD,從而降低了系統(tǒng)的成本。其潛在的應(yīng)用場景主要包括:(1)電磁爐/微波爐/智能家電操作在現(xiàn)在的家電中,各種各樣的設(shè)置越來越繁復(fù)。用戶在使用過程中,還要不斷地對家電進(jìn)行功能切換。在引入LD3320芯片后,可以用語音直接控制這些家電。比如用語音來控制電磁爐把火力調(diào)整到“煎炸”或者是“慢燉”。(2)導(dǎo)航儀在導(dǎo)航上,語音識別應(yīng)用最主要的限制因素包括:=1\*GB3①POI地名數(shù)量過多,(一個城市經(jīng)常有數(shù)萬個POI地名),使得在這么多的地名中進(jìn)行語音識別搜索很難達(dá)到滿意的地步。=2\*GB3②錄音效果的制約?,F(xiàn)在一般的導(dǎo)航機(jī)器都是安置在車子的前端,距離用戶的距離很遙遠(yuǎn),錄音的質(zhì)量無法得到保障,也就無法達(dá)到滿意的識別效果。因此在導(dǎo)航上比較可行的語音操作方案是在語音命令/控制/查詢導(dǎo)航系統(tǒng)上。也就是用語音在開車過程中去對導(dǎo)航進(jìn)行一些操作,比如重新規(guī)劃路徑,查詢前方加油站,播報方位,查詢附近的餐飲,查詢車速等等這樣的命令。同時,對于錄音距離的問題,可以在麥克風(fēng)中集成LD3320后,安裝在保險帶上(司機(jī)的胸前位置)。這樣可以最好效果地接受司機(jī)的語音指令,并把相應(yīng)的識別結(jié)果發(fā)送到導(dǎo)航儀上就可以(比如用最簡單的紅外就可以把識別結(jié)果通知到導(dǎo)航儀)。這樣的應(yīng)用,在導(dǎo)航車載環(huán)境中,是最具可行性和實用性的語音操作功能。(3)MP3/MP4目前,在手機(jī)中,語音點歌是一個很受市場歡迎的亮點。在獨立的MP3/MP4設(shè)備中,加入LD3320芯片后,也可以方便地實現(xiàn)語音點歌的功能。隨著用戶把歌曲拷貝進(jìn)MP3/MP4,同時把歌曲名字傳入進(jìn)LD3320芯片,這樣用戶再說出歌曲名字的時候,就可以得到識別,并播放該歌曲。(4)數(shù)碼像框數(shù)碼像框中存放了許多的照片和視頻,同時又具有多種播放的方式。一般是通過按鍵或者遙控器的方式來對其進(jìn)行操作,但是這樣的操作并不方便。在引入了LD3320提供的語音識別功能后,用戶可以最自然地用語音去點播想要顯示的照片,或者改變數(shù)碼像框的顯示方式。使得這樣的數(shù)碼產(chǎn)品更加具有人性化的操作界面。(5)機(jī)頂盒/彩電遙控器隨著數(shù)字電視的普及,家庭中可以收看到的電視節(jié)目也越來越豐富。大家也就苦十在眾多的頻道中迅速選擇到自己想要看的頻道。在把LD3320語音識別芯片集成進(jìn)機(jī)頂盒/彩電遙控器后,用戶只需要對著遙控器說出想要看的電視頻道的名字,就可以快速地選擇。比如用戶可以說出“奧運體育”,就可以轉(zhuǎn)到體育頻道來觀看精彩的體育比賽了。(6)智能玩具/對話玩具在電視購物中曾經(jīng)出現(xiàn)過可以人機(jī)對話的玩具,比如金福豬,金福狗等。這些玩具采用的語音識別只能支持固定的10條左右的語音命令,比如“你好”,“我想聽歌”等等。采用LD3320芯片,可以利用其動態(tài)編輯識別關(guān)鍵詞語列表的性能,讓玩具實現(xiàn)及其復(fù)雜的對話腳本。避免了玩具的嚴(yán)重同質(zhì)化。(7)PMP/游戲機(jī)目前的游戲機(jī)操作都是基于鍵盤的操作。在引入了語音界面后,可以用語音對游戲進(jìn)行操作,增加游戲的趣味性。比如在游戲中,可以通過語音來吟誦一段魔法咒語。或者用語音與游戲?qū)χ氯?。又或者可以通過語音來快速地切換游戲的視角,組隊。(8)自動售貨機(jī)在有了LD3320語音界面后,人們可以對著售貨機(jī)說出要買的商品就可以,比如“可口可樂”或者“面巾紙”。(9)地鐵自動售票機(jī)在大都市中,無數(shù)不熟悉道路的人在買地鐵票時,總是無法知道自己要去的站是多少票價。有了語音界面后,只需要對著售票機(jī)說出要去的地方,就可以方便地買到車票。(10)導(dǎo)游機(jī)在引入LD3320的語音操作界面后,游客可以隨時用語音向?qū)в螜C(jī)發(fā)出指令,查詢某個景點的介紹和特征。避免了使用按鍵在導(dǎo)游機(jī)上麻煩地輸入景點的名稱,也避免了導(dǎo)游機(jī)沒有人機(jī)互動Ifu成為單純的播放聲音的錄音帶。(11)樓宇電視的廣告點播目前分眾傳媒等公司的樓宇廣告設(shè)施,遍布幾乎所有的寫字樓,也在廣告投放上取得了良好的效果。但是目前用戶在接受廣告時,都是被動地去接受信息。對十其中感興趣的廣告,只能是等待下次再看到時進(jìn)行仔細(xì)地了解,沒有辦法進(jìn)行主動式地廣告查詢。引入LD3320語音識別芯片后,用戶可以用語音去方便地查詢想要了解的廣告信息。比如操作樓宇廣告“重新播放”“上一條”來重新觀看一條廣告?;蛘摺捌嚒眮睃c播想要看的汽車廣告。這樣的語音操作,不需要增加額外的鍵盤輸入和觸摸屏輸入,又可以讓用戶與廣告充分互動,取得更佳的效果。(12)公共照明系統(tǒng)/衛(wèi)生系統(tǒng)/智能家居的聲控可以用聲音來對照明,衛(wèi)生,或者其他一些家居系統(tǒng)作命令控制。躺著就可以說話控制家里的燈光開關(guān),在公共場合幫助殘疾人士非接觸地去控制衛(wèi)生系統(tǒng)的運行,可以聽懂人說話的智能家居,這些都是人I智能科技力圖達(dá)到的效果。使用LD3320芯片可以在一定程度上完成這樣的語音控制系統(tǒng),給人們的生活帶來更便利的語音交互界面。VUI(VoiceUserInterface)作為一種新的人機(jī)交互界面,會逐步地走入人們的口常生活,在適合用語音控制的地方給人們提供更多的便利。2.6.4芯片模式選擇用戶可以通過編程,設(shè)置兩種不同的用戶使用模式:“觸發(fā)識別模式”和“循環(huán)識別模式”:(1)觸發(fā)識別模式:系統(tǒng)的主控MCU在接受到外界一個觸發(fā)后(比如用戶按動某個按鍵),啟動LD3320芯片的一個定時識別過程([比如5秒鐘),要求用戶在這個定時過程中說出要識別的語音關(guān)鍵詞語。過了這個過程后,需要用戶再次觸發(fā)才能再次啟動一個識別過程。(2)循環(huán)識別模式:系統(tǒng)的主控MCU反復(fù)啟動識別過程。如果沒有人說話沒有識別結(jié)果,則每次識別過程的定時到時后再啟動一個識別過程;如果有識別結(jié)果,則根據(jù)識別作相應(yīng)處理后(比如播放某個聲音作為回答)再啟動一個識別過程。一般來說,觸發(fā)識別適合十識別精度要求比較高的場合。外界觸發(fā)后,產(chǎn)品可以播放提示音或者其他方式來提示用戶在接下來的幾秒鐘內(nèi)說出要識別的內(nèi)容,這樣來引導(dǎo)用戶在規(guī)定的時間內(nèi)只說出要識別的內(nèi)容,從而保證比較高的識別率。而循環(huán)識別比較適合十需要始終進(jìn)行語音監(jiān)控的場合,或者沒有按鍵等其他設(shè)備控制識別開始的場合。而這種狀態(tài),識別準(zhǔn)確度會有一定下降,在循環(huán)識別的過程中,用戶的其他說話聲音,或者外界的其他聲音,都有可能被識別引擎誤識別出錯誤的結(jié)果,需要產(chǎn)品的控制邏輯都作相應(yīng)的處理。在識別精度要求高的場景中,應(yīng)該采用“觸發(fā)識別”模式。原因是:(1)用戶在每次按熱鍵后,精神處十最集中的狀態(tài),此時用戶說的語音命令會比較認(rèn)真,清晰。避免了用戶過十隨意的發(fā)音導(dǎo)致的識別誤差。(2)每次按熱鍵后,產(chǎn)品應(yīng)該給以一個明顯的開始信號,比如發(fā)出“當(dāng)”的一聲或者其他提示信號,可以給用戶一個明確開始的提示,方便用戶掌握說語音命令的時間。(3)由十按鍵觸發(fā)后,用戶就會貼近麥克風(fēng)并說出語音命令,避免了其他環(huán)境聲音被錄入LD3320芯片導(dǎo)致的誤識別。另:這種方式還是一種省電的方式,在不識別時,徹底不讓芯片工作以省電。2.6.5吸收錯誤識別在設(shè)定好要識別的關(guān)鍵詞語后,為了進(jìn)一步降低誤識別率,可以再添加一些其他的任意詞匯進(jìn)識別列表,用來吸收錯誤識別,從}fU達(dá)到降低誤識別率的目的??梢园堰@些關(guān)鍵詞語稱之為“垃圾關(guān)鍵詞語”。比如,某個應(yīng)用場景中,需要識別的關(guān)鍵詞語是4條,“前進(jìn)”,“后退”,“開門”,“關(guān)門”。在把這4個關(guān)鍵詞語設(shè)置進(jìn)LD3320后,可以再另外設(shè)置1030個詞語進(jìn)LD3320,比如“前門”,“后門”,“阿阿阿”,“嗚嗚”等等。只有識別結(jié)果是4個關(guān)鍵詞語之內(nèi)的,才認(rèn)為識別有效。如果識別結(jié)果是“垃圾關(guān)鍵詞語”,則說明是其他的聲音導(dǎo)致的誤識別,產(chǎn)品應(yīng)該重新開始一次識別過程。這樣,可以非常非常有效地降低誤識別率。極大地提高終端用戶的主觀使用體驗。“垃圾關(guān)鍵詞語”的選取,最好可以選擇一些字?jǐn)?shù)和關(guān)鍵詞語一樣的詞語,用來吸收可能發(fā)生的錯誤識別。需要說明的是:這一方法,即可以應(yīng)用在“觸發(fā)識別”模式中,也可以應(yīng)用在“循環(huán)識別”模式中。這樣作的原理是非特定人語音識別技術(shù)ASR,是一個基于關(guān)鍵詞語列表的匹配識別技術(shù),算法本質(zhì)是在提取輸入聲音的特征后,在關(guān)鍵詞語列表中尋找一個相似度最高的詞語作為識別結(jié)果。因此,任何的聲音輸入進(jìn)語音識別芯片,都會去和關(guān)鍵詞語列表中的詞語進(jìn)行匹配對比,并目_也都會依次打分。這樣,其他人在隨意聊天,或者任意說一個不在關(guān)鍵詞語列表中的命令,或者是其他毫無聯(lián)系的說話聲音,都可能會匹配到某一個關(guān)鍵詞語并作為結(jié)果輸出。從}fu造成誤識別。雖然算法設(shè)計中有一定的算法來避免出現(xiàn)這樣的誤識別,但還是不可完全避免。產(chǎn)品開發(fā)者可以在芯片外部針對性的處理以降低誤識別率。本節(jié)提供的方法,是非常有效的一種方法,在實際應(yīng)用中具有非常重要的地位。2.6.6口令觸發(fā)模式在一些應(yīng)用場合,希望識別精度高,但是又無法要求用戶每次都用手按鍵來“觸發(fā)識別”。此時,可以采用“口令觸發(fā)模式”。產(chǎn)品定義一句短語,作為觸發(fā)口令。比如,可以定義“芝麻開門”作為觸發(fā)口令。產(chǎn)品在等待用戶觸發(fā)時,啟動一個“循環(huán)識別”模式,把觸發(fā)口令“芝麻開門”和其他幾十個用來吸收錯誤的詞匯設(shè)置進(jìn)LD3320。只有當(dāng)檢測到識別出的結(jié)果是觸發(fā)口令時,才認(rèn)為是終端用戶叫了這個口令。此時,給出提示音,并啟動一個“觸發(fā)識別模式”,并把相應(yīng)的識別列表設(shè)置進(jìn)LD3320,提示用戶在提示音后幾秒鐘內(nèi)說出要執(zhí)行的操作。在等待用戶的過程時,如果識別的結(jié)果是那些用來吸收錯誤的詞匯,則認(rèn)為是誤識別,或者其他的聲音干擾,而不進(jìn)行任何的處理,直接再次進(jìn)入“循環(huán)識別”模式。這種口令觸發(fā)模式,融合了其他兩種模式的優(yōu)點,并目_結(jié)合第二節(jié)提到的“垃圾關(guān)鍵詞語”的方法,可以為產(chǎn)品提供更加方便實用的語音操作特性。2.6.7關(guān)鍵詞的ID及其設(shè)置在把關(guān)鍵詞語設(shè)置進(jìn)LD3320時,是把關(guān)鍵詞語的拼音串傳入LD3320,并同時傳入一個ID,用來代表這個關(guān)鍵詞語。LD3320的識別結(jié)果,也是把識別出的關(guān)鍵詞語的ID作為結(jié)果輸出。在LD3320芯片,不同的關(guān)鍵詞語是可以對應(yīng)同一個ID。而且ID不需要是連續(xù)的。這樣就為產(chǎn)品開發(fā)者提供了很方便的編程手段。例如:“北京”,“首都”,可以設(shè)置為同一個ID,進(jìn)行后續(xù)處理。例如:在使用第二節(jié)提到的“垃圾關(guān)鍵詞語”時,可以把添加的這些用來吸收錯誤的關(guān)鍵詞語的ID都標(biāo)記成一個值,或者把它們標(biāo)注為比較特殊的ID值,如大于200。在程序中就比較簡單,很容易處理誤識別,避免了添加進(jìn)很多關(guān)鍵詞語后,寫程序中需要為這些關(guān)鍵詞語的處理增加過多的程序分支。終端用戶在說語音指令時,可能對同一個詞匯有不同的發(fā)音習(xí)慣。例如,“打開電燈”,用戶可能會說“開燈”,“打開燈”,“打開電燈”,“把燈打開”等等。充分利用LD3320的50條可動態(tài)編輯的關(guān)鍵識別條目的特性,開發(fā)者可以把這些習(xí)慣發(fā)音都設(shè)置進(jìn)芯片,這樣無論用戶怎么說,都會被正確識別出來,進(jìn)一步增加終端用戶的良好體驗。同時,可以結(jié)合第四條秘籍“巧妙利用關(guān)鍵詞語的ID",在編程中可以很方便地處理這些多個習(xí)慣發(fā)音。值得注意的是,如果用來進(jìn)行控制工作,需要加入一些垃圾關(guān)鍵詞吸收錯誤以降低誤識率。2.6.8反應(yīng)時間LD3320芯片內(nèi)部是通過VAD(端點檢測)機(jī)制來判斷人是否說完語音,并給出識別結(jié)果根據(jù)VAD機(jī)制,語音識別芯片監(jiān)測出有一段連續(xù)的背景噪音后,認(rèn)為用戶已經(jīng)說完了語音識別命令,然后再給出識別結(jié)果。默認(rèn)設(shè)置是監(jiān)測到在人聲開始后有連續(xù)的600毫秒的不說話時,才會給出識別結(jié)果。也就是說,根據(jù)默認(rèn)設(shè)置,從人說話結(jié)束,到語音識別芯片主動送出結(jié)果中斷,至少要有600毫秒的間隔,如果用戶希望調(diào)節(jié)這個反應(yīng)間隔,可以從以下幾方面入手:(1)改變使用方式采用類似于步話機(jī)的方式,每次人按鍵后,按下不放,開始說命令,說完命令后,松開按鍵,每次檢測到松開按鍵時,主控的單片機(jī)通過設(shè)置BC寄存器來立即獲得識別結(jié)果。(2)修改VAD判斷的寄存器ASR:VadSilenceEnd在語音檢測到語音數(shù)據(jù)段以后,又檢測到背景噪音段,連續(xù)檢測到多長時間的背景噪音段才可以確認(rèn)為是真正的語音結(jié)束。每1單位,10毫秒。Default:60,相當(dāng)十600毫秒數(shù)值范圍:20200(相當(dāng)于2002000毫秒)但是這個修改會導(dǎo)致,如果這個時間過短,導(dǎo)致用戶在說話時的說話停頓也會造成VAD檢測認(rèn)為說話結(jié)束,從而降低某些用戶的識別率。(3)修改麥克風(fēng)的音量,35寄存器,(建議調(diào)整范圍在40H~58H之間),看哪個錄音增益適合使用的麥克風(fēng),以及使用的環(huán)境。(4)修改B8寄存器比如修改為2,那么這意味著,無論如何,在每次識別開始后2秒鐘的時間內(nèi),必然會停止識別給出一個識別結(jié)果。(這個設(shè)置不影響VAD檢測)。如果b8值特別小,比如設(shè)置:1,2,3,就需要在開始識別前,給用戶一個很明確的提示,要開始識別了。免得用戶還沒有準(zhǔn)備就識別時間過去了。但這個間隔設(shè)置的過短,也必然會引起一些可能存在的誤識別,比如語音命令比較長,那么這個時間設(shè)置的太小,就會造成比較長的語音命令無法在特定時間內(nèi)完整念完引起誤識別。所以當(dāng)這個數(shù)值設(shè)置比較小的時候,一般建議使用“觸發(fā)識別”的用戶界面,避免使用“循環(huán)識別”的用戶界面。(5)改變使用環(huán)境,或許在某些環(huán)境中的噪聲或者回聲會影響到判斷說話結(jié)束。以及說話人自己的音量,如果聲音很低,也會導(dǎo)致判斷人說話是否結(jié)束比較困難。改變命令詞語內(nèi)容,比較好念,開口音響亮等,方便使用者連續(xù)清晰念出語音命令。3系統(tǒng)軟件設(shè)計3.1系統(tǒng)程序流程圖系統(tǒng)程序流程圖如圖3-1所示:圖3-1系統(tǒng)程序流程圖3.2系統(tǒng)各模塊程序設(shè)計3.2.1主程序主程序如下所示:voidmain(){ uint8idatanAsrRes; FlashLED(3); MCU_init(); LD_reset(); nAsrStatus=LD_ASR_NONE; // 初始狀態(tài):沒有在作ASR PlaySound(CODE_DEFAULT); // 播放提示音 while(1) { if(bMp3Play!=0) // 如果還在播放MP3中,則等待,直到MP3播放完畢即bMp3Play==0 continue; // bMp3Play是定義的一個全局變量用來記錄MP3播放的狀態(tài),不是LD3320芯片內(nèi)部的寄存器 switch(nAsrStatus) { caseLD_ASR_RUNING: caseLD_ASR_ERROR: break; caseLD_ASR_NONE: { FlashLED(4); nAsrStatus=LD_ASR_RUNING; if(RunASR()==0) // 啟動一次ASR識別流程:ASR初始化,ASR添加關(guān)鍵詞語,啟動ASR運算 { nAsrStatus=LD_ASR_ERROR; LED1=0; LED2=0; } break; } caseLD_ASR_FOUNDOK: { FlashLED(2); nAsrRes=LD_GetResult(); // 一次ASR識別流程結(jié)束,去取ASR識別結(jié)果 PlaySound(nAsrRes); nAsrStatus=LD_ASR_NONE; break; } caseLD_ASR_FOUNDZERO: default: { FlashLED(1); PlaySound(CODE_DEFAULT); nAsrStatus=LD_ASR_NONE; break; } }//switch }//while}voidMCU_init(){ P1M0|=1; P3M0|=8; LED1=0; LED2=0; P0=0xff; P1=0xff; P2=0xff; P3=0xf7; P4=0x0f;#ifdefined(SOFT_SPI_PORT) // 軟件模擬SPI讀寫 LD_MODE=1; // 設(shè)置MD管腳為高#elifdefined(HARD_SPI_PORT) // 硬件實現(xiàn)SPI讀寫 LD_MODE=1; // 設(shè)置MD管腳為高#else // 并行讀寫(硬件實現(xiàn)或者軟件模擬) LD_MODE=0; // 設(shè)置MD管腳為低#endif IP=0; IPH=0; PX0=1; PT0=1; PS=1; IPH|=1; EX0=0; EX1=0; EA=1;}voiddelay(unsignedlonguldata){ unsignedintj=0; unsignedintg=0; for(j=0;j<5;j++) { for(g=0;g<uldata;g++) { _nop_(); _nop_(); _nop_(); } }}voidFlashLED(uint8nTimes){ uint8k; for(k=0;k<nTimes;k++) { LED1=0; LED2=0; delay(15000); LED1=1; LED2=1; delay(15000); }}voidPlaySound(uint8nCode){ switch(nCode) { caseCODE_BEIJING: nMp3StartPos=MP3_BEIJING_START; nMp3Size=MP3_BEIJING_SIZE; break; caseCODE_SHANGHAI: nMp3StartPos=MP3_SHANGHAI_START; nMp3Size=MP3_SHANGHAI_SIZE; break; caseCODE_TIANJIN: nMp3StartPos=MP3_TIANJIN_START; nMp3Size=MP3_TIANJIN_SIZE; break; caseCODE_CHONGQING: nMp3StartPos=MP3_CHONGQING_START; nMp3Size=MP3_CHONGQING_SIZE; break; default: nMp3StartPos=MP3_NIHAO_START; nMp3Size=MP3_NIHAO_SIZE; break; } LD_Init_MP3(); LD_AdjustMIX2SPVolume(15); LD_play();}voidIO_Send_Byte(uint8dataout){ uint8i=0; FLASH_CS=0; for(i=0;i<8;i++) { if((dataout&0x80)==0x80) FLASH_DIO=1; else FLASH_DIO=0; FLASH_CLK=1; dataout=(dataout<<1); FLASH_CLK=0; }}uint8RunASR(){ uint8i=0; uint8asrflag=0; for(i=0;i<5;i++) // 防止由于硬件原因?qū)е翷D3320芯片工作不正常,所以一共嘗試5次啟動ASR識別流程 { LD_AsrStart(); delay(100); if(LD_AsrAddFixed()==0) { LD_reset(); // LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片 delay(100); // 并從初始化開始重新ASR識別流程 continue; } delay(10); if(LD_AsrRun()==0) { LD_reset(); // LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片 delay(100); // 并從初始化開始重新ASR識別流程 continue; } asrflag=1; break; // ASR流程啟動成功,退出當(dāng)前for循環(huán)。開始等待LD3320送出的中斷信號 } returnasrflag;}voidExtInt0Handler(void)interrupt0{ ProcessInt0(); // LD3320送出中斷信號,包括ASR和播放MP3的中斷,需要在中斷處理函數(shù)中分別處理}3.2.2芯片復(fù)位程序就是對芯片的第47腿(RSTB*)發(fā)送低電平,然后需要對片選CS做一次拉低/拉高的操作,以激活內(nèi)部DSP??砂凑找韵马樞?voidLD_reset(){RSTB=1;delay(1);RSTB=0;delay(1);RSTB=1;delay(1);CSB=0;delay(1);CSB=1;delay(1);}delay(1)是延遲1毫秒的意思,為了更穩(wěn)定地工作。芯片初始化一般在程序的開始進(jìn)行,如果有時芯片的反應(yīng)不太正常,也可用這個方法恢復(fù)芯片的初始狀態(tài)。3.2.3語音識別程序語音識別的操作順序是:語音識別用初始化(包括通用初始化)一寫入識別列表一開始識別,并準(zhǔn)備好中斷響應(yīng)函數(shù),打開中斷允許位。這里需要說明一下,如果不用中斷方式,也可以通過查詢方式工作。在“開始識別”后,讀取寄存器B2H的值,如果為21H就表示有識別結(jié)果產(chǎn)生。在此之后讀取候選項等操作與中斷方式相同。(1)通用初始化按照以下序列設(shè)置寄存器。voidLD_Init_Common(){bMp3Play=0;LD_ReadReg(0x06);LD_WriteReg(0x17;0x35);delay(10);LD_ReadReg(0x06);LD_WriteReg(0x89;0x03);delay(5);LD_WriteReg(OxCF;0x43);delay(5);LD_WriteReg(OxCB;0x02);/*PLLsetting*/LD_WriteReg(0x11;LD_PLL_11);if(nLD_Mode==LD_MODE_MP3)}LD_WriteReg(Ox1E;0x00);//!!注意,下面二個寄存器,會隨晶振頻率變化而設(shè)置不同//!!注意,清根據(jù)使用的晶振頻率修改參考程序中的CLK_INLD_WriteReg(0x19;LD_PLL_MP3_19);LD_WriteReg(Ox1B;LD_PLL_MP3_1B);LD_WriteReg(Ox1D;LD_PLL_MP3_1D);}else{//LD_WriteReg(Ox1E;0x00);//!!注意,下面二個寄存器,會隨晶振頻率變化而設(shè)置不同//!!注意;清根據(jù)使用的晶振頻率修改參考程序中的CLK_INLD_WriteReg(0x19;LD_PLL_ASR-19);LD_WriteReg(Ox1B;LD_PLL_ASR-1B);LD_WriteReg(Ox1D;LD_PLL-ASR-1D);}LD_WriteReg(OxCD;0x04);LD_WriteReg(0x17;Ox4c);delay(5);LD_WriteReg(OxB9;0x00);LD_WriteReg(OxCF;Ox4f);}(2)語音識別初始化按照以下序列設(shè)置寄存器。voidLD_InitASR(){nLDMode=LDMODEASRRUNLD_Init_Common()LD_WriteReg(OxBD;0x00);LD_WriteReg(0x17;0x48);delay(10);LD_WriteReg(Ox3C;0x80);LD_WriteReg(Ox3E;0x07);LD_WriteReg(0x38;Oxff);LD_WriteReg(Ox3A,Ox07);LD_WriteReg(0x40;0x00);LD_WriteReg(0x42;0x08);LD_WriteReg(0x44;0x00);LD_WriteReg(0x46;0x08);delay(1);}(3)寫入識別列表列表的規(guī)則是,每個識別條目對應(yīng)一個特定的編號(1個字節(jié))不同的識別條目的編號可以相同,而且不用連續(xù)。本芯片最多支持50個識別條目,每個識別條目是標(biāo)準(zhǔn)普通話的漢語拼音(小寫),每2個字(漢語拼音)之間用一個空格間隔。下面是一個簡單的例子如表3-1所示:表3-1識別列表舉例1Beijing1Shoudu3Shanghai7Tianjin8Chongqing編號可以相同,可以不連續(xù),但數(shù)值要小于256(OOH~FFH)。例子中“北京”和“首都”對應(yīng)同一編號,說這兩個詞會有相同結(jié)果返回,簡單流程圖如圖3-2所示:圖3-2流程圖代碼如下:#defineCODE_DEFAULT0#defineCODE_BEIJING1#defineCODE_SHANGHAI3#defineCODE_TIANJIN7#defineCODE_CHONGQING8先介紹一個讀取OxB2寄存器的函數(shù),如果在以后的ASR命令函數(shù)前不能夠讀取到正確Idle狀態(tài),說明芯片內(nèi)部可能出錯了。經(jīng)拷機(jī)測試,當(dāng)使用的電源電壓/電流出現(xiàn)不穩(wěn)定有較大波動時,有小概率會出現(xiàn)這種情況。出現(xiàn)這種情況時,建議ResetLD332。芯片,重新啟動設(shè)置芯片。//Return1:success.uint8LD-Check一ASRBusyFlag_b2(){uint8j;uint8flag=0;for(j=0;j<10;j++){if(LD_ReadReg(0xb2)==0x21){flag=1;break;}delay(10);}returnflag;}//Return1:success.uint8LDAsrAddFixed()uint8k;flag;uint8nAsrAddLength;constcharsRecog[5][13]={"beijing”;”shoudu”;”shanghai”;”tianjin”;”chongqing"};constuint8pCode[5]={CODE_BEIJING,CODE_BEIJING,CODE_SHANGHAI;CODE-TIANJIN,CODE-CHONGQING};flag=1;for(k=0;k<5;k++){if(LD-Check一ASRBusyFlag_b2()==0)flag=0;break;}LD_WriteReg(Oxc1;pCode[k]〕;LD_WriteReg(Oxc3,0);LD_WriteReg(0x08;0x04Delay(1);LD_WriteReg(0x08;0x00);Delay(1);for(nAsrAddLength=0;nAsrAddLength<20;nAsrAddLength++){if(sRecog[k][nAsrAddLength]==0)break;LD_WriteReg(0x5,sRecog[k][nAsrAddLength]);}LD_WriteReg(Oxb9,nAsrAddLength);LD_WriteReg(Oxb2,Oxff);LD_WriteReg(0x37,0x04);}returnflag;}(4)開始識別設(shè)置幾個相關(guān)的寄存器,就可以控制LD3320芯片開始語音識別。值得注意:單片機(jī)程序中,一般會用一個全局變量控制當(dāng)前狀態(tài),(例如:LD_ASR_RUNING狀態(tài)或者LD_ASR_FOUNDOK狀態(tài))在編程時一定要把對該狀態(tài)的設(shè)置放在正式LD3320芯片開始識別以前,例如下面例程中的語句nAsrStatus=LD_ASR_RUNING;便是設(shè)置控制變量。需要把這句語句放置在LD3320正式開始識別之前調(diào)用:{。。。nAsrStatus=LDASRRUNINGLD_AsrRun()}參考代碼如下://Return1:success.uint8LDAsrRun(){nAsrStatus=LD_ASR一RUNING;LD_WriteReg(0x35;MIC一VOL);LD_WriteReg(Ox1C;0x09);LD_WriteReg(OxBD;0x20);LD_WriteReg(0x08;0x01);delay(1);LD_WriteReg(0x08;0x00);delay(1);if(LD-Check_ASRBusyFlag_b2()==0{return0;}LD_WriteReg(0xB2;0xff);LD_WriteReg(0x37;0x06);delay(5);LD_WriteReg(0x1C;0x0b);LD_WriteReg(0x29;0x10);LD_WriteReg(0xBD;0x00);EXO=1;return1;}(5)響應(yīng)中斷如果麥克風(fēng)采集到聲音,不管是否識別出正常結(jié)果,都會產(chǎn)生一個中斷信號。而中斷程序要根據(jù)寄存器的值分析結(jié)果。讀取BA寄存器的值,可以知道有幾個候選答案,而C5寄存器里的答案是得分最高、最可能正確的答案。例如發(fā)音為“上海”并被成功識別(無其他候選),那么BA寄存器里的數(shù)值是1,而C5寄存器里的值是對應(yīng)的編碼3。簡單流程圖如圖3-3所示:圖3-3流程圖程序代碼如下:voidExtIntOHandler(void)interrupt(){ProcessInt0();}voidProcessInt0(){uint8nAsrResCount=0;EXO=0;ETO=0ucRegVal=LD-ReadReg(Ox2B);ucHighint=LD_ReadReg(0x29);LD_WriteReg(0x29;0);ucLowint=LD_ReadReg(0x02);LD_WriteReg(0x02;0);if(nLD_Mode==LD-MODE_ASR-RUN){if((ucRegVal&0x10)&&LD_ReadReg(Oxbf)==0x35&&LD_ReadReg(Oxb2)==0x21){nAsrResCount=LD_ReadReg(Oxba);if(nAsrResCount>0&&nAsrResCount<4){nAsrStatus=LDASRFOUNDOK}else{nAsrStatus=LDASRFOUNDZERO}}else{nAsrStatus=LDASRFOUNDZERO}
LD_WriteReg(Ox2b;0);LD_WriteReg(Ox1C;0);ETO=1;return;}}uint8LD_GetResult(){returnLD-ReadReg(oxc5);}3.2.4聲音播放程序播放聲音的操作順序是:MP3播放用初始化(包括通用初始化)一調(diào)節(jié)播放音量一開始播放聲音,并準(zhǔn)備好中斷響應(yīng)函數(shù),打開中斷允許位。(1)通用初始化和語音識別部分一樣,按指定序列設(shè)置寄存器。(2)聲音播放用初始化請參照源代碼設(shè)置寄存器。voidLD_Init_MP3(){nLDMode=LDMODEMP3LD_Init_Common()LD_WriteReg(OxBD;0x02);LD_WrteReg(0x17;0x48);delay(10);LD_WriteReg(0x85;0x52);LD_WriteReg(OxBF;0x00);LD_WriteReg(0x81;0x00);LD_WriteReg(0x83;0x00);LD_WriteReg(OxBE;Oxff);LD_WriteReg(OxBD;Oxff);delay(1);LD_WriteReg(0x87;Oxff);LD_WriteReg(0x89;Oxff);delay(1);LD_WriteReg(0x22;0x00);LD_WriteReg(0x23;0x00);LD_WriteReg(0x20;Oxef);LD_WriteReg(0x21;0x07);LD_WriteReg(0x24;0x77);LD_WriteReg(0x25;0x03);LD_WriteReg(0x26;Oxbb);LD_WriteReg(0x27;0x01);}(3)調(diào)節(jié)播放音量這里需要修改寄存器8E。音量分為16級,用4位二進(jìn)制表示,范圍是0-15。設(shè)置音量時,將(15一音量值)設(shè)給寄存器8E的第2-5位。76543210高低源代碼如下:voidLD_AdjustMIX2SPVolume(uint8val){uint8ucTmp;ucSPVol=val;val=((15-val)&OxOf)<<2;ucRegVal=LD_ReadReg(OxBE)&0xc3;LD_WriteReg(OxBE,valucRegVal);}這個函數(shù)只調(diào)節(jié)喇叭(Speaker)的音量,和耳機(jī)等其他輸出無關(guān)。而目實驗板上只有喇叭連接了輸出。耳機(jī)的音量也是可以調(diào)節(jié)的,使用寄存器81(左耳音量)和83(右耳音量)。2個寄存器都是只有第1-5位有效,共32級,而A.這5位都為。C00000B)的時候是音量最大的,都為1C11111B)的時候音量最小。76543210高低(4)開始播放聲音開始播放位置清零(自定義變量Mp3Pos=0)寄存器1B的第3位設(shè)為1(按位或0x08)循環(huán)執(zhí)行:while([播放條件]=true){順序?qū)P3數(shù)據(jù)放入寄存器Ol(每次一個字節(jié));Mp3Pos增加1}[播放條件]為下面條件都成立,有一個不滿足就跳出循環(huán):讀取寄存器O6}第3位=0Mp3Pos<MP3文件的總長度。在實驗板上,M3數(shù)據(jù)是由串行Flash里讀出。(基于SPI協(xié)議。)修改BA、17等寄存器。(參照源代碼)開放中斷允許。例如,EXO=1開始播放的簡單流程圖如圖3-4所示:圖3-4開始播放流程圖源代碼如下:voidLD-play(){nMp3Pos=0;bMp3Play=1;LD_WriteReg(Ox1B,LD_ReadReg(Ox1B)}0x08);if(nMp3Pos>=nMp3Size)return;LD_ReloadMp3Data();LD_WriteReg(OXBA,0);LD_WriteReg(0x17;0x48);LD_WriteReg(0x33,0x01);ucRegVal=LD_ReadReg(0x29);LD_WriteReq(0x29;ucReaVal}MASK_INT_FIF0);ucRegVal=LD_ReadReg(0x02);LD_WriteReg(0x02;ucRegVal}MASK一AFIF0_INT);ucRegVal=LD_ReadReg(0x89);LD_WriteReg(0x89,ucRegVal}OxOc);ucRegVal=(2&0x03)<<2;//ucStatus=LD-ReadReg(0x85)&(~OxOc);LD_WriteReg(0x85,ucStatus|ucRegVal);EXO=1voidLD_ReloadMp3Data()uint32nCurMp3Pos;uint8val;uint8k:nCurMp3Pos=nMp3StartPos+nMp3Pos;FLASH_CS=1:FLASH_CLK=0FLASH_CS=0I0_SendIO_Send_BYte(W25P-FastReadData);/*readcommand*/Byte(((nCurMp3Pos&OxFFFFFF)>>16));/*send3addressbytes*/I0-Send一Byte(((nCurMp3Pos&OxFFFF)>>8))I0-Send一Byte(nCurMp3Pos&OxFF);I0_Send一Byte(OxFF);ucStatus=LD_ReadReg(0x06);while(!(ucStatus&MASK_FIF0_STATUSAFULL)&&(nMp3Pos<nMp3Size){val=0for(k=0;k<8;k++){FLASHCLK=0Val<<=1FLASH_CLK=1Val|=FLASH_D0;}LD_WriteReg(0x01;val);nMp3Pos++;ucStatus=LD_ReadReg(0x06);}FLASH_CS=1FLASH_CLK=0}LD-ReloadMp3Data()函數(shù)的功能是送入數(shù)據(jù),不同的硬件結(jié)構(gòu)可能需要改寫這一部分。例如有的系統(tǒng)可能使用大容量的RAM,取數(shù)據(jù)就會很方便。這里是根據(jù)串行FLASH存儲器的接口寫的函數(shù),使用的是SPI協(xié)議。(5)中斷響應(yīng)。開始播放可以把聲音數(shù)據(jù)的最初部分送入芯片,等到芯片播放這一段后會發(fā)出中斷請求。而中斷函數(shù)里會不斷的送入數(shù)據(jù),直到FIFO_DATA裝滿或聲音數(shù)據(jù)結(jié)束。這一段程序和開始播放比較類似,都是通過LD_ReloadMp3Data()函數(shù)送入數(shù)據(jù)。由于LD332。芯片只有一只管腳負(fù)責(zé)中斷清求輸出,所以一般情況下用一個中斷響應(yīng)函數(shù)處理2種中斷。這里為了簡明,將中斷函數(shù)分開書寫。中斷處理函數(shù)里,播放聲音部分流程圖如圖3-5所示:圖3-5播放聲音部分流程圖需要注意的是,寄存器操作2)和寄存器操作3)并不會恢復(fù)寄存器0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度現(xiàn)代農(nóng)業(yè)土地承包租賃協(xié)議
- 二零二五年度企業(yè)集團(tuán)內(nèi)部公對公匯款合作協(xié)議
- 2025年度電影宣傳演員聘用合同
- 二零二五年度餐館服務(wù)員勞動合同與勞動權(quán)益維護(hù)協(xié)議
- 二零二五年度戶外帳篷露營設(shè)施裝修承攬合同
- 2025年度蔬菜批發(fā)市場租賃及銷售合作合同模板
- 二零二五年度紅木家具行業(yè)論壇舉辦合同
- 二零二五年度倉庫租賃中介委托合同
- 2025年度股東向公司借款還款本金及利息支付憑證合同
- 2025年度餐飲業(yè)宣傳推廣合作協(xié)議
- 部編版《語文》(八年級-下冊)第一單元教材分析與教學(xué)建議
- Unit 1 Home 單元測試卷 重難點提優(yōu)卷(含答案)譯林版(2024)七年級英語下冊
- 現(xiàn)代企業(yè)服務(wù)營銷的創(chuàng)新與實踐
- 5.2 做自強(qiáng)不息的中國人 (課件)-2024-2025學(xué)年統(tǒng)編版道德與法治七年級下冊
- 【寒假開學(xué)第一課】AI時代做自己的哪吒
- 《材料科學(xué)與工程專業(yè)生產(chǎn)實習(xí)》課程教學(xué)大綱
- 陵園墓地代理居間
- 2025年寧夏警官職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- CWAN 0043-2021攪拌摩擦焊攪拌頭設(shè)計及制造標(biāo)準(zhǔn)
- 從入門到精通:2025年化妝基本步驟
- 移動傳輸匯聚機(jī)房施工項目
評論
0/150
提交評論