萬夢時,吳小培,張 超
(安徽大學 計算機科學與技術(shù)學院,合肥 230601)
基于麥克風陣列的聲源定位是利用麥克風陣列拾取多路聲音信號,結(jié)合聲源和陣列結(jié)構(gòu)之間的幾何關(guān)系,得到聲源的位置信息.由于麥克風陣列在時域和頻域的基礎(chǔ)上增加了空域信息,因此對聲音信息的處理能力明顯增強[1].其優(yōu)勢主要體現(xiàn)于:具有空間選擇性、能夠應(yīng)用于聲 源自動跟蹤、能夠識別同時發(fā)生的多個聲源以及用于近場測距等.
目前的聲源定位研究主要可分為二維空間定位與三維空間定位、近場定位與遠場定位、方向定位與距離定位等幾類.其中,基于到達時間差(Time Differences Of Arrival,TDOA)的聲源定位算法在視頻會議、車載導航、機器人、醫(yī)療診斷及海洋探測等領(lǐng)域的應(yīng)用極為廣泛[2–4].基于TDOA的定位方法是一種雙步定位法.該方法首先進行時延估計(Time Delay Estimation,TDE)估計聲源信號到達麥克風對的時間差,進而通過幾何關(guān)系來確定聲源的位置.
上世紀八十年代,Knapp和Carter[5]提出了利用互相關(guān)函數(shù)估計時延的廣義互相關(guān)法(Generalized Cross Correlation,GCC),將兩路語音信號的互功率譜進行濾波后提取峰值作為時延估計值.GCC算法得到了廣泛的應(yīng)用,而鑒于GCC算法受混響的影響較大,一些學者對其做了改進,Champagne[6]提出的倒譜預(yù)濾波(CEpstral Prefiltering,CEP)技術(shù)先對信號進行預(yù)濾波,有目的地去除信號中受混響影響較嚴重的部分,再將預(yù)濾波后的信號通過GCC方法進行時間延遲估計;此后,又陸續(xù)出現(xiàn)了基于子空間分解的自適應(yīng)特征值分解(Adaptive Eigenvalue Decomposition Algorithm,AEDA)[7]和基于聲學傳遞函數(shù)比(Acoustic Transfer Functions ratio,ATF)[8]來進行時延估計的方法,能夠有效克服混響和噪聲的影響.
1994年Omologo[9]提出了互功率譜相位(Crosspower Spectrum Phase,CSP)算法.這種方法對中低混響有很好的抑制作用,吸引了一大批學者的關(guān)注,有一些文獻對其進行了改進,出現(xiàn)了很多基于CSP算法的時延估計算法和應(yīng)用場景[10–12].其中,文獻[13]提出了一種功率譜限幅后再進行反傅立葉變換的改進自相關(guān)方法.采用相關(guān)峰跟蹤搜索的方法實現(xiàn)了多徑時延時間歷程的自動提取,這在無人系統(tǒng)中有較好應(yīng)用前景.文獻[14]將時間細化逆傅里葉變換法應(yīng)用到互功率譜相關(guān)算法中,通過相關(guān)峰細化計算子帶平移后互功率譜的相關(guān)函數(shù),并對各頻帶的峰值函數(shù)使用高斯函數(shù)進行尖銳化處理,使得頻帶不重疊的多個不同聲源的方位得以進行快速精確.該方法解決了在小孔徑、小陣元數(shù)接收基陣的情況下的多目標方位的精確快速估計問題,適用于小孔徑的探測節(jié)點與具有低功耗限制要求的平臺使用.文獻[15]采用了互功率譜-平滑相干變換(CSP-SCOT)聯(lián)合加權(quán)時延估計,對聲源進行空間搜索.仿真實驗結(jié)果表明,在同等混響或噪聲條件下,此方法其定位優(yōu)于CSP和SCOT算法,且適于小型麥克風陣列.
相關(guān)函數(shù)法對于功率譜平坦的信號能取得良好性能,在實際生活中,許多噪聲的功率譜都包含有較強線譜或窄帶分量,其性能急劇下降.本文針對CSP算法在強混響與低信噪比環(huán)境下效果差的情況,提出了一種改進的CSP算法.算法主要針對時延估計錯誤的語音幀,篩選出不合理的估計結(jié)果,更新算法中的加權(quán)因子等參數(shù)后再次估計,得到合理時延值并通過多幀加權(quán)平滑與麥克風校準的方式來提高算法的抗噪能力.
對于由I個麥克風組成的陣列,給定一個聲源,在理想環(huán)境下第i個麥克風在t時刻接收到的信號可表示為:

