高秀林
(山西國(guó)營(yíng)大眾機(jī)械廠, 山西 太原 030000)
隨著音頻技術(shù)發(fā)展得越來越成熟,市面上出現(xiàn)了各種各樣的音頻采集分析設(shè)備,一般的音頻信號(hào)采集都使用8位、16位的A/D轉(zhuǎn)換器,對(duì)于微弱的音頻信號(hào)來說,采樣精度不夠,為后續(xù)的信號(hào)分析帶來了很大的困難。
本文針對(duì)客戶提出的微弱音頻信號(hào)和長(zhǎng)時(shí)間數(shù)據(jù)采集存儲(chǔ)的要求,設(shè)計(jì)了多路音頻記錄系統(tǒng),此系統(tǒng)采用24位A/D轉(zhuǎn)換器,將采集的音頻信號(hào)無壓縮,按照特定的數(shù)據(jù)格式、文件結(jié)構(gòu)將數(shù)據(jù)存儲(chǔ)在SATA盤中。在系統(tǒng)空閑的情況下,可通過網(wǎng)口將數(shù)據(jù)導(dǎo)出,上位機(jī)可根據(jù)實(shí)際需求對(duì)數(shù)據(jù)解析成音頻文件(wave格式),并完成時(shí)域或頻域分析,用于科研分析。
多路音頻記錄系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 多路音頻記錄系統(tǒng)框圖
多路音頻記錄系統(tǒng)硬件設(shè)計(jì)主要由六部分組成。
1)系統(tǒng)控制模塊。主要負(fù)責(zé)整個(gè)系統(tǒng)電源控制、按鍵功能處理、顯示屏數(shù)據(jù)顯示,采用STM32來實(shí)現(xiàn)。
2)音頻信號(hào)采集器。主要用于分通道采集音頻模擬信號(hào)。
3)調(diào)理電路。主要對(duì)采集到的模擬音頻信號(hào)進(jìn)行濾波、放大。
4)A/D轉(zhuǎn)換器。將濾波和放大后的模擬信號(hào)轉(zhuǎn)換為數(shù)字音頻信號(hào),采用24位A/D轉(zhuǎn)換器,A/D采樣頻率48 kbit/s。
5)FPGA模塊。主要根據(jù)A/D轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行放大倍數(shù)的調(diào)整,并按照通道、放大倍數(shù)、音頻信號(hào)整理數(shù)據(jù)按照特定的協(xié)議發(fā)送給音頻數(shù)據(jù)記錄模塊記錄、發(fā)送給系統(tǒng)控制軟件進(jìn)行顯示屏顯示、發(fā)送給PC機(jī)進(jìn)行監(jiān)控(如果需要監(jiān)控的情況)。根據(jù)A/D采集頻率、采樣位數(shù)和通道數(shù)計(jì)算,音頻記錄系統(tǒng)每秒需要記錄數(shù)據(jù)約2 MB,網(wǎng)絡(luò)模塊采用百兆網(wǎng)芯片,此芯片理論上最大的傳輸速度為5 MB/s,可完全滿足系統(tǒng)要求。
6)音頻數(shù)據(jù)記錄/管理模塊。此模塊對(duì)FPGA處理后的數(shù)據(jù)進(jìn)行存儲(chǔ),并在結(jié)束采樣后,PC機(jī)可通過網(wǎng)絡(luò)將存儲(chǔ)的數(shù)據(jù)進(jìn)行導(dǎo)出、刪除。由于音頻數(shù)據(jù)記錄系統(tǒng)需要長(zhǎng)時(shí)間工作在記錄的模式下,需要大容量的快速磁盤[1],因此采用了1TB大小的SATA電子盤。本模塊軟件的運(yùn)行IMX6開發(fā)板上,此開發(fā)板帶有WinCE系統(tǒng),帶有千兆網(wǎng)絡(luò),且有SATA電子盤接口,可完全滿足系統(tǒng)數(shù)據(jù)存儲(chǔ)、導(dǎo)出速度要求。
根據(jù)多路音頻記錄系統(tǒng)的功能需求和硬件平臺(tái),其配套軟件可劃分為系統(tǒng)控制軟件、音頻信號(hào)采集軟件、記錄和管理軟件。軟件結(jié)構(gòu)框圖如圖2所示。
圖2 軟件結(jié)構(gòu)框圖
系統(tǒng)控制軟件駐留在STM32的Flash中。主要功能包括:顯示系統(tǒng)工作狀態(tài)和故障信息;掃描按鍵,根據(jù)按下的按鍵,通告FPGA開始記錄、停止記錄;根據(jù)IMX6通告的時(shí)間,實(shí)時(shí)在顯示屏上刷新時(shí)間;對(duì)FPGA實(shí)時(shí)發(fā)送的音頻數(shù)據(jù)進(jìn)行分通道顯示。
音頻信號(hào)采集軟件駐留在FPGA的RAM中。主要功能如下。
1)根據(jù)當(dāng)前采集到的音頻信號(hào)大小調(diào)整放大倍數(shù)。
2)向STM32實(shí)時(shí)發(fā)送音頻數(shù)據(jù)。
3)響應(yīng)STM32的控制指令,數(shù)據(jù)開始記錄后,向IMX6發(fā)送音頻數(shù)據(jù)。
音頻信號(hào)存儲(chǔ)/管理軟件主要功能如下。
1)向STM32通告當(dāng)前時(shí)間、文件寫入、系統(tǒng)狀態(tài)。
2)音頻數(shù)據(jù)記錄期間,接收FPGA按照數(shù)據(jù)頭+序列號(hào)+多路音頻數(shù)據(jù)+數(shù)據(jù)尾格式發(fā)送的數(shù)據(jù),存儲(chǔ)到SATA盤中。根據(jù)客戶要求,音頻數(shù)據(jù)在記錄期間不能丟失數(shù)據(jù),因此音頻數(shù)據(jù)記錄軟件采用了多線程[2]、雙緩存和文件映射技術(shù)[3]。
3)軟件設(shè)計(jì)中主線程負(fù)責(zé)通過網(wǎng)口異步接收數(shù)據(jù)并寫入緩存,緩存寫滿后通告子線程將數(shù)據(jù)寫入文件中,同時(shí)主線程又接收到的數(shù)據(jù)寫入另外一塊緩存中,避免了因此寫入文件占時(shí)過長(zhǎng)導(dǎo)致丟失數(shù)據(jù)的情況。由于系統(tǒng)需要長(zhǎng)時(shí)間工作,為了避免寫入磁盤次數(shù)過多導(dǎo)致磁盤碎片的產(chǎn)生,因此采用了文件映射技術(shù),按照2 GB的大小分配連續(xù)的空間,不僅避免了碎片的產(chǎn)生,還提高了文件寫入速度。
圖3 音頻文件存儲(chǔ)結(jié)構(gòu)
4)為了便于區(qū)分每次的采樣和文件保存的先后順序,SATA盤中音頻文件的存儲(chǔ)按照?qǐng)D3所示結(jié)構(gòu)進(jìn)行保存。
5)采樣日期使用年月日(例20180715),采樣時(shí)間使用年月日時(shí)分秒(例20180715140505),音頻文件采用二進(jìn)制文件,文件名稱按照年月日時(shí)分秒命名(例 20180715140505.dat)[4]。
本文根據(jù)用戶需求,設(shè)計(jì)了多通道音頻記錄設(shè)備,此設(shè)備經(jīng)過長(zhǎng)時(shí)間運(yùn)行測(cè)試,工作穩(wěn)定,數(shù)據(jù)記錄準(zhǔn)確,數(shù)據(jù)導(dǎo)出通過測(cè)試可達(dá)到27 MB/s的速度,可快速導(dǎo)出文件(每個(gè)文件約2 GB),此系統(tǒng)可廣泛應(yīng)用于各種需要記錄多通道音頻信號(hào)的場(chǎng)景,用于后續(xù)的科研分析。