文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.181931
中文引用格式: 周靜雷,李騰飛,馮源. 可用于電聲測試系統(tǒng)的專業(yè)音頻接口設(shè)計[J].電子技術(shù)應(yīng)用,2019,45(1):105-108.
英文引用格式: Zhou Jinglei,Li Tengfei,F(xiàn)eng Yuan. Design of professional audio interface available for electroacoustic testing system[J]. Application of Electronic Technique,2019,45(1):105-108.
0 引言
電聲測試系統(tǒng)主要用于測試揚(yáng)聲器、傳聲器等產(chǎn)品的電聲性能,是電聲產(chǎn)品研發(fā)和生產(chǎn)過程中不可缺少的設(shè)備。電聲測試系統(tǒng)一般需要借助于聲卡來實現(xiàn)音頻信號的模數(shù)和數(shù)模轉(zhuǎn)換[1-2]。聲卡設(shè)計上更側(cè)重于音質(zhì)效果,聲卡的音效處理功能在電聲測試中是用不到的,使電聲測試系統(tǒng)增加了不必要的成本;一般聲卡需借助于同步協(xié)議才能完成連續(xù)掃頻測試[2]。開發(fā)電聲測試系統(tǒng)專用音頻接口,有利于提高電聲測試精度,簡化測試流程,并降低成本。本文設(shè)計的音頻接口上位機(jī)軟件使用C++程序設(shè)計語言設(shè)計,提供了接口函數(shù),可供電測量系統(tǒng)軟件調(diào)用。高速USB2.0接口通信,能夠以較快的速度傳輸音頻數(shù)據(jù)[3]。下位機(jī)以STM32F429作為主控芯片,該芯片有FMC接口,可擴(kuò)展SDRAM用于存儲音頻數(shù)據(jù)[4];使用WM8978音頻編解碼器實現(xiàn)對音頻信號的數(shù)模和模數(shù)轉(zhuǎn)換,該芯片采用了Δ-Σ技術(shù)[5],能夠?qū)崿F(xiàn)16位和24位采樣精度,最高支持192 kHz采樣率,滿足了電聲測試系統(tǒng)的需求[4-7]。
1 音頻接口工作原理
在電聲測試系統(tǒng)中,音頻接口的作用實現(xiàn)D/A和A/D轉(zhuǎn)換功能,為電聲測量儀器提供激勵信號,并將輸入的信號轉(zhuǎn)化為音頻數(shù)據(jù),供計算機(jī)軟件分析,音頻接口錄音和播放功能流程如圖1所示。下位機(jī)能夠通過識別不同采樣率、不同采樣精度、不同聲道數(shù)的wav文件對音頻編解碼器進(jìn)行配置,按上位機(jī)的要求執(zhí)行錄音或播放功能。
2 音頻接口硬件設(shè)計
如圖2所示,音頻接口由4路2通道音頻接口組成,總共有8個輸入通道和8個輸出通道,因此能夠用于揚(yáng)聲器功率試驗系統(tǒng)[8-9]等需要多通道測試的電聲測試系統(tǒng)中,軟件通過4個2位DIP開關(guān)分配的設(shè)備ID號對4路2通道音頻接口進(jìn)行區(qū)分,4路2通道音頻接口的USB接口匯總到一個USB HUB上,USB HUB通過1路USB接口與計算機(jī)相連,減少了對計算機(jī)USB接口數(shù)量的需求。
圖3是使用1路2通道音頻接口的電聲測試系統(tǒng),每個2通道音頻接口能夠?qū)崿F(xiàn)單聲道或立體聲錄音和播放,錄音和播放功能既能單獨進(jìn)行,又能同步進(jìn)行。音頻接口的主控芯片為STM32F429,通過I2C串行總線對音頻編解碼器的功能進(jìn)行設(shè)置;通過I2S內(nèi)置音頻總線與音頻編解碼器WM8978進(jìn)行音頻數(shù)據(jù)傳輸;通過ULPI接口外擴(kuò)1片USB PHY芯片USB3300,實現(xiàn)高速模式的USB2.0通信;通過FMC靈活存儲控制器接口外擴(kuò)1片內(nèi)存大小為32 MB的SDRAM芯片W9825G6KH-6,存儲音頻數(shù)據(jù)。
3 音頻接口軟件設(shè)計
3.1 下位機(jī)軟件設(shè)計
下位機(jī)軟件基于STM32標(biāo)準(zhǔn)庫設(shè)計,程序流程圖如圖4所示。實驗證明,硬件上電之后首先要延時一段時間才能對硬件進(jìn)行初始化,否則會導(dǎo)致音頻編解碼器初始化失敗,這是因為WM8978芯片上電后需要一定的時間啟動,硬件啟動之后I2C才能寫入配置命令。
硬件初始化配置如圖5所示。為了使錄音和播放能夠同步進(jìn)行,主I2S為從I2S提供時鐘,使主控芯片能夠與音頻編解碼器進(jìn)行同步全雙工通信,但是導(dǎo)致了錄音和播放的采樣率只能相同。為了不間斷地進(jìn)行錄音或播放,主I2S和從I2S都配置為DMA雙緩沖模式[6],CPU對DMA的一個緩沖區(qū)進(jìn)行讀寫時,不必停止錄音或播放,DMA可以使用另一個緩沖區(qū)。USB初始化為高速模式的USB2.0 CDC設(shè)備,USB接收音頻數(shù)據(jù)使用的是在SDRAM中申請的數(shù)據(jù)接收緩沖區(qū)。
硬件初始化完成后,下位機(jī)會等待USB連接,期間LED燈不斷閃爍。USB連接之后LED燈常亮,當(dāng)下位機(jī)接收到上位機(jī)的命令之后會根據(jù)命令值執(zhí)行相應(yīng)的功能,這些功能如下:
(1)查詢設(shè)備狀態(tài)功能,能夠向上位機(jī)返回播放狀態(tài)、錄音狀態(tài)、設(shè)備ID號、播放音量、采樣率、采樣精度等信息。其中錄音狀態(tài)包括錄音關(guān)閉、錄音開啟、同步錄音、錄音完成4種狀態(tài),播放狀態(tài)包括播放關(guān)閉和播放開啟2種狀態(tài)。
(2)設(shè)置采樣方式功能,設(shè)置錄音和播放的采樣精度為24位或16位,采樣率為8 kHz~192 kHz。
(3)播放開關(guān)和錄音開關(guān)功能,從I2S使用的是主I2S的時鐘信號,這樣做可以保證錄音和播放的同步,但是造成了主I2S關(guān)閉后,從I2S不能使用的問題。解決這個問題的方法是,硬件初始化完成后,主I2S不斷發(fā)送DMA緩沖區(qū)的數(shù)據(jù)到音頻編解碼器,如果要打開播放功能,只需向主I2S的DMA緩沖區(qū)寫入音頻數(shù)據(jù)即可,如果要關(guān)閉播放功能,則寫入空數(shù)據(jù)。如果通過關(guān)閉從I2S的方法關(guān)閉錄音,會導(dǎo)致無法確定下一次從I2S開啟后,傳輸?shù)牡谝粋€數(shù)據(jù)屬于哪個輸入通道,造成錄音數(shù)據(jù)的左右聲道不確定,因此只能通過控制CPU是否讀取從I2S緩沖區(qū)數(shù)據(jù)的方式控制錄音功能的開啟或關(guān)閉,只需使用一個錄音開關(guān)標(biāo)志位就能做到這一點。
(4)同步錄音功能,同時開啟播放和錄音功能,錄音和播放采用的是相同的時鐘信號,理論上能夠?qū)崿F(xiàn)錄音和播放的完全同步。
3.2 上位機(jī)軟件設(shè)計
上位機(jī)軟件分為主線程和通信線程,主線程能夠查找接入計算機(jī)的USB設(shè)備,并將音頻接口的USB設(shè)備句柄添加到通信線程。主線程提供的接口函數(shù)能夠?qū)⒂脩魧υO(shè)備操作的信息發(fā)送到通信線程,通信線程根據(jù)查詢到的設(shè)備運(yùn)行狀態(tài)信息和從主線程接收的設(shè)備操作信息決定要向下位機(jī)發(fā)送的控制命令類型以及如何進(jìn)行數(shù)據(jù)傳輸。
上位機(jī)軟件具體工作流程如圖6所示,為了實現(xiàn)熱插拔功能,上位機(jī)軟件開啟后首先向主窗體注冊USB CDC設(shè)備,上位機(jī)軟件就可以通過接收Windows操作系統(tǒng)的WM_DEVICECHANG消息識別USB插拔事件。上位機(jī)軟件通過調(diào)用libusb庫函數(shù)實現(xiàn)USB通信[10],主線程首先要初始化libusb庫,然后查找USB總線和總線上的設(shè)備,根據(jù)設(shè)備描述符篩選出音頻接口,依次打開所有的音頻接口獲得其USB設(shè)備的句柄,并查詢其設(shè)備號,通過設(shè)備號可以得知當(dāng)前句柄對應(yīng)的音頻接口通道。主線程將設(shè)備句柄和對應(yīng)的設(shè)備號傳送給通信線程,通信線程就可以對4路2通道音頻接口分別進(jìn)行操作了。最后軟件進(jìn)入等待操作狀態(tài),用戶對USB設(shè)備進(jìn)行插拔后軟件會重新查找設(shè)備。用戶通過設(shè)備接口函數(shù)進(jìn)行操作之后,主線程會將設(shè)備的操作信息發(fā)送到通信線程中。
通信線程建立后會不停地查詢設(shè)備狀態(tài)信息,判斷USB通信是否正常并查詢下位機(jī)的運(yùn)行狀態(tài)。接收到主線程的設(shè)備操作信息之后,通信線程會將其與設(shè)備狀態(tài)信息進(jìn)行對比,根據(jù)信息的不同之處,向下位機(jī)發(fā)送相應(yīng)的命令或進(jìn)行數(shù)據(jù)傳輸。這種設(shè)計方案保證了上位機(jī)和下位機(jī)運(yùn)行狀態(tài)的同步,使整個系統(tǒng)運(yùn)行更加穩(wěn)定。
4 性能測試
4.1 信號輸出性能測試
計算機(jī)分別使用PreSonus AudioBox 1818 VSL專業(yè)聲卡和音頻接口輸出正弦信號,使用APx525音頻分析儀分別測量其總諧波失真,測量結(jié)果如圖7所示,音頻接口在整個音頻頻段輸出激勵信號的總諧波失真均低于專業(yè)聲卡,在1 000 Hz處的總諧波失真為-77 dB,而專業(yè)聲卡為-53.7 dB。
4.2 信號采集性能測試
分別將聲卡和音頻接口用于電聲測量系統(tǒng)中,采集由音頻分析儀信號源輸出的正弦信號,測量電壓如圖8所示,在10 Hz~20 kHz的范圍內(nèi),音頻接口的幅頻特性與專業(yè)聲卡類似,20 kHz以上性能優(yōu)于專業(yè)聲卡。
4.3 同步錄音功能驗證
上位機(jī)軟件讀取波形為1 kHz正弦信號,采樣率為48 000 Hz,采樣精度為16位,時長為1 s的wav文件之后,如圖9所示,在第1個和第48 000個音頻數(shù)據(jù)點處插入標(biāo)記。然后將音頻接口輸入和輸出通道相連,使用同步錄音功能直接對輸出信號進(jìn)行同步采集,采集到圖10所示的波形。圖9和圖10的標(biāo)記值在相同的位置,說明音頻接口的同步錄音功能能夠?qū)崿F(xiàn)錄音和播放完全同步。
5 結(jié)論
本文設(shè)計的音頻接口與PreSonus AudioBox 1818 VSL專業(yè)聲卡相比,輸出通道的總諧波失真更低,輸入通道的幅頻特性更好,能夠?qū)崿F(xiàn)錄音和播放的完全同步,同時又具有成本低的優(yōu)點,完全可以取代專業(yè)聲卡用于電聲測量系統(tǒng)。
參考文獻(xiàn)
[1] 胡良紅.揚(yáng)聲器電聲參數(shù)綜合檢測系統(tǒng)研制[D].桂林:桂林電子科技大學(xué),2015.
[2] 郭慶,楊東奇,徐翠鋒.揚(yáng)聲器電聲參數(shù)自動測試系統(tǒng)的設(shè)計[J].科學(xué)技術(shù)與工程,2015,15(34):56-63.
[3] 馮劍鋒,張波,楊東凱.基于高速USB3300接口的FPGA數(shù)據(jù)采集器設(shè)計與實現(xiàn)[C].全國信號和智能信息處理與應(yīng)用學(xué)術(shù)會議會刊,2013.
[4] 田谞,王宏偉,其木蘇榮.基于STM32F429的音頻信號發(fā)生器[J].微型機(jī)與應(yīng)用,2014(24):87-90.
[5] 張瑜,孟慶楠,楊開宇,等.基于Δ-Σ技術(shù)和FPGA的數(shù)據(jù)采集系統(tǒng)[J].電子技術(shù)應(yīng)用,2011,37(6):141-144.
[6] 周靜雷,孫長城.基于STM32的音頻播放與記錄控制器設(shè)計[J].微處理機(jī),2017,38(1):67-70.
[7] 劉麗.嵌入式WM8960音頻驅(qū)動及多線程播放器的設(shè)計[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.
[8] 周靜雷,王浩,李倩,等.大功率揚(yáng)聲器單元的功率試驗系統(tǒng)設(shè)計[J].國外電子測量技術(shù),2018,37(5):89-92.
[9] 楊軍.關(guān)于揚(yáng)聲器功率試驗的一些新趨勢[J].電聲技術(shù),2017(Z4).
[10] 李生.基于SOPC的嵌入式數(shù)據(jù)傳輸系統(tǒng)設(shè)計[D].杭州:杭州電子科技大學(xué),2012.
作者信息:
周靜雷,李騰飛,馮 源
(西安工程大學(xué) 電子信息學(xué)院,陜西 西安710048)