其中,αi(αi<1)是聲波傳播的衰減系數(shù),τi為聲源到達第i個麥克風的傳播時延,vi(t)表示加性噪聲,符號“*”為卷積運算,s(t)為聲源信號,ni(t)為混響噪聲.
顯然,麥克風陣列中的各陣元信號具有相關(guān)性.第i、j個麥克風信號的互相關(guān)函數(shù)如下:

其中,E[·]為求期望.
假設(shè)噪聲與聲源信號不相關(guān),式(2)可簡化為:

其中,Rsisj(τ)為聲源信號的自相關(guān)函數(shù),Rvivj(τ)為噪聲信號vi(t)和vj(t)的互相關(guān)函數(shù).
由自相關(guān)函數(shù)的性質(zhì)可知,當τ-τij=0,即τ=τij時,Rxixj(τ)取得最大值.故只要找到信號xi(t)與xj(t)互相關(guān)函數(shù)的最大值,便能求出麥克風i和麥克風j之間的時延.
這就表明,TDOA值可以從互相關(guān)函數(shù)峰值處得到.但是在現(xiàn)實環(huán)境中,聲音會經(jīng)過多次反射再次到達麥克風,故麥克風接收到的語音信號由聲源與噪聲的直達波和反射波組成.這些反射波的存在會形成偽峰,嚴重影響時延估計的準確性(如圖1所示).
CSP算法就是基于上述情況所提出來.對式(3)做傅里葉變換得到xi(t)與xj(t)的互功率譜:

其中,PXiXj(ω)、PSiSj(ω)、PViVj(ω)分別為Rxixj(τ)、Rsisj(τ)、Rvivj(τ)的功率譜函數(shù).定義相位加權(quán)函數(shù)為[11]:

圖1 互相關(guān)函數(shù)的峰值被偽峰淹沒

其中,1/|PXiXj(ω)|加權(quán)相當于白化濾波,但當XiXj(ω)≠ΦXiXj(ω)時,所得相關(guān)函數(shù)并非理想的沖擊函數(shù),會造成TDOA檢測困難;并且,在信號能量較小時分母會趨于零,從而會加大誤差[16].文獻[17]在分母中引入一個常數(shù)r來避免這一現(xiàn)象,如式(6)所示.加權(quán)的主要思想就是根據(jù)信噪比來調(diào)節(jié)加權(quán)值,通過r來弱化CSP中信噪比低的語音,而增加信噪比高的那部分語音的比重.

CSP算法計算量小,具備良好的跟蹤計算能力,適用于實時系統(tǒng).目前已經(jīng)證明CSP算法在中等強度噪聲、混響的環(huán)境下性能較好[18].但在實驗過程中發(fā)現(xiàn),當處于低信噪比、高混響等復(fù)雜環(huán)境時,CSP算法準確率急劇下降,誤差明顯增加.本文的目的在于減少CSP算法在復(fù)雜環(huán)境下的錯誤率,使其既滿足于實時系統(tǒng),又能確保算法的準確性.
圖2所示為本文所提算法的流程圖.由于語音信號的短時平穩(wěn)性,首先對采集到的語音信號進行預(yù)處理,得到語音發(fā)生段[B,E].
對[B,E]內(nèi)的前M幀信號使用CSP算法估計時延,得到第k(B<k<B+M)幀信號的時延值tdk(p)(p=1,2,3).為提高CSP算法正確率,判斷tdk(p)是否處于合理時延區(qū)間[C1,C2](此區(qū)間由公式(12)計算得到)之間.在此區(qū)間內(nèi)的時延值予以通過,反之,更新加權(quán)因子r再次計算.若2次更新后得到的時延值皆不在合理區(qū)間內(nèi),則使用第一次計算得到的時延值tdk(1)與上一幀時延值τk-1加權(quán)作為當前幀的時延值τk.依次得到M幀時延值τ1…τm,最后對這M個時延值求均值,作為此次聲源的時延值τ.

圖2 改進CSP算法流程圖
本文對語音信號的預(yù)處理包括歸一化、分幀、加窗、端點檢測(Voice Activity Detection,VAD)等幾個步驟.
首先將雙通道語音信號進行歸一化處理,歸一化后樣本數(shù)據(jù)數(shù)值范圍是[–1,1].然后,對歸一化的數(shù)據(jù)進行分幀、加窗處理,用于減小語音截斷誤差,其中,幀長為512,幀移為64,窗類型為漢明窗.最后,對分幀加窗后的語音信號進行端點檢測,以降低算法運算量.端點檢測后分別得到語音開始幀、結(jié)束幀以及語音發(fā)生段[B,E],如圖3所示,當B1=B2時,B=B1=B2;當B1≠B2時,B=max(B1,B2).同理,當E1=E2時,E=E1=E2;當E1≠E2時,E=min(E1,E2).
當語音混有強噪聲、強混響時,互功率譜函數(shù)的計算受噪聲和混響的影響出現(xiàn)誤差,進而影響峰值檢測.為了減少錯誤的時延估計值,降低無效的計算量,我們引入一個合理時延區(qū)間,對所有無效時延進行剔除,從而提高算法計算效率與時延精度.
如圖4示,設(shè)聲源S到麥克風m2的夾角為θ,麥克風m1與m2間的距離為d12,有:


圖3 VAD語音發(fā)生段檢測

圖4 聲源到兩路麥克風信號
其中,e為從麥克風m1向Sm2作垂線的交點,lem2為e到m2的距離.
一般情況下,聲源S到麥克風陣列的距離遠大于陣列孔距d12.因此,用曲線m1’m2近似代替直線m1e,式(7)可化為:

其中,lm1′m2為麥克風m1的映射m1’到麥克風m2的距離,τ為麥克風m1與m2的時延,c為聲速.
為了方便表示,用采樣點數(shù)N來表示時延的大小,N與τ的關(guān)系為:

其中,Fs為采樣頻率.
將式(9)帶入式(8),且由-1≤cosθ≤1可得:

考慮到由曲線m1’m2代替直線m1e的誤差,當聲源與麥克風陣列距離越近時誤差越大.由于陣列孔距較小,忽略聲源與麥克風陣列的距離小于孔距等極少數(shù)情況.當聲源到麥克風陣列距離與陣列孔距相等時,如圖5所示,誤差達到極大值,此時誤差距離為孔距d12的二分之一.

圖5 近場誤差
則更新式(10)為:

由此得到合理時延區(qū)間[C1,C2],其中C1=–3d12·Fs/2c,C2=3d12·Fs/2c.
CSP算法中加權(quán)因子r(0.5≤r≤1)的選取極為重要.r值過大會使噪聲過濾效果很差,r值過小又會過度加權(quán),造成峰值檢測不正確.一般來說,r的大小由經(jīng)驗決定.為了確定本文改進算法中r的有效值,本文對100組不同信噪比的語音信號進行了分析與統(tǒng)計.對每組語音信號分別計算r為0.65、0.70、0.75、0.80、0.85、0.90、0.95、1時的時延結(jié)果,并與真實時延對比,記錄下最為接近真實值的估計結(jié)果對應(yīng)的r值.獲得最多次最小誤差的r值即為最佳加權(quán)因子,統(tǒng)計結(jié)果表1所示.

表1 不同r值取得最小誤差的次數(shù)
表1中為各r值的估計結(jié)果與真實值最接近的次數(shù).從圖中可以看出,r=0.85時取得最小誤差的次數(shù)最多,明顯高于其他值.0.80與0.70次之,分別排在第二位與第三位.故本文使用0.85作為加權(quán)因子r的初始值、0.80和0.70為更新值.
CSP算法只需要一幀語音信號就可以估計出時延,但VAD算法參數(shù)的變化使檢測到的語音發(fā)生段[B,E]可能不同.為了減少VAD算法及噪聲對時延估計結(jié)果的影響,本文使用多幀時延加權(quán)平均的方法來提高算法的魯棒性,即對語音發(fā)聲段內(nèi)的前M幀信號取均值.
M的取值是我們要考慮的問題.M太小,幀數(shù)太少達不到加權(quán)的效果;M太大又會降低算法執(zhí)行效率.為了得到合理的M值,本文通過對100組語音信號進行計算,得到M等于5時效果最佳.由此可得語音信號的時延值τ為:

其中,τ1,…,τ5分別為語音發(fā)生段前5幀信號的時延.
為了驗證本文所提算法的有效性,本文分別進行了仿真實驗與真實實驗.
實驗首先仿真真實房間合成不同信噪比的帶噪語音信號,再同時對這些語音信號使用經(jīng)典CSP算法和本文改進算法完成時延估計,并對兩者的估計結(jié)果進行對比分析.
本文使用鏡像源方法[19]仿真房間脈沖響應(yīng)函數(shù),再結(jié)合噪聲位置合成信噪比分別為0 db、5 db、10 db、15 db與20 db的帶噪語音信號.對這些信號分別使用本文改進算法與經(jīng)典CSP算法估計時延,實驗中聲源時延為2.88,設(shè)算法估計結(jié)果ND與2.88相差超過1為錯誤估計,即:當|ND–2.88|≤1為正確估計,當|ND–2.88|>1為錯誤估計.結(jié)果如表2所示.

表2 算法改進前后正確率(%)
由表2可以看出,傳統(tǒng)CSP算法在高信噪比環(huán)境下正確率較高,一些組甚至超過了90%;但在低信噪比環(huán)境下正確率大大下降,例如0 db時算法正確率只有58%.相較于傳統(tǒng)CSP 算法,本文改進算法在各信噪比環(huán)境下正確率皆有提升.在10 db、15 db和20 db等較高信噪比環(huán)境下的正確率達到95%以上;而對5 db、0 db等低信噪比環(huán)境下分別提高了16%與21%,平均達到了較高的算法正確率.
通過Matlab仿真初步驗證了本文改進算法的有效性,下面將進一步驗證算法在真實語音環(huán)境下的效果.首先,使用雙通道麥克風陣列在真實房間內(nèi)采集了250組語音信號,分別使用CSP算法與本文改進算法進行分析.其次,計算麥克風陣列的誤差函數(shù),通過麥克風陣列誤差的消除進一步提升算法正確率.
3.2.1 信號采集
本文使用北京東方噪聲技術(shù)研究所研發(fā)的錄音設(shè)備與錄音軟件進行實時錄制,錄音設(shè)備和軟件如圖6所示.

圖6 信號采集設(shè)備
實驗使用雙通道直線型麥克風矩陣,麥克風間距0.6 m,陣列距地面75 cm.實驗室房間長7.28 m,寬5.56 m,高3.4 m.以房間左上角建立三維坐標,麥克風m1、m2坐標分別為(3,0.6,0.75)與(3.6,0.6,0.75).
受試者首先站在靠近麥克風m2的角落處,當錄音開始時,實驗者從麥克風m2向麥克風m1方向處走動,并在過程中,在設(shè)定好的位置S1至S5處拍手(這些位置分別位于麥克風陣列的π/6、π/3、π/2、2π/3、5π/6處),走完一圈為一組語音信號,重復(fù)錄制250遍,共得到250組語音信號.錄制過程如圖7所示.

圖7 信號采集模型
3.2.2 麥克風校準
較之仿真室內(nèi)環(huán)境,真實房間的聲學環(huán)境更為復(fù)雜.除了環(huán)境噪聲、室內(nèi)混響等因素外,房間大小、窗簾和桌椅等室內(nèi)布置和受試者身體遮擋等許多因素會影響麥克風定位的精度.因此,對于不同的房間,在定位之前應(yīng)進行麥克風校準工作,以降低房間變化帶來的定位誤差.本文在安靜環(huán)境下錄制語音信號進行定位實驗,并與預(yù)設(shè)的聲源實際角度進行比較,得到麥克風陣列誤差值.
實驗設(shè)計如下:選擇夜晚等安靜時間,緊閉實驗室門窗、清空實驗室中阻礙聲音傳播的物體;在以麥克風陣列為中心的0—π/2扇形區(qū)域內(nèi)每隔π/9設(shè)置一個測量點,共計9個測量點;受試者從第一個測量點依次走到第9個測量點并在每個測量點拍手完成一次錄制.重復(fù)錄制30次,得到30組雙通道語音信號.

圖8 麥克風陣列誤差校準
使用本文改進算法對上述30組雙通道語音信號計算時延,與實際值比較得到麥克風陣列誤差值,如圖8所示.利用Matlab中plotfit函數(shù)對誤差均值擬合得到誤差函數(shù),并由麥克風陣列的對稱性可得0—π內(nèi)的麥克風陣列誤差函數(shù).
3.2.3 實驗結(jié)果
對上述采集到的250組語音信號分別使用CSP算法、本文改進算法和經(jīng)過麥克風校準后的本文改進CSP算法進行時延估計,設(shè)算法估計結(jié)果ND與真實值之差的絕對值大于1即為錯誤估計.分別記錄下三種情況的算法錯誤率,如表3所示.

表3 算法改進前后錯誤率(%)
表3可以看出,改進后CSP算法的錯誤率比改進前有明顯降低,而經(jīng)過麥克風校準的改進算法錯誤率比之又有下降.不同角度的算法錯誤率各不相同,π但無論算法改進前后,在接近π/2時錯誤率最低,而接近0與π的兩端角度則錯誤率較大.改進后算法每組的錯誤率均有降低,其中5π/6組錯誤率下降最多,達到11.2%的提升效果;π/2組在改進后只有3.2%的錯誤率,擁有極高的算法精度.經(jīng)過對麥克風陣列校準后的改進CSP算法比未經(jīng)校準的算法正確率有提升,其中錯誤率最大的一組為π/6組的4.1%,最小的π/2組則只有1.3%.相比于經(jīng)典CSP算法,麥克風校準后的改進CSP 算法平均降低了10.2%的錯誤率,其中5π/6組甚至降低了15.3%,大大提升了算法正確率,實驗結(jié)果表明本文所提改進CSP算法的有效性.
本文針對CSP算法在低信噪比語音環(huán)境下算法錯誤率大的情況,提出了剔除錯誤估計來提高正確率的改進算法.首先通過語音環(huán)境和麥克風陣列信息計算出麥克風陣列誤差函數(shù)、合理時延區(qū)間和最佳加權(quán)因子等.其次使用CSP算法估計時延,挑出不在合理時延區(qū)間內(nèi)的估計值,改變加權(quán)因子等參數(shù)后再次估計.若重復(fù)2次估計后的時延值均不合理,則利用前一幀時延值與第一次時延估計值加權(quán)作為當前幀的時延值.最后消去麥克風陣列誤差并利用5幀時延平滑得到此聲源的時延估計,進而得出聲源位置信息.通過語音仿真實驗與真實環(huán)境下錄制的語音信號實驗皆驗證了本文改進算法的有效性,改進后算法正確率較改進前平均提高了10.2%,改善了CSP算法在復(fù)雜語音環(huán)境下的算法精度,提高了CSP算法的正確率與魯棒性.