劉永存,賀慧勇
(1.近地空間電磁環(huán)境監(jiān)測與建模湖南省普通高校重點(diǎn)實(shí)驗(yàn)室,湖南長沙 410114;2.長沙理工大學(xué)物理與電子科學(xué)學(xué)院振動(dòng)與噪聲實(shí)驗(yàn)室,湖南長沙 410114;3.長沙理工大學(xué)物理與電子科學(xué)學(xué)院,湖南長沙 410114)
聲音時(shí)間延遲是指同一聲源信號到達(dá)2個(gè)不同位置的時(shí)間差[1],其在機(jī)電設(shè)備故障聲源定位[2]、流體流量測量[3]、流體泄漏檢測[4]等工業(yè)領(lǐng)域有著廣泛的應(yīng)用。在基于麥克風(fēng)陣列的聲源定位系統(tǒng)中,傳統(tǒng)的聲源定位算法有3種:基于到達(dá)時(shí)間差(time difference of arrival,TDOA)算法、基于高分辨率的譜估計(jì)算法和基于最大輸出功率的可控波束形成算法[5]。其中基于到達(dá)時(shí)間差的聲源定位算法首先求出聲音到達(dá)不同位置麥克風(fēng)的時(shí)間延遲,再根據(jù)時(shí)間延遲求得聲音到達(dá)不同位置麥克風(fēng)的距離差,最后利用幾何知識可以確定聲源位置信息[6-7]。針對不同的測量條件與要求,常用的聲音時(shí)延測量的方法有相關(guān)法、相位法、雙譜法、自適應(yīng)濾波器參數(shù)模型法等[8]。相關(guān)法是利用互相關(guān)函數(shù)在該時(shí)延值處取得最大值的特性,由互相關(guān)函數(shù)的峰值位置測量出該時(shí)延值的大小[9]。
在使用傳統(tǒng)模擬麥克風(fēng)作為聲音傳感器采集聲音信號時(shí),外圍電路復(fù)雜,難于調(diào)試,穩(wěn)定性和可靠性都較差。使用微控制器或數(shù)字信號處理器作為信號處理單元時(shí),受其串行工作方式束縛,不能同時(shí)處理多個(gè)任務(wù)、速度慢。為了滿足工業(yè)現(xiàn)場對時(shí)延測量系統(tǒng)穩(wěn)定性與實(shí)時(shí)性的要求,本文提出一種應(yīng)用于聲源定位系統(tǒng)中的互相關(guān)法時(shí)延測量數(shù)字電路硬件級實(shí)現(xiàn)方案,該方案全部采用數(shù)字器件,便于系統(tǒng)調(diào)試,減少了模擬元器件參數(shù)離散性對電路指標(biāo)的影響,提高了測量電路的穩(wěn)定性與可靠性。在現(xiàn)場可編程門陣列(field programmable gate array,F(xiàn)PGA)中硬件實(shí)現(xiàn)互相關(guān)算法,減少了軟件方案運(yùn)行速度慢、難于采集和處理多路聲音信號等問題。
互相關(guān)法測量兩路聲音信號時(shí)間延遲的示意圖如圖1所示。
圖1 互相關(guān)法測量聲音時(shí)間延遲示意圖
聲源發(fā)出聲音信號,到達(dá)兩聲音傳感器的兩路聲音信號分別為x(t)和y(t),則表示兩聲音信號相似性的互相關(guān)函數(shù)可用式(1)來表示[10]。
(1)
式(1)中積分時(shí)間為無窮大,在實(shí)際應(yīng)用中一般在有限時(shí)間內(nèi)計(jì)算積分,如式(2)所示。
(2)
將式(2)離散化可表示為式(3):
(3)
式中:N為采樣點(diǎn)數(shù);k為延時(shí)序號。
為了簡化式(3)以便于在FPGA中用數(shù)字電路實(shí)現(xiàn)和減少數(shù)字電路資源開銷,可將兩路輸入信號x(n)和y(n)量化為極性信號,即只取其正負(fù)號,從而得到極性互相關(guān)函數(shù)計(jì)算公式(4)。
(4)
式中:
J. H. Van Vleck等證明隨機(jī)信號極性化后仍然保持原信號的平穩(wěn)性與各態(tài)遍歷性,極性互相關(guān)函數(shù)與直接互相關(guān)函數(shù)在相同的時(shí)延τ時(shí)到達(dá)峰值[11],所以求出極性互相關(guān)函數(shù)峰值點(diǎn)即可得出聲音信號x(t)和y(t)的時(shí)延差值。
在計(jì)算極性互相關(guān)函數(shù)值時(shí),如果不除以序列長度N,則極性互相關(guān)函數(shù)的幅度會(huì)變化,但是其波形形狀和峰值所對應(yīng)的時(shí)延值并不會(huì)改變[12],所以在FPGA實(shí)現(xiàn)時(shí)可不用除以N。
為了用數(shù)字電路實(shí)現(xiàn)兩路聲音時(shí)延測量,設(shè)計(jì)如圖2所示的互相關(guān)法聲音時(shí)延測量方案。該方案主要包括數(shù)據(jù)采集模塊和數(shù)據(jù)處理模塊。數(shù)據(jù)采集模塊負(fù)責(zé)對兩路聲音信號進(jìn)行同步數(shù)據(jù)采集,數(shù)據(jù)處理模塊負(fù)責(zé)對進(jìn)入數(shù)據(jù)處理模塊的兩路聲音數(shù)據(jù)進(jìn)行極性互相關(guān)運(yùn)算和峰值檢測,從而得到兩路聲音的時(shí)延值。
圖2 互相關(guān)法聲音時(shí)延測量系統(tǒng)框圖
聲音采集模塊使用兩個(gè)微機(jī)電系統(tǒng)(micro electro mechanical systems,MEMS)數(shù)字麥克風(fēng)ICS-43432作為聲音傳感器同步采集兩路聲音信號,將聲音信號轉(zhuǎn)化為24位的數(shù)字信號,并通過I2S (inter-IC sound)接口傳入數(shù)據(jù)處理模塊;數(shù)據(jù)處理模塊以FPGA EP4CE6作為數(shù)據(jù)處理核心,F(xiàn)PGA將兩路聲音信號做極化處理,完成極性互相關(guān)運(yùn)算,并通過峰值檢測實(shí)現(xiàn)聲音時(shí)延的確定。
采用自頂向下的方法利用硬件描述語言Verilog在FPGA中完成極性互相關(guān)算法聲音時(shí)延測量數(shù)字電路的設(shè)計(jì)與實(shí)現(xiàn)。首先明確極性互相關(guān)測量聲音時(shí)延的實(shí)現(xiàn)步驟和功能模塊,然后采用Verilog的可綜合子集描述每個(gè)功能模塊的硬件行為,最后由邏輯綜合工具自動(dòng)完成從硬件描述語言到門級電路的轉(zhuǎn)換。利用極性互相關(guān)算法計(jì)算兩路聲音信號時(shí)延值的流程如圖3所示。首先,2個(gè)MEMS數(shù)字麥克風(fēng)分別采集2路聲音信號,當(dāng)2路聲音數(shù)據(jù)分別采集滿一幀時(shí)計(jì)算2路聲音數(shù)據(jù)的極性互相關(guān)函數(shù)值;然后進(jìn)行峰值檢測;最后利用峰值位置得出時(shí)延值。
圖3 一幀信號時(shí)延值計(jì)算流程圖
FPGA控制2個(gè)MEMS數(shù)字麥克風(fēng)同步采集2路聲音信號,兩MEMS數(shù)字麥克風(fēng)構(gòu)成左右聲道,按照I2S格式將X和Y兩路聲音數(shù)據(jù)傳入FPGA,2個(gè)MEMS數(shù)字麥克風(fēng)信號采集電路如圖4所示。根據(jù)數(shù)字麥克風(fēng)ICS-43432的頻率響應(yīng)和奈奎斯特采樣定理設(shè)置數(shù)字麥克風(fēng)采樣率為50 kHz,即WS (word select)時(shí)鐘頻率為50 kHz。設(shè)置一幀信號采集的數(shù)據(jù)點(diǎn)N為1 024,即一幀聲音信號的時(shí)長為20.48 ms。
圖4 信號采集電路
在實(shí)際基于FPGA對輸入數(shù)據(jù)進(jìn)行極化處理時(shí)可按以下方式進(jìn)行。若24位聲音數(shù)據(jù)的符號位為“1”,則表明此數(shù)據(jù)為負(fù)數(shù),用“0”表示;若24位聲音數(shù)據(jù)的符號位為“0”,則表明此數(shù)據(jù)為非負(fù)數(shù),用“1”表示。極化處理后的數(shù)據(jù)節(jié)省了隨機(jī)存取存儲(chǔ)器(random access memory,RAM)資源,同時(shí)可用同或操作代替乘法操作,避免了乘法器的使用,提高了數(shù)據(jù)處理速度,也使極性互相關(guān)運(yùn)算更易于在一般FPGA中用數(shù)字電路實(shí)現(xiàn)。
如圖2所示,配置4個(gè)雙口RAM用作數(shù)據(jù)緩沖,每個(gè)RAM數(shù)據(jù)位寬為1 bit、數(shù)據(jù)深度為2 048 bits。4個(gè)RAM分為兩組,X組2個(gè)雙口RAM,Y組2個(gè)雙口RAM,用以完成乒乓操作,保證數(shù)據(jù)可以連續(xù)地進(jìn)行極性互相關(guān)運(yùn)算。對于極化處理后的數(shù)據(jù),每來1個(gè)聲音數(shù)據(jù)進(jìn)行1次存儲(chǔ),所以RAM寫時(shí)鐘為50 kHz。為了極性互相關(guān)運(yùn)算讀取數(shù)據(jù)的方便,X組RAM從地址1024開始寫入,直到地址為2047,一幀數(shù)據(jù)1024點(diǎn)剛好寫完;Y組RAM從地址0開始寫入,直到地址為1023,一幀數(shù)據(jù)1024點(diǎn)剛好寫完。
極性互相關(guān)運(yùn)算是一個(gè)移位、同或、累加的過程,且X、Y兩路聲音各1 024個(gè)采樣點(diǎn)進(jìn)行極性互相關(guān)運(yùn)算會(huì)有2 048個(gè)極性互相關(guān)函數(shù)值,因此運(yùn)算過程中從RAM中讀取數(shù)據(jù)有一個(gè)地址循環(huán)的過程,并且其運(yùn)算過程是非常消耗時(shí)鐘的。為加快極性互相關(guān)運(yùn)算,設(shè)置RAM讀時(shí)鐘和極性互相關(guān)運(yùn)算時(shí)鐘為125 MHz??紤]到極性互相關(guān)運(yùn)算的復(fù)雜性,設(shè)計(jì)如圖5所示的狀態(tài)機(jī)以保證極性互相關(guān)算法的數(shù)字電路實(shí)現(xiàn)。
圖5 極性互相關(guān)運(yùn)算狀態(tài)機(jī)
狀態(tài)機(jī)有4個(gè)狀態(tài)變量,狀態(tài)機(jī)的開始狀態(tài)為S0狀態(tài),在S0狀態(tài)判斷兩路數(shù)據(jù)是否都存滿了1幀,當(dāng)未存滿1幀時(shí)繼續(xù)進(jìn)行數(shù)據(jù)采集與存儲(chǔ),當(dāng)兩路數(shù)據(jù)都存滿了1幀時(shí)進(jìn)入S1狀態(tài)。在S1狀態(tài)判斷2 048個(gè)極性互相關(guān)函數(shù)值是否計(jì)算完畢,當(dāng)計(jì)算完畢時(shí)進(jìn)入S3狀態(tài);當(dāng)未計(jì)算完畢時(shí)進(jìn)入S2狀態(tài)并給出2組RAM初始的讀地址,X組RAM初始地址從1024開始且每次初始地址加1,Y組RAM每次初始地址都為0。在狀態(tài)S2時(shí),每來1個(gè)時(shí)鐘2組RAM讀地址各加1,并在下個(gè)時(shí)鐘上升沿時(shí)分別讀取2個(gè)RAM的輸出數(shù)據(jù)進(jìn)行同或操作,然后對同或結(jié)果進(jìn)行累加;當(dāng)X組讀地址等于最后1個(gè)地址時(shí)進(jìn)入S1狀態(tài),表明1個(gè)延時(shí)對應(yīng)的極性互相關(guān)函數(shù)值計(jì)算完畢,否則繼續(xù)在S2狀態(tài)進(jìn)行地址遞增。S3狀態(tài)時(shí),所有時(shí)延對應(yīng)的互相關(guān)值計(jì)算完畢。
對兩路數(shù)據(jù)各1 024點(diǎn)做極性互相關(guān)運(yùn)算時(shí),首先將第1個(gè)時(shí)延值所對應(yīng)的極性互相關(guān)值認(rèn)為是極性互相關(guān)函數(shù)的最大值,然后在每1個(gè)時(shí)延所對應(yīng)的極性互相關(guān)值計(jì)算完畢時(shí),與極性互相關(guān)最大值作比較,若大于極性互相關(guān)最大值,則認(rèn)為它是新的極性互相關(guān)最大值并記錄其位置序號。如此每來1個(gè)新的極性互相關(guān)值就比較1次,當(dāng)極性互相關(guān)計(jì)算完畢時(shí)可得到峰值及其位置序號,并由峰值位置得到時(shí)延值。
利用Verilog硬件描述語言設(shè)計(jì)極性互相關(guān)運(yùn)算電路后,在ModelSim中進(jìn)行仿真測試。仿真時(shí)設(shè)置互相關(guān)運(yùn)行時(shí)鐘為125 MHz,數(shù)字麥克風(fēng)采樣率為50 kHz。利用Testbench (測試平臺(tái))代碼將數(shù)字麥克風(fēng)預(yù)先采集到的兩路聲音原始數(shù)據(jù)讀入以代替兩路聲音信號的采集,然后進(jìn)行取符號、RAM寫入/讀取和極性互相關(guān)運(yùn)算,仿真結(jié)果如圖6所示。并且在Matlab中調(diào)用互相關(guān)函數(shù)計(jì)算兩路聲音極性數(shù)據(jù)的時(shí)延值作為對比參照。
圖6 極性互相關(guān)運(yùn)算仿真結(jié)果
由仿真結(jié)果可以看到,兩路聲音數(shù)據(jù)各1 024點(diǎn)進(jìn)行極性互相關(guān)運(yùn)算的運(yùn)算時(shí)間為16.785 416 ms,第1幀兩路聲音數(shù)據(jù)的時(shí)延運(yùn)算結(jié)果為60 μs,且Matlab中調(diào)用互相關(guān)函數(shù)分別計(jì)算各幀極性互相關(guān)時(shí)延結(jié)果和ModelSim仿真中各幀運(yùn)算結(jié)果相同。根據(jù)極性互相關(guān)仿真結(jié)果和Matlab極性互相關(guān)計(jì)算結(jié)果可知,本方案設(shè)計(jì)的極性互相關(guān)運(yùn)算電路運(yùn)算結(jié)果與Matlab計(jì)算結(jié)果一致。
為了驗(yàn)證方案的實(shí)際聲音時(shí)延測量效果,在室內(nèi)進(jìn)行了聲音時(shí)延測量實(shí)驗(yàn)。將極性互相關(guān)時(shí)延運(yùn)算電路固化在FPGA中,使用普通可聽聲作為測試聲源,聲源與兩數(shù)字麥克風(fēng)在同一條直線上,且聲源不在兩數(shù)字麥克風(fēng)之間,如圖1所示。兩數(shù)字麥克風(fēng)采集兩路聲音信號,極性互相關(guān)運(yùn)算電路實(shí)際測算出兩路聲音信號的時(shí)延值,經(jīng)過多次測量取平均值;并將采集到的聲音信號原始數(shù)據(jù)導(dǎo)入到Matlab中,調(diào)用互相關(guān)函數(shù)計(jì)算出兩路聲音數(shù)據(jù)的時(shí)延值。調(diào)整兩數(shù)字麥克風(fēng)之間的距離進(jìn)行相同實(shí)驗(yàn),得到不同間距下的時(shí)延結(jié)果,測量結(jié)果如表1所示。根據(jù)實(shí)驗(yàn)結(jié)果顯示,在室內(nèi)條件下,設(shè)計(jì)的時(shí)延測量電路實(shí)際測算出的時(shí)延值與Matlab計(jì)算出的時(shí)延值基本一致。
在基于TDOA的聲源定位算法中求得若干組時(shí)延值就可根據(jù)聲源與麥克風(fēng)陣列的幾何關(guān)系推導(dǎo)出聲源的位置信息。將此聲音時(shí)延測量方案應(yīng)用于實(shí)際基于麥克風(fēng)陣列的聲源定位系統(tǒng)中去估計(jì)聲源的方位角,設(shè)計(jì)如圖7所示的麥克風(fēng)陣列聲源定位系統(tǒng)原型機(jī)。MEMS數(shù)字麥克風(fēng)組成麥克風(fēng)陣列采集多路聲音信號后,將多路聲音信號送入FPGA實(shí)現(xiàn)的聲源定位數(shù)字運(yùn)算電路中,從而運(yùn)算得到聲源的方位角信息。
(b)反面圖7 麥克風(fēng)陣列聲源定位系統(tǒng)原型機(jī)
在室內(nèi)用普通可聽聲對聲源定位系統(tǒng)進(jìn)行測試,經(jīng)過10次測量取平均值得到1個(gè)方位角,然后每隔45°移動(dòng)聲源位置,得到多組聲源定位結(jié)果,方位角定位結(jié)果如表2所示。從表2可以看出,在室內(nèi)條件下,方位角測量結(jié)果的絕對誤差在±3°以內(nèi),表明設(shè)計(jì)的聲音時(shí)延測量電路在聲源定位系統(tǒng)中運(yùn)行良好。
表2 聲源定位結(jié)果 (°)
在研究互相關(guān)算法理論的基礎(chǔ)上,提出了一種應(yīng)用于聲源定位系統(tǒng)中的互相關(guān)法聲音時(shí)延測量的數(shù)字電路實(shí)現(xiàn)方案,該方案采用MEMS數(shù)字麥克風(fēng)作為聲音傳感器采集聲音信號,在FPGA中利用硬件描述語言Verilog設(shè)計(jì)了互相關(guān)運(yùn)算數(shù)字電路。基于FPGA與MEMS數(shù)字麥克風(fēng)的純數(shù)字電路方案來處理多路聲音信號,提高了測量電路的穩(wěn)定性與可靠性,減少了軟件方案運(yùn)行速度慢、難于采集和處理多路聲音信號等問題。通過Matlab和FPGA驗(yàn)證了該方案進(jìn)行聲音時(shí)延測量的準(zhǔn)確性,將此方案應(yīng)用于實(shí)際的基于麥克風(fēng)陣列的聲源定位系統(tǒng)中,測得的聲音時(shí)延滿足聲源定位系統(tǒng)對時(shí)延的要求,系統(tǒng)聲源定位效果良好。同時(shí)該互相關(guān)法時(shí)延測量數(shù)字電路方案對其他工業(yè)領(lǐng)域的時(shí)間延遲測量也具有參考意義。