基于FPGA的語音錄制與回放系統(tǒng)
0 引言
隨著微電子技術(shù)的發(fā)展,系統(tǒng)集成向高速、高集成度、低功耗發(fā)展已經(jīng)成為必然,同時SoPC技術(shù)也應(yīng)用而生。SoPC將軟硬件集成于單個可編程邏輯器件平臺,使得系統(tǒng)設(shè)計更加簡潔靈活。SoPC綜合了SoC,PLD和FPGA的優(yōu)點,集成了硬核和軟核CPU、OSP、存儲器、外圍I/O及可編程邏輯,用戶可以利用SoPC平臺自行設(shè)計高速、高性能的CPU和DSP處理器,使得電子系統(tǒng)設(shè)計進(jìn)入一個嶄新的模式。
該設(shè)計運用SoPC技術(shù)實現(xiàn)嵌入式數(shù)字化語音錄制與回放。其中,介紹了在FPGA上構(gòu)建WM8731的I2C總線,以及數(shù)字化語音在SRAM中的存儲,并利用Matlab 7.0.4軟件對所采集的語音數(shù)據(jù)進(jìn)行仿真。SoPC是現(xiàn)在電子技術(shù)、電子系統(tǒng)設(shè)計的匯聚點和發(fā)展方向。充分體現(xiàn)了其高性能、設(shè)計靈活和易用等特點。
1 系統(tǒng)整體方案
系統(tǒng)以Altera公司的FPGA芯片(CycloneⅡ系列)EP2C35F672C6NK為平臺,結(jié)合音頻編/解碼芯片WM8731實現(xiàn)語音錄制與回放。該FPGA芯片具有豐富的片內(nèi)資源,大量的邏輯宏單元和多個硬件乘法器,大量的自定義I/O接口,此外還有4個鎖相環(huán),為系統(tǒng)提供實時時鐘。設(shè)計中充分利用了FPGA的高速并行和Avalon總線自定義硬件外設(shè)的優(yōu)勢,從而構(gòu)建了一個高集成度、高性能的系統(tǒng)。
語音通過話筒輸入,由音頻編/解碼芯片WM8731以8 kHz的A/D采樣率轉(zhuǎn)換成16位PCM碼緩存。此外,為確保采集的語音數(shù)據(jù)不丟失,先將語音存儲在SRAM中,再作后續(xù)處理。整體系統(tǒng)框架圖1所示。
1.1 芯片工作原理
音頻編/解碼芯片WM8731上電后必須將工作模式設(shè)置在系統(tǒng)要求的狀態(tài)下,因此上電后需要用VERILOG HDL編寫程序模塊對芯片的工作模式進(jìn)行設(shè)置。該語音編/解碼芯片有多種工作模式,A/D變換后,語音的采樣頻率與采樣位寬都需要根據(jù)系統(tǒng)的具體要求,合理配置。語音芯片的配置時序為I2C模式,芯片接口為主模式,即由WM8731提供位時鐘,A/D轉(zhuǎn)換和D/A轉(zhuǎn)換的左、右聲道控制相位時鐘,以及轉(zhuǎn)換后的數(shù)據(jù)PCM碼輸送給FPGA處理器。以下為芯片配置字列表,WM8731內(nèi)部控制字寄存器有16個,在芯片初始化時,在制作ROM表格中完成。相應(yīng)的程序設(shè)置如下:
1. 2 配置單元模塊
配置單元模塊綜合頂層圖如圖2所示。從程序編譯分析報告(見圖3)可以得出,該單元模塊消耗了101個邏輯單元,它作為語音采集模塊的一個子模塊。在配置電路中,模塊CLOCK_50將輸入的50 MHz系統(tǒng)時鐘分頻為1 MHz,作為I2C總線模塊的工作時鐘,CLOCK_50模塊中寫出的上面程序代碼是一個表格,存儲了配置的控制字。I2C總線模塊的I2C_SDAT和I2C_SCLK是數(shù)據(jù)線和時鐘線,DE2板固定分配了專門的I2C數(shù)據(jù)線和時鐘線的引腳線。
1.3 語音采集模塊
語音采集單元頂層綜合模塊如圖4所示。系統(tǒng)通過語音采集模塊將語音芯片采集的聲音數(shù)據(jù)串/并轉(zhuǎn)換為16位PCM碼,聲音數(shù)據(jù)傳送至S-RAM存儲器內(nèi)保存,這里設(shè)置了4 s錄音時間,用戶1次輸入3個孤立詞(如數(shù)字),4×8 KB=32 KB,考慮到32 KB的原始數(shù)據(jù)需要預(yù)處理、FIR濾波和歸一化。斷點檢測,所有處理后的數(shù)據(jù)仍然存入后續(xù)的SRAM地址中。檢測出的孤立詞分別存入獨立首地址后面。
1.4 語音采集實時采樣
鎖相環(huán)PLL給予WM8731工作在18.4 MHz時鐘頻率下,通過I2C總線控制器設(shè)置WM8731工作在8 kHz的采樣頻率下。圖5為在嵌入式邏輯分析儀(SignalTapⅡLogic Analyzer)下語音采集控制器的采樣圖。
圖5為實時采集圖,測試人現(xiàn)場讀入語音數(shù)據(jù),模塊實時進(jìn)行語音采集回放。從圖中可見,左對齊語音采集過程一共有19個脈沖,其中前16個脈沖為有效語音數(shù)據(jù)提取脈沖,后3個脈沖為將來處理擴(kuò)展預(yù)留。有效語音提取出來之后便存人SRAM中。該模塊通過計數(shù)器,從啟動錄音開始,自動錄制4 s的語音信號。
2 語音錄制回放仿真
經(jīng)WM8731采集的語音信號轉(zhuǎn)換并存儲于SRAM,然后用SRAM中的數(shù)據(jù)將SRAM的語音數(shù)據(jù)導(dǎo)出,圖6為語音采集模塊處理后作者錄入的數(shù)字符號“1234”效果圖。
圖6是通過DE2控制面板軟件讀取SRAM前256 KB數(shù)據(jù)(地址:O~0x1FFFF)在Matlab軟件上畫出來的圖形,同時為了對比,通過Matlab自帶的[y,fs,bits]=wavread(‘Blip’,[N1 N2]),進(jìn)行同樣話語的錄制,用sound(x,fs,bits)對聲音進(jìn)行回放,仿真結(jié)果見圖6、圖7。從仿真圖可看出,以Matlab平臺為標(biāo)準(zhǔn),F(xiàn)PGA實時采集與現(xiàn)實吻合。
3 結(jié)語
該系統(tǒng)充分利用了FPGA的高速處理能力,自行設(shè)計采集模塊和I2C協(xié)議驅(qū)動模塊,并通過AWALON總線掛載在Nios軟核上,很好地實現(xiàn)了實時高速采集回放,充分體現(xiàn)了FPGA的優(yōu)越性能。同時結(jié)合SoPC設(shè)計理念,使系統(tǒng)一片式整合。