姚夢茹,胡永兵,李 慧
(安徽大學 計算智能與信號處理教育部重點實驗室,安徽 合肥 230601)
伴隨電子與通信技術(shù)的發(fā)展,數(shù)字音頻[1]廣播、多媒體通信等這些數(shù)字音頻處理技術(shù)在人們的生活中產(chǎn)生了深遠影響,并且在社會中得到了廣泛應用。所謂數(shù)字音頻技術(shù)[2]是指把模擬聲音信號通過采樣、量化和編碼過程轉(zhuǎn)換成數(shù)字信號,然后再進行記錄、傳輸以及其他加工處理;在重放時再將這些記錄的數(shù)字音頻信號還原為模擬信號,獲得連續(xù)的聲音。數(shù)字音頻技術(shù)的應用領(lǐng)域包括消費電子類數(shù)字音響設備、樂器調(diào)音、廣播節(jié)目制作系統(tǒng)、多媒體應用、廣播電視數(shù)字化等。其中調(diào)音器的應用比較廣泛。市面上的樂器聲音識別調(diào)音器雖然小巧便攜,但是實時性和準確性卻不高,而且現(xiàn)有的調(diào)音器的種類比較少,比較常見的是吉他調(diào)音器。
為了提高識別準確率,使識別設備小型化,基于FPGA[3]中的Avalon總線[4]技術(shù)和快速傅里葉變換算法[5-6],設計實現(xiàn)了一種實時高效的音頻頻譜分析系統(tǒng),實時完成各種音樂信號的采集與分析,克服傳統(tǒng)調(diào)音器的限制。
音頻頻譜顯示系統(tǒng)是基于Nios II系統(tǒng)[7]實現(xiàn)的。整個系統(tǒng)硬件框圖如圖1所示,包括ADC模塊、LCD模塊、RAM模塊、Nios II系統(tǒng)模塊。其中Nios II是核心,與各外圍電路形成完整的主控系統(tǒng)。
音頻頻譜顯示系統(tǒng)的結(jié)構(gòu)框圖以及系統(tǒng)總體方案示意如圖1所示。
圖1 系統(tǒng)總體方案示意
整個系統(tǒng)硬件框圖如圖2所示。其中信號采集與信號轉(zhuǎn)換模塊主要由芯片WM8731實現(xiàn),主要是對輸入的音頻信號進行A/D轉(zhuǎn)換,輸出數(shù)字信號到FPGA主芯片,以便對其進行快速傅里葉變換。時鐘模塊為系統(tǒng)各個模塊的功能實現(xiàn)提供穩(wěn)定的時鐘信號。電源模塊為系統(tǒng)的正常運行提供穩(wěn)定的電源輸入。JTAG配置模塊為系統(tǒng)的代碼測試提供幫助。LCD模塊就是顯示音樂信號經(jīng)過處理后的音頻頻譜,能有直觀清晰的頻譜感受。
圖2 系統(tǒng)硬件設計框圖
系統(tǒng)使用的FPGA芯片是Cyclone IV E。Altera公司的新型Cyclone IV系列[8]FPGA設備在低成本和低功率FPGA市場上已經(jīng)整合了Cyclone系列。Cyclone IV具有高容量性能,能夠很好地應用于程序設計,使系統(tǒng)開發(fā)者在降低成本的同時,又能滿足逐漸變大的帶寬需求。FPGA外圍電路設計主要包括:配置下載電路、時鐘電路、A/D轉(zhuǎn)換電路。文中設計采用了JTAG下載配置[9]方式。時鐘模塊使用的芯片是PCF8563,該模塊結(jié)合PLL的IP核將板卡自帶的50 MHz單端有源晶振倍頻或分頻成多個不同時鐘,給各個模塊使用。其中WM8731的I2C配置模塊使用50 MHz時鐘;WM8731的I2S轉(zhuǎn)換模塊使用18.38 MHz時鐘;FFT計算IP使用18.38 MHz時鐘;TFT_LCD顯示軟件則使用40 MHz時鐘。A/D轉(zhuǎn)換模塊使用的是WM8731音頻編解碼芯片。WM8731帶有麥克風輸入,音頻輸入和音頻輸出端口,音頻采樣率從8 kHz到96 kHz可設置。該芯片使用I2S接口傳輸音頻,使用I2C接口接受FPGA的控制。
FPGA程序設計是系統(tǒng)的核心,該設計中使用Verilog HDL[10]語言采用自上而下的設計方法,頂層模塊包含四個功能模塊,分別是音頻采集與編解碼模塊、FIFO緩存模塊、FFT數(shù)據(jù)處理模塊、TFT_LCD頻譜顯示模塊。各功能模塊在Altera公司的Quartus II 13.0軟件下采用Verilog HDL語言設計完成,并在Modelsim軟件下編寫Testbentch進行仿真測試。
該模塊為通過兩線制的時序?qū)慦M8731的寄存器,在該系統(tǒng)中,數(shù)據(jù)訪問采用16位分辨率和I2S模式。在I2S模式下,ADC輸出數(shù)據(jù)的時序如圖3所示。有效數(shù)據(jù)在adclrc發(fā)生電平變化后的第二個bclk電平發(fā)生變化的位置。adclrc是校準時鐘,用來表明是使用左聲道數(shù)據(jù)還是右聲道數(shù)據(jù)。當adclrc變成低電平時,輸出的是左聲道數(shù)據(jù),反之,當adclrc為高電平時說明輸出的是右聲道數(shù)據(jù)。位時鐘是bclk,在它的下降沿時會輸出一個新數(shù)據(jù),最先輸出的是最高有效位。
圖3 I2S模式下ADC/DAC數(shù)據(jù)時序
該系統(tǒng)使用了兩種加窗算法[11-12],分別是矩形窗和漢寧窗。由于采樣的時候,每次至少采樣128個點,然后對12個點進行FFT處理,這相當于加入了矩形窗;漢寧窗的作用是能有效壓低旁瓣。在程序中,對于采集過來的時域信號分別進行加窗,程序如下所示:
void win hanning(long int win[])
{
int i;
for(i=0;i<512;i++)
{
win[i]=(long int)win[i]*hcos[i]);
}
}
其中,hcos[]是加窗的系數(shù)數(shù)組,在初始化已經(jīng)進行計算,程序如下:
for(i=0;i<512;i++)
{
hcos[i]=0.5-0.5*cos(0.012 271 85*i);
}
LCD控制器[13]是非常重要的外圍片上設備,通過LCD控制器來完成處理器對顯示驅(qū)動器的控制,最終完成LCD屏的點亮操作。因為LCD顯示驅(qū)動器僅僅是一個被動系統(tǒng),所以還需要有一個控制電路來提供驅(qū)動系統(tǒng)所需要的掃描時序信號以及顯示數(shù)據(jù)。通過對LCD控制器進行操作,處理器完成對LCD顯示設置掃描時序和寫入顯示數(shù)據(jù),從而實現(xiàn)對LCD的顯示。
該課題的核心是在FPGA芯片上設計一個基于Nios II的音頻頻譜分析系統(tǒng),利用Qsys[14-15]將處理器、存儲器以及其他外設模塊連接起來構(gòu)成一個完整的系統(tǒng)。在該系統(tǒng)中,使用了已有的外設IP核模塊,也構(gòu)造了自己的IP核模塊。該系統(tǒng)由Nios II處理器、onchip_memory、jtag_uart、fifo、fft等模塊組成,如圖4所示。
使用MegaWizard插件管理器來創(chuàng)建和修改含有定制IP核的設計文件,并且在設計文件中例化IP核??梢岳肕egaWizard插件管理器來創(chuàng)建、定制與例化IP核、參數(shù)化模型庫(LPM)模塊,并且可以在Quartus II軟件、EDA設計的入口和綜合工具中使用IP核。該系統(tǒng)配置了PLL、FIFO、RAM、FFT的IP核,從而搭建出了Nios II系統(tǒng)。
針對系統(tǒng)中的核心模塊——音頻編解碼模塊進行測試。當把系統(tǒng)程序下載到電路板上之后,用Quartus II軟件自帶的SignalTap邏輯分析儀對WM8731的數(shù)據(jù)接口模塊進行邏輯分析,抓捕信號,結(jié)果如圖5所示。觀察波形可知,當16位的輸入數(shù)據(jù)信號DATA_In開始傳輸16位的數(shù)據(jù)時,輸出數(shù)據(jù)信號DATA_In隨即也開始輸出16位的數(shù)據(jù),可知該模塊能完成信號的轉(zhuǎn)化,并能正常輸出數(shù)據(jù)信號。
圖4 Nios II系統(tǒng)的搭建
圖5 WM8731模塊的時序
實物顯示頻譜圖如圖6所示??梢钥吹捷斎氩煌囊魳沸盘?,頻譜圖顯示有明顯不同,達到了預期效果。
圖6 實物顯示
由圖6可以看出,輸入的音樂信號的音調(diào)發(fā)生變化,屏幕上顯示的音頻頻譜隨之實時變化,達到了預設效果。
基于FPGA中的Avalon總線技術(shù)和快速傅里葉變換算法,設計實現(xiàn)了一種實時高效的音頻頻譜分析系統(tǒng)。該系統(tǒng)可以實時完成各種音樂信號的識別與分析,克服了傳統(tǒng)的調(diào)音器的限制,可以對多種樂器進行調(diào)音,大大提高了樂器的音準并克服了一種調(diào)音器只能調(diào)節(jié)一種樂器的限制,提高了調(diào)音器的使用率,具有實際應用價值。系統(tǒng)測試運行工作穩(wěn)定,實現(xiàn)了預期設計的功能。