基于ATMEGAl28單片機(jī)的語音識別系統(tǒng)設(shè)計
掃描二維碼
隨時隨地手機(jī)看文章
0 引言
傳統(tǒng)的人機(jī)交互依靠復(fù)雜的鍵盤或按鈕來實現(xiàn),隨著科技的發(fā)展,一些新型的人機(jī)交互方式也隨之誕生,帶給人們?nèi)碌捏w驗?;谡Z音識別的人機(jī)交互方式是目前熱門的技術(shù)之一。但是語音識別功能算法復(fù)雜、計算量大,一般在計算機(jī)上實現(xiàn),即使是嵌入式方面,多數(shù)方案也需要運(yùn)算能力強(qiáng)的ARM或DSP,并且外擴(kuò)RAM、FLASH等資源,增加了硬件成本,這些特點無疑限制了語音識別技術(shù)的應(yīng)用,尤其是嵌入式領(lǐng)域。
本系統(tǒng)采用的主控MCU為Atmel公司的ATMEGA128,語音識別功能則采用ICRoute公司的單芯片LD3320。LD3320內(nèi)部集成優(yōu)化過的語音識別算法,無需外部FLASH,RAM資源,可以很好地完成非特定人的語音識別任務(wù)。
1 整體方案設(shè)計
1.1 語音識別原理
在計算機(jī)系統(tǒng)中,語音信號本身的不確定性、動態(tài)性和連續(xù)性是語音識別的難點。主流的語音識別技術(shù)是基于統(tǒng)計模式識別的基本理論,原理如圖1所示。
語音識別通常需要兩個階段完成。第一階段是訓(xùn)練,主要是提取語音特征,用戶往往需要進(jìn)行幾次語音訓(xùn)練,經(jīng)過預(yù)處理和特征提取后獲得相應(yīng)特征參數(shù)。第二階段是識別,識別過程就是將輸入的語音特征參數(shù)和模型庫中的參數(shù)進(jìn)行相似性比較,最后輸出匹配度最高的特征參數(shù)完成識別過程。
2 硬件電路設(shè)計
硬件框架如圖2所示,電路主要由主控制器電路和語音識別電路組成。ATMEGA128控制LD3320語音識別電路,輸出結(jié)果由ATMEGA128處理,然后通過總線來控制不同的設(shè)備。
2.1 控制器電路
控制器選用Atmel公司生產(chǎn)的ATMEGA128芯片,采用先進(jìn)的RISC結(jié)構(gòu),內(nèi)置128 KB FLASH,4 KB SRAM,4 KB E2PROM等豐富資源。該芯片是業(yè)界高性能、低功耗的8位微處理器,并在8位單片機(jī)市場有著廣泛應(yīng)用。
2.2 LD3320語音識別電路
LD3320芯片是一款“語音識別”專用芯片。該芯片集成了語音識別處理器和一些外部電路,包括A/D、D/A轉(zhuǎn)換器、麥克風(fēng)接口、聲音輸出接口等,而且可以播放MP3。不需要外接任何的輔助芯片如FLASH,RAM等,直接集成到產(chǎn)品中即可以實現(xiàn)語音識別、聲控、人機(jī)對話功能。
圖3為LD3320電路原理圖,與MCU通信采用SPI總線方式,時鐘不能超過1.5MHz。
麥克風(fēng)工作電路如圖4所示,音頻輸出只需將揚(yáng)聲器連接到SPOP和SPON即可。使用SPI總線方式時,LD3320的MD要設(shè)為高電平,SPIS設(shè)為低電平。SPI總線的引腳有SDI,SDO,SDCK以及SCS。INTB為中斷端口,當(dāng)有識別結(jié)果或MP3數(shù)據(jù)不足時,會觸發(fā)中斷,通知MCU處理。RSTB引腳是LD3320復(fù)位端,低電平有效。LED1,LED2作為上電指示燈。
3 軟件系統(tǒng)設(shè)計
軟件設(shè)計主要有兩部分,分別為移植LD3320官方代碼和編寫語音識別應(yīng)用程序。
3.1 移植LD3320源代碼
LD3320源代碼是基于51單片機(jī)實現(xiàn)的,SPI部分采用的是軟件模擬方式,但在播放MP3數(shù)據(jù)時會有停頓現(xiàn)象,原因是51單片機(jī)主頻較低,導(dǎo)致SPI速率很慢,不能及時更新MP3數(shù)據(jù)。移植到ATMEGA128需要修改底層寄存器讀寫函數(shù)、中斷函數(shù)等。底層驅(qū)動在Reg_RW.c文件中,首先在Reg_RW.h使用HARD_PARA_PORT宏定義,以支持硬件SPI。然后在Reg_RW.c文件中找到HARD_PARA_PORT對應(yīng)條件宏的代碼段,保留AVR的SPI接口代碼。
3.2 應(yīng)用程序?qū)崿F(xiàn)
在代碼中預(yù)先設(shè)定幾個單詞:“你好”,“播放音樂”,“打開”。當(dāng)用戶說“播放音樂”時,MCU控制LD3320播放一段音樂,如果是其他詞語,則在串口中打印識別結(jié)果,然后再次轉(zhuǎn)換到語音識別狀態(tài)。
3.2.1 MP3播放代碼
LD3320支持MP3數(shù)據(jù)播放,播放聲音的操作順序為:
通用初始化→MP3播放用初始化→調(diào)節(jié)播放音量→開始播放。
將MP3數(shù)據(jù)順序放入數(shù)據(jù)寄存器,芯片播放完一定數(shù)量的數(shù)據(jù)時會發(fā)出中斷請求,在中斷函數(shù)中連續(xù)送入聲音數(shù)據(jù),直到聲音數(shù)據(jù)結(jié)束。MP3播放函數(shù)實現(xiàn)代碼如下:
由于MCU容量限制,選取測試的MP3文件不能太大。首先在計算機(jī)上將MP3文件的二進(jìn)制數(shù)據(jù)轉(zhuǎn)為標(biāo)準(zhǔn)C數(shù)組格式文件,然后將該文件加入工程中。源代碼中MP3文件存儲在外擴(kuò)的SPI FLASH中,工程中需要注釋和移除全部相關(guān)代碼。MP3數(shù)據(jù)讀取函數(shù)是LD_ReloadMp3Data(),只需將讀取的SPI FLASH數(shù)據(jù)部分改成以數(shù)組數(shù)據(jù)讀取的方式即可。
3.2.2 語音識別程序
LD3320語音識別芯片完成的操作順序為:通用初始化→ASR初始化→添加關(guān)鍵詞→開啟語音識別。在源代碼中的RunASR()函數(shù)已經(jīng)實現(xiàn)了上面的過程,直接調(diào)用即可開啟語音識別功能。
RunASR()函數(shù)代碼如下:
用戶說完話后,LD3320通過打分的方式,將關(guān)鍵詞列表中特征最相似的一個作為輸出。然后LD3320會產(chǎn)生一個中斷信號,此時MCU跳入中斷函數(shù)讀取C5寄存器的值,該值即為識別結(jié)果,得到結(jié)果后,用戶可以根據(jù)數(shù)值來實現(xiàn)一些功能,比如讀取到1,說明是“播放音樂”,那么可以調(diào)用前面的PlaySound()函數(shù)來播放音樂。
語音識別控制的關(guān)鍵點在于語音識別的準(zhǔn)確率。表1給出了測試結(jié)果,當(dāng)然也可以在識別列表中加入更多的關(guān)鍵詞來做測試。通過測試結(jié)果可以看出,LD3320的識別率在95%上,能夠滿足用戶需求。
4 結(jié)語
本文討論了基于AVR單片機(jī)的語音識別系統(tǒng)設(shè)計的可行性,并給出了設(shè)計方案。通過多次測試結(jié)果表明,本系統(tǒng)具有電路運(yùn)行穩(wěn)定,語音識別率高,成本低等優(yōu)點。同時借助于LD3320的MP3播放功能,該系統(tǒng)具有一定的交互性和娛樂性。移植性方面,系統(tǒng)通過簡單的修改,可以很方便地將LD3320驅(qū)動程序移植到各種嵌入式系統(tǒng)中。隨著人們對人工智能功能的需求,語音識別技術(shù)將越來越受到人們的關(guān)注,相信不久的將來,語音識別將會擁有更廣闊的應(yīng)用。