基于A(yíng)TMEGAl28單片機的語(yǔ)音識別系統設計
麥克風(fēng)工作電路如圖4所示,音頻輸出只需將揚聲器連接到SPOP和SPON即可。使用SPI總線(xiàn)方式時(shí),LD3320的MD要設為高電平,SPIS設為低電平。SPI總線(xiàn)的引腳有SDI,SDO,SDCK以及SCS。INTB為中斷端口,當有識別結果或MP3數據不足時(shí),會(huì )觸發(fā)中斷,通知MCU處理。RSTB引腳是LD3320復位端,低電平有效。LED1,LED2作為上電指示燈。

軟件設計主要有兩部分,分別為移植LD3320官方代碼和編寫(xiě)語(yǔ)音識別應用程序。
3.1 移植LD3320源代碼
LD3320源代碼是基于51單片機實(shí)現的,SPI部分采用的是軟件模擬方式,但在播放MP3數據時(shí)會(huì )有停頓現象,原因是51單片機主頻較低,導致SPI速率很慢,不能及時(shí)更新MP3數據。移植到ATMEGA128需要修改底層寄存器讀寫(xiě)函數、中斷函數等。底層驅動(dòng)在Reg_RW.c文件中,首先在Reg_RW.h使用HARD_PARA_PORT宏定義,以支持硬件SPI。然后在Reg_RW.c文件中找到HARD_PARA_PORT對應條件宏的代碼段,保留AVR的SPI接口代碼。
3.2 應用程序實(shí)現
在代碼中預先設定幾個(gè)單詞:“你好”,“播放音樂(lè )”,“打開(kāi)”。當用戶(hù)說(shuō)“播放音樂(lè )”時(shí),MCU控制LD3320播放一段音樂(lè ),如果是其他詞語(yǔ),則在串口中打印識別結果,然后再次轉換到語(yǔ)音識別狀態(tài)。
3.2.1 MP3播放代碼
LD3320支持MP3數據播放,播放聲音的操作順序為:
通用初始化→MP3播放用初始化→調節播放音量→開(kāi)始播放。
將MP3數據順序放入數據寄存器,芯片播放完一定數量的數據時(shí)會(huì )發(fā)出中斷請求,在中斷函數中連續送入聲音數據,直到聲音數據結束。MP3播放函數實(shí)現代碼如下:

由于MCU容量限制,選取測試的MP3文件不能太大。首先在計算機上將MP3文件的二進(jìn)制數據轉為標準C數組格式文件,然后將該文件加入工程中。源代碼中MP3文件存儲在外擴的SPI FLASH中,工程中需要注釋和移除全部相關(guān)代碼。MP3數據讀取函數是LD_ReloadMp3Data(),只需將讀取的SPI FLASH數據部分改成以數組數據讀取的方式即可。
3.2.2 語(yǔ)音識別程序
LD3320語(yǔ)音識別芯片完成的操作順序為:通用初始化→ASR初始化→添加關(guān)鍵詞→開(kāi)啟語(yǔ)音識別。在源代碼中的RunASR()函數已經(jīng)實(shí)現了上面的過(guò)程,直接調用即可開(kāi)啟語(yǔ)音識別功能。
RunASR()函數代碼如下:

評論