基於MCU設計的語音識別系統

0 引言

傳統的人機交互依靠複雜的鍵盤或按鈕來實現,隨著科技的發展,一些新型的人機交互方式也隨之誕生,帶給人們全新的體驗。基於語音識別的人機交互方式是目前熱門的技術之一。但是語音識別功能算法複雜、計算量大,一般在計算機上實現,即使是嵌入式方面,多數方案也需要運算能力強的 ARM 或 DSP,並且外擴 RAM、FLASH 等資源,增加了硬件成本,這些特點無疑限制了語音識別技術的應用,尤其是嵌入式領域。

本系統採用的主控 MCU為 Atmel 公司的 ATMEGA128,語音識別功能則採用 ICRoute 公司的單芯片 LD3320。LD3320 內部集成優化過的語音識別算法,無需外部 FLASH,RAM 資源,可以很好地完成非特定人的語音識別任務。

1 整體方案設計

1.1 語音識別原理

在計算機系統中,語音信號本身的不確定性、動態性和連續性是語音識別的難點。主流的語音識別技術是基於統計模式識別的基本理論,原理如圖 1 所示。

2.1 控制器電路

控制器選用 Atmel 公司生產的 ATMEGA128 芯片,採用先進的 RISC 結構,內置 128 KB FLASH,4 KB SRAM,4 KB E2PROM 等豐富資源。該芯片是業界高性能、低功耗的 8 位微處理器,並在 8 位單片機市場有著廣泛應用。

2.2 LD3320 語音識別電路

LD3320 芯片是一款“語音識別”專用芯片。該芯片集成了語音識別處理器和一些外部電路,包括 A/D、D/A 轉換器、麥克風接口、聲音輸出接口等,而且可以播放 MP3。不需要外接任何的輔助芯片如 FLASH,RAM 等,直接集成到產品中即可以實現語音識別、聲控、人機對話功能。

圖 3 為 LD3320 電路原理圖,與 MCU 通信採用 SPI 總線方式,時鐘不能超過 1.5MHz。

基于MCU设计的语音识别系统

麥克風工作電路如圖 4 所示,音頻輸出只需將揚聲器連接到 SPOP 和 SPON 即可。使用 SPI 總線方式時,LD3320 的 MD 要設為高電平,SPIS 設為低電平。SPI 總線的引腳有 SDI,SDO,SDCK 以及 SCS。INTB 為中斷端口,當有識別結果或 MP3 數據不足時,會觸發中斷,通知 MCU 處理。RSTB 引腳是 LD3320 復位端,低電平有效。LED1,LED2 作為上電指示燈。

基于MCU设计的语音识别系统

3 軟件系統設計

軟件設計主要有兩部分,分別為移植 LD3320 官方代碼和編寫語音識別應用程序。

3.1 移植 LD3320 源代碼

LD3320 源代碼是基於 51 單片機實現的,SPI 部分採用的是軟件模擬方式,但在播放 MP3 數據時會有停頓現象,原因是 51 單片機主頻較低,導致 SPI 速率很慢,不能及時更新 MP3 數據。移植到 ATMEGA128 需要修改底層寄存器讀寫函數、中斷函數等。底層驅動在 Reg_RW.c 文件中,首先在 Reg_RW.h 使用 HARD_PARA_PORT 宏定義,以支持硬件 SPI。然後在 Reg_RW.c 文件中找到 HARD_PARA_PORT 對應條件宏的代碼段,保留 AVR 的 SPI 接口代碼。

3.2 應用程序實現

在代碼中預先設定幾個單詞:“你好”,“播放音樂”,“打開”。當用戶說“播放音樂”時,MCU 控制 LD3320 播放一段音樂,如果是其他詞語,則在串口中打印識別結果,然後再次轉換到語音識別狀態。

3.2.1 MP3 播放代碼

LD3320 支持 MP3 數據播放,播放聲音的操作順序為:

通用初始化→MP3 播放用初始化→調節播放音量→開始播放。

將 MP3 數據順序放入數據寄存器,芯片播放完一定數量的數據時會發出中斷請求,在中斷函數中連續送入聲音數據,直到聲音數據結束。MP3 播放函數實現代碼如下:

基于MCU设计的语音识别系统

由於 MCU 容量限制,選取測試的 MP3 文件不能太大。首先在計算機上將 MP3 文件的二進制數據轉為標準 C 數組格式文件,然後將該文件加入工程中。源代碼中 MP3 文件存儲在外擴的 SPI FLASH 中,工程中需要註釋和移除全部相關代碼。MP3 數據讀取函數是 LD_ReloadMp3Data,只需將讀取的 SPI FLASH 數據部分改成以數組數據讀取的方式即可。

3.2.2 語音識別程序

LD3320 語音識別芯片完成的操作順序為:通用初始化→ASR 初始化→添加關鍵詞→開啟語音識別。在源代碼中的 RunASR函數已經實現了上面的過程,直接調用即可開啟語音識別功能。

RunASR函數代碼如下:

基于MCU设计的语音识别系统

用戶說完話後,LD3320 通過打分的方式,將關鍵詞列表中特徵最相似的一個作為輸出。然後 LD3320 會產生一箇中斷信號,此時 MCU 跳入中斷函數讀取 C5 寄存器的值,該值即為識別結果,得到結果後,用戶可以根據數值來實現一些功能,比如讀取到 1,說明是“播放音樂”,那麼可以調用前面的 PlaySound函數來播放音樂。

語音識別控制的關鍵點在於語音識別的準確率。表 1 給出了測試結果,當然也可以在識別列表中加入更多的關鍵詞來做測試。通過測試結果可以看出,LD3320 的識別率在 95%上,能夠滿足用戶需求。

4 結語

本文討論了基於 AVR 單片機的語音識別系統設計的可行性,並給出了設計方案。通過多次測試結果表明,本系統具有電路運行穩定,語音識別率高,成本低等優點。同時藉助於 LD3320 的 MP3 播放功能,該系統具有一定的交互性和娛樂性。移植性方面,系統通過簡單的修改,可以很方便地將 LD3320 驅動程序移植到各種嵌入式系統中。隨著人們對人工智能功能的需求,語音識別技術將越來越受到人們的關注,相信不久的將來,語音識別將會擁有更廣闊的應用。


分享到:


相關文章: