張皓然,萬書芹,蔣穎丹,張 濤
(中科芯集成電路有限公司,江蘇 無錫 214063)
人類的耳朵可以感受各種頻段的音波,包括自然界里各種天然的聲音,也包括人工生成的聲音。科學(xué)研究表明人耳所能感受到的聲音范圍是20~20 000 Hz,但這并不是人耳真正能識別的頻率[1]。人們正常說話的聲音頻段在500~4 000 Hz,而讓人們放松舒適的頻段在20~600 Hz,所以20~4 000 Hz 頻段的聲音最有研究價(jià)值。如何精確地獲取這個(gè)頻段聲音的信息參數(shù)成為評估其質(zhì)量的關(guān)鍵。
因此,本文提出了一種基于FPGA 的六通道音頻信號評估系統(tǒng),針對20~4 000 Hz 頻段的聲音,選用最高64 kS/s 采樣頻率,16 bit 采樣精度的六通道ADC。系統(tǒng)中FPGA 和ADC 通過工業(yè)串行端口(SERIAL PORT,簡稱SPORT)進(jìn)行功能配置和數(shù)據(jù)傳輸,依托MATLAB 圖形化用戶界面(GUI)實(shí)現(xiàn)了對應(yīng)的上位機(jī),配合FPGA 的嵌套狀態(tài)機(jī),可實(shí)時(shí)顯示采樣數(shù)據(jù)的時(shí)域波形和經(jīng)過快速傅里葉變換(FFT)的頻譜曲線。該系統(tǒng)經(jīng)過了測試和驗(yàn)證,可以準(zhǔn)確反映出對應(yīng)頻段音頻信號的質(zhì)量。
一般信號采樣處理系統(tǒng)會采用具備一定速度和容量的存儲器件來暫存數(shù)據(jù),以解決采樣端數(shù)據(jù)發(fā)送速率和上位機(jī)數(shù)據(jù)接受速率之間不匹配的問題[2]。常用系統(tǒng)結(jié)構(gòu)如圖1 所示。信號源為ADC 提供輸入模擬信號,經(jīng)由ADC 轉(zhuǎn)換成數(shù)字信號并傳輸給FPGA,F(xiàn)PGA 在高速時(shí)鐘下將采樣信號保存到存儲器件中,在存儲了一定容量的數(shù)據(jù)后,再將信號從存儲器件中讀出,通過USB 接口傳輸給上位機(jī)。
圖1 一般信號采樣處理系統(tǒng)總體框圖
該結(jié)構(gòu)非常適用于數(shù)據(jù)采樣速率快且傳輸數(shù)據(jù)量大的應(yīng)用場合,此時(shí)需要使用高速的大容量存儲器件,成本較高,設(shè)計(jì)難度較大。當(dāng)數(shù)據(jù)采樣速率較慢,數(shù)據(jù)量較小時(shí),該方案并不是最好的選擇。
本文提出了一種新的設(shè)計(jì)方法,為低頻采樣且數(shù)據(jù)量小的應(yīng)用需求提供了另外一個(gè)可選方案。以FPGA 作為主體芯片,實(shí)現(xiàn)對ADC 器件的功能配置;ADC 信號采樣后通過SPORT 端口發(fā)送給FPGA,F(xiàn)PGA 按照狀態(tài)機(jī)跳變將接收到的數(shù)據(jù)依次存入內(nèi)部FIFO 中,然后在ARM 處理器計(jì)算出波特率,再將數(shù)據(jù)發(fā)送給上位機(jī),完成數(shù)據(jù)存儲和處理。系統(tǒng)總體架構(gòu)如圖2 所示。這種方法減少了系統(tǒng)對存儲芯片的依賴,簡化了硬件電路板的設(shè)計(jì)。
圖2 系統(tǒng)總體框圖
本設(shè)計(jì)選用Intel 公司的Cyclone III 系列的EP3C25-Q240C8N 芯片。該型號具有豐富的資源,包括24 624 個(gè)邏輯單元,608 256 bit 的存儲空間,并有著豐富的IP 資源,可根據(jù)不同需要例化不同的IP[3]。其系統(tǒng)時(shí)鐘倍頻后最高可達(dá)800 MHz,滿足應(yīng)用需求。
由于FPGA 的自身特點(diǎn),掉電會丟失數(shù)據(jù),實(shí)際應(yīng)用中需配備具有存儲功能的芯片來保存程序或者其他一些關(guān)鍵數(shù)據(jù)。這里選用EPCS16N 芯片存儲FPGA 程序數(shù)據(jù),在Debug 程序時(shí),選擇JTAG 下載方式,無需Debug可直接固化程序時(shí),選擇AS 下載方式,這樣程序就會被保存在EPCS16N 中,掉電后也不會丟失。
ARM 處理器在整個(gè)系統(tǒng)中作為輔助單元,主要用于計(jì)算FPGA 和上位機(jī)間最匹配的通信速率以滿足在任何ADC 速率下不會出現(xiàn)丟碼。
ST 公司的STM32F4 系列芯片是F1 系列的加強(qiáng)版,內(nèi)部新增DSP 內(nèi)核,具有強(qiáng)大的數(shù)據(jù)計(jì)算能力,并且具有快速的總線通信機(jī)制——可變靜態(tài)存儲控制器(Flexible Static Memory Controller,F(xiàn)SMC),通信頻率可達(dá)84 MHz,滿足快速通信的需求[4]。因此選用該系列的STM32F407型號。
本文選用亞德諾半導(dǎo)體公司的AD73360。該模數(shù)轉(zhuǎn)換芯片具有16 bit 的有效位數(shù),內(nèi)置了6 個(gè)獨(dú)立的ADC內(nèi)核,可同時(shí)對6 路通道的輸入信號進(jìn)行輪流采樣,并且每路通道在4 kHz 的信號帶寬上提供77 dB 的信噪比,通過SPORT 可以設(shè)置成四種不同的采樣速率,分別是8 kHz,16 kHz,32 kHz,64 kHz。
FPGA 與上位機(jī)通信的速率需要考慮輸入信號的頻率和ADC 的采樣速率是否匹配,如果兩者之間的速率不匹配會導(dǎo)致最后的采樣出現(xiàn)丟碼??紤]到通信的多變性和穩(wěn)定性,將USB 協(xié)議作為傳輸協(xié)議,連接上位機(jī)和FPGA。
設(shè)計(jì)中采用RS232 協(xié)議轉(zhuǎn)USB 協(xié)議的方式實(shí)現(xiàn)USB通信。輸入信號頻率范圍是20 Hz~4 000 Hz,如果ADC采樣頻率一直是64 kHz,當(dāng)輸入20 Hz 信號時(shí),一個(gè)周期采樣3 200 個(gè)點(diǎn);如果一直是8 kHz,當(dāng)輸入頻率是4 000 Hz時(shí),一個(gè)周期才2 個(gè)點(diǎn),這顯然是不合理的。因此,為了使得采樣數(shù)據(jù)個(gè)數(shù)在合理的范圍內(nèi),本文設(shè)計(jì)通過另一路RS232 告知FPGA 輸入信號的頻率,然后FPGA 根據(jù)最小采樣點(diǎn)不少于16,最大采樣點(diǎn)不大于400 的規(guī)則去酌情選擇采樣頻率。
ADC 的采樣頻率是8 kHz~64 kHz,輸入信號的頻段是20 Hz~4 000 Hz,各個(gè)頻率的聲音信號一個(gè)周期不少于16 個(gè)點(diǎn),6 個(gè)通道數(shù)據(jù)一起輸出,可由式(1)計(jì)算出波特率的范圍是1 536 b/s~307 200 b/s。
其中R 表示通信波特率,m 表示采樣精度,n 表示通道數(shù),S 表示ADC 的采樣頻率,I 表示ADC 的輸入頻率。
RS232 通信協(xié)議的發(fā)送操作中包含11 位信號,其中8 位是數(shù)據(jù)位,1 位起始位,1 位停止位和1 位空閑位,因此,真實(shí)的波特率范圍是2 112 b/s~422 400 b/s。
USB 協(xié)議芯片選用CP2101,其支持RS232 協(xié)議轉(zhuǎn)USB2.0 協(xié)議,支持的波特率范圍是300 b/s~921.6 kb/s,有充足冗余,可以流暢地與上位機(jī)端通信[5]。
FPGA 總體邏輯設(shè)計(jì)框圖如圖3 所示。在Quartus 軟件上直接對FPGA 進(jìn)行基于Verilog 語言的RTL 流程開發(fā),配合JTAG 和SignalTap 進(jìn)行程序在線調(diào)試[6],ModelSim軟件作為驗(yàn)證仿真手段,可單獨(dú)對SPORT 時(shí)序、FIFO、FSMC 接收時(shí)序和嵌套狀態(tài)機(jī)進(jìn)行仿真驗(yàn)證,經(jīng)過嚴(yán)密的邏輯仿真,修訂BUG 后下載FPGA 程序完成閉環(huán)設(shè)計(jì)。STM32 的程序開發(fā)在KEIL 軟件上可以完成。
圖3 FPGA 總體邏輯框圖
MATLAB 中自帶圖形化用戶界面功能,創(chuàng)建的圖形界面可以調(diào)用M 語言編寫的算法函數(shù),可以實(shí)現(xiàn)USB 通信和FFT 運(yùn)算,實(shí)現(xiàn)上位機(jī)功能。
3.1.1 SPORT 通信協(xié)議
AD73360 的SPORT 通信協(xié)議是由SCLK、SDO、SDOFS、SDI、SDIFS 和SE共6根信號組成的。SPORT協(xié)議有三種工作模式:控制模式、數(shù)據(jù)模式和混合控制數(shù)據(jù)模式,本文只用前兩種模式。使用控制模式將ADC 配置成預(yù)期的工作狀態(tài),然后使用數(shù)據(jù)模式接收數(shù)據(jù)。
控制模式下,SE、SCLK、SDI、SDIFS四根信號工作,其他信號不工作;數(shù)據(jù)模式下,SE、SCLK、SDO、SDOFS 四根信號工作,其他信號處于空閑態(tài)。時(shí)序圖如圖4 所示[7]。
圖4 SPORT 控制模式和數(shù)據(jù)模式時(shí)序
AD73360 具有6 個(gè)采樣通道,數(shù)據(jù)采集是按照數(shù)字順序依次進(jìn)行的,根據(jù)SDOFS 的脈沖,采樣數(shù)據(jù)依次通過SPORT 時(shí)序被讀出。
3.1.2 嵌套式狀態(tài)機(jī)
整個(gè)系統(tǒng)的邏輯是由一個(gè)三層嵌套式的狀態(tài)機(jī)實(shí)現(xiàn)的[8]。
如圖5 所示,第一層狀態(tài)機(jī)邏輯具有4 個(gè)狀態(tài):空閑態(tài)(IDLE)、寫地址(ADDR_WR)、寫數(shù)據(jù)(DATA_WR)、ADC 數(shù)據(jù)接收(ADC_DATA)。其主要功能是實(shí)現(xiàn)SPORT邏輯實(shí)時(shí)。
圖5 第一層狀態(tài)機(jī)
第二層狀態(tài)機(jī)邏輯如圖6 所示,具有6 個(gè)狀態(tài):空閑態(tài)(IDLE)、SPORT 讀數(shù)據(jù)(SPORT_DATA_RD)、FIFO 寫數(shù)據(jù)(FIFO_WR)、FIFO讀數(shù)據(jù)(FIFO_RD)、RS232-USB 協(xié)議轉(zhuǎn)換(USB)、SPORT 接收數(shù)據(jù)與FIFO 讀出數(shù)據(jù)同步(DATA_SYNC)。其主要功能是實(shí)現(xiàn)FIFO 存取以及USB端的數(shù)據(jù)發(fā)送。
圖6 第二層狀態(tài)機(jī)
如圖7 所示,第三層狀態(tài)機(jī)邏輯具有7 個(gè)狀態(tài):空閑態(tài)(IDLE)、ADC 數(shù)據(jù)接收及發(fā)送(ADC_RD&SEND)、RS232發(fā)送給GUI 數(shù)據(jù)(GUI_TX)、RS232 接收來自GUI 的數(shù)據(jù)(GUI_RX)、FSMC發(fā)送數(shù)據(jù)(FSMC_TX)、FSMC接收數(shù)據(jù)(FSMC_RX)、通信速率同步(COM_SYNC)。
圖7 第三層狀態(tài)機(jī)
第三層狀態(tài)機(jī)主要實(shí)現(xiàn)了GUI、FPGA 和STM32 三者之間的通信,實(shí)時(shí)更新第二層狀態(tài)機(jī)中USB 端的通信速率,以及第一層狀態(tài)機(jī)中SPORT 端口數(shù)據(jù)讀取的時(shí)刻,確保與GUI 的通信不丟碼。
3.1.3 FIFO 設(shè)計(jì)
由于在數(shù)據(jù)模式下,ADC 會對6 個(gè)通道的信號依次采樣,每個(gè)通道采樣的數(shù)據(jù)是16 bit,因此每次采樣的數(shù)據(jù)按照96 bit 為一個(gè)單位。所以,F(xiàn)IFO 的深度確定為96 bit,寬度為1 bit。設(shè)計(jì)中調(diào)用了FPGA 中FIFO 的IP 核,該IP 核可根據(jù)需要更改深度,并且可以配合其他模塊完成RTL 級仿真。6 個(gè)通道數(shù)據(jù)全部采樣完成后,下一幀數(shù)據(jù)的采樣到來前會有約45 個(gè)SCLK 的總線空閑時(shí)間。而SCLK 是由主頻16.384 MHz 分頻得來的。這段空閑時(shí)間最短為45/16.384 MHz=2.746 μs。
在這段時(shí)間里,要完成FIFO 中6 個(gè)通道數(shù)據(jù)的寫入和數(shù)據(jù)的同步。這里采用了FPGA 內(nèi)部的PLL 倍頻IP核,可以將內(nèi)部時(shí)鐘倍頻到最高500 MHz,根據(jù)實(shí)際情況,選用了200 MHz 的內(nèi)部工作頻率,處理6 個(gè)通道16 bit數(shù)據(jù) 只需要96/200 MHz=0.48 μs。
由于數(shù)據(jù)是嚴(yán)格按照SDOFS 脈沖采樣的,在SPORT控制模式配置完相關(guān)寄存器后,第一個(gè)SDOFS 脈沖對應(yīng)著第一個(gè)通道的第一個(gè)數(shù)據(jù),遵循這個(gè)規(guī)律存儲數(shù)據(jù),相位嚴(yán)格保持對齊。FIFO 的讀取速率按照最近更新的STM32 計(jì)算出的數(shù)據(jù)波特率依次取出數(shù)據(jù)。FIFO 存取示意圖如圖8 所示。
圖8 FIFO 存取示意圖
STM32 依托其可快速計(jì)算的DSP 內(nèi)核和快速通信的總線,實(shí)時(shí)完成FPGA 和GUI 之間的速率更新,每一次計(jì)算完成后,詢問FPGA 是否更新完畢,更新完畢后處于待機(jī)狀態(tài),等待下一次觸發(fā),否則重新發(fā)送再次詢問直到波特率更新。程序設(shè)計(jì)流程圖如圖9 所示。
圖9 STM32 程序設(shè)計(jì)流程圖
上位機(jī)的主要功能是數(shù)據(jù)采集、處理、保存以及顯示。MATLAB 中有一種圖形化用戶接口,采用圖形方式顯示計(jì)算機(jī)操作用戶界面,底層調(diào)用了一些常用的驅(qū)動函數(shù),方便進(jìn)行人機(jī)交互操作[9]。
上位機(jī)的工作流程如圖10 所示,首先輸入信號頻率數(shù)值(以赫茲為單位),選擇串口通道、校驗(yàn)位、數(shù)據(jù)位和停止位,然后選擇采樣通道,點(diǎn)擊打開端口,開始接收相應(yīng)通道的數(shù)據(jù)。上位機(jī)有兩塊功能區(qū):時(shí)域采樣和頻域處理,點(diǎn)擊時(shí)域采樣的打開按鈕,采集到的原始數(shù)據(jù)會依次在右邊的框圖中顯示;點(diǎn)擊頻域處理的開始按鈕,內(nèi)部快速傅里葉變換函數(shù)會開始對已有數(shù)據(jù)進(jìn)行計(jì)算,以一定的數(shù)據(jù)量為基礎(chǔ),不斷更新迭代,實(shí)時(shí)更新右邊框圖中的圖形。
圖10 上位機(jī)程序設(shè)計(jì)流程圖
系統(tǒng)完成后,首先進(jìn)行硬件檢查,軟件調(diào)試和功能試運(yùn)行,然后對SPORT 時(shí)序,F(xiàn)IFO 存取,以及上位機(jī)讀取、處理數(shù)據(jù)的功能進(jìn)行驗(yàn)證。
全部驗(yàn)證工作在測試實(shí)驗(yàn)間的實(shí)驗(yàn)平臺中完成。實(shí)驗(yàn)平臺如圖11 所示。
圖11 實(shí)驗(yàn)平臺
驗(yàn)證SPORT 時(shí)序的主要方法是用Quartus 軟件自帶的邏輯分析儀SignalTap 去抓取,得到的波形與手冊對比。
系統(tǒng)主要使用SPORT 的兩個(gè)模式:控制模式和數(shù)據(jù)模式。前者用來配置寄存器,后者用來讀取數(shù)據(jù)。能否正確回讀數(shù)據(jù)是驗(yàn)證的重點(diǎn)所在,同時(shí)數(shù)據(jù)模式的時(shí)序正確也證明編寫的SPORT 驅(qū)動是正確的。
系統(tǒng)參考電壓是3 V,三通道輸入1.5 V,回讀的數(shù)字?jǐn)?shù)據(jù)是0x7FFF,并結(jié)合各個(gè)信號的行為特征,證明SPORT時(shí)序正確。測試結(jié)果如圖12 所示。
圖12 SignalTap 抓取的SPORT 時(shí)序
FIFO 作為數(shù)據(jù)的緩沖,可以有效避免數(shù)據(jù)的錯位和丟失,形成規(guī)則的數(shù)據(jù)流,利于數(shù)據(jù)處理。
FIFO 是隊(duì)列形式的存儲結(jié)構(gòu),邏輯規(guī)則是先入先出,F(xiàn)IFO 的寫入時(shí)鐘和讀出時(shí)鐘可以不一樣,但也要遵循非滿可寫,非空可讀的原則。
采用Modelsim 軟件對FPGA 的FIFO 核進(jìn)行仿真,按照順序依次寫入數(shù)據(jù)0xa5a5、0x0003、0x0005、0x0006、0x0015、0x0017。之后,再按照順序依次讀出,由圖13 可知,F(xiàn)IFO 讀出的順序和寫入時(shí)的順序一致。
圖13 Modelsim 仿真的FIFO 時(shí)序
ADC 輸入頻率設(shè)定為50 Hz,根據(jù)理論,F(xiàn)PGA 會自動選擇8 kHz 頻率采樣,每一個(gè)周期采樣點(diǎn)是160 個(gè)點(diǎn),波特率是160×6×22=21 120 b/s。由于窗口限制,考慮清晰度,數(shù)據(jù)只顯示1 024 個(gè)點(diǎn)。
測試通道選擇的是6 通道,串口是COM4,測試結(jié)果如圖14 所示,F(xiàn)FT 處理結(jié)果是:SFDR=62 dB,SNR=80 dB。
圖14 實(shí)測上位機(jī)界面
下面將ADC 的6 個(gè)通道按照50 Hz、200 Hz、1 kHz、4 kHz 四個(gè)頻點(diǎn)分別采樣,得到測試結(jié)果如表1 所示。
表1 6 通道音頻信號測試結(jié)果(dB)
由以上測試結(jié)果可知,多通道音頻評估系統(tǒng)具有穩(wěn)定的測試性能,低頻輸入下選擇低頻時(shí)鐘采樣,高頻輸入下選擇較高的采樣頻率采樣,保持?jǐn)?shù)據(jù)量始終在一定的范圍內(nèi)波動。
最終測試結(jié)果顯示低頻的表現(xiàn)要比高頻稍微好一些,符合數(shù)據(jù)手冊參數(shù)。輸入頻率0~4 kHz,采樣頻率8 kHz 時(shí),輸出典型的SFDR 是73 dB,而采樣頻率是64 kHz時(shí),只有62 dB。再加上儀器精密度限制和工藝制造誤差,造成輸出性能略遜于預(yù)期。但總體上滿足對多通道音頻信號采樣評估的要求。