国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SRP-PHAT 的實(shí)時(shí)聲源定位算法設(shè)計(jì)與實(shí)現(xiàn)

2021-08-02 07:40
軟件導(dǎo)刊 2021年7期
關(guān)鍵詞:麥克風(fēng)聲源波束

劉 生

(南京熊貓電子裝備有限公司,江蘇南京 210046)

0 引言

近年來(lái),隨著人工智能及交互技術(shù)的發(fā)展,越來(lái)越多智能設(shè)備可以實(shí)現(xiàn)人機(jī)對(duì)話。為了提高自動(dòng)語(yǔ)音識(shí)別率,業(yè)內(nèi)通常使用波束形成技術(shù)進(jìn)行定向收音,獲得了較好的收音效果[1]。針對(duì)一些如智能音箱、機(jī)器人等智能對(duì)話設(shè)備,為了實(shí)現(xiàn)全向的高效收音,通常會(huì)在對(duì)話開(kāi)始時(shí)利用聲源定位技術(shù)獲得聲音的方向,并將其作為參數(shù)傳給后續(xù)的波束形成部分進(jìn)行處理。

常用的聲源定位算法主要有基于最大可控響應(yīng)功率的波束形成方法、基于高分辨率譜估計(jì)的方法與基于時(shí)延估計(jì)的定位方法[2-4]。基于相位變換加權(quán)的可控波束響應(yīng)功率(Steered Response Power-Phase Transform,SRP-PHAT)聲源定位算法由于具有較強(qiáng)的魯棒性,可實(shí)現(xiàn)真實(shí)環(huán)境中的聲源定位,因此也得到了廣泛應(yīng)用[5-6]。由于算法運(yùn)算量較大,在嵌入式系統(tǒng)中,為提高算法的實(shí)時(shí)性,一般使用FPGA 或?qū)S肅MOS 芯片進(jìn)行算法實(shí)現(xiàn)[7-8]。在智能語(yǔ)義交互產(chǎn)品中,目前的主流技術(shù)是使用Linux 或Android 系統(tǒng)進(jìn)行網(wǎng)絡(luò)通信,連接語(yǔ)音對(duì)話服務(wù)器,實(shí)現(xiàn)語(yǔ)義識(shí)別、語(yǔ)義處理及語(yǔ)音合成。這部分功能需要使用通用ARM 處理器進(jìn)行實(shí)現(xiàn),如果使用FPGA 或?qū)S肅MOS 芯片實(shí)現(xiàn)語(yǔ)音定位及前端語(yǔ)音處理部分功能,勢(shì)必會(huì)提高產(chǎn)品復(fù)雜度,成本也會(huì)隨之升高。本文基于ARM 平臺(tái)處理器,使用Python 及C++語(yǔ)言對(duì)算法進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。將原來(lái)利用專用芯片實(shí)現(xiàn)的前端語(yǔ)音功能在嵌入式ARM 平臺(tái)上重新進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),對(duì)產(chǎn)品集成度進(jìn)行了提升。

1 SPR-PHAT 算法原理

對(duì)空間中特定位置或方向信號(hào)進(jìn)行定向增強(qiáng)的技術(shù)是陣列信號(hào)處理中的一項(xiàng)關(guān)鍵技術(shù)。這些技術(shù)大多基于波束形成理論,主要通過(guò)麥克風(fēng)陣列捕捉聲音并進(jìn)行相關(guān)信號(hào)處理。傳統(tǒng)意義上的波束形成可通過(guò)濾波求和處理,在對(duì)麥克風(fēng)信號(hào)求和以產(chǎn)生定向信號(hào)聚焦之前,會(huì)在時(shí)域?qū)溈孙L(fēng)信號(hào)進(jìn)行濾波。濾波器通常會(huì)在波束形成過(guò)程中進(jìn)行動(dòng)態(tài)調(diào)整,以增強(qiáng)所需的信號(hào)源,同時(shí)衰減其他信號(hào)源。一種最簡(jiǎn)單的對(duì)信號(hào)進(jìn)行濾波處理的方法就是對(duì)源信號(hào)進(jìn)行時(shí)間偏移,該偏移值為各個(gè)陣列間的信號(hào)傳播延遲,這種方法被稱為延遲求和(Delay-and-Sum)波束形成[9-10]。通過(guò)延遲麥克風(fēng)信號(hào),將各通道的源信號(hào)在時(shí)間上對(duì)準(zhǔn),之后對(duì)所有通道的源信號(hào)進(jìn)行求和。應(yīng)用更復(fù)雜濾波求和技術(shù)的濾波器以及其他信號(hào)增強(qiáng)處理算法通常都是基于這種時(shí)間對(duì)準(zhǔn)方法。

波束形成技術(shù)在麥克風(fēng)陣列中得到了廣泛應(yīng)用[11-13]。對(duì)于這種應(yīng)用,濾波求和技術(shù)不僅需要抑制背景噪聲以及不需要的信號(hào),同時(shí)還必須保證想要的信號(hào)通過(guò)濾波器后不能失真。當(dāng)將波束形成技術(shù)應(yīng)用于聲源定位時(shí),這些濾波器只需在完成波束形成運(yùn)算后,對(duì)特定方向的信號(hào)進(jìn)行功率增強(qiáng)即可。本文使用的PHAT 算法正是利用了該特性,使用可控波束響應(yīng)功率算法對(duì)所有可能的相位變換進(jìn)行求和運(yùn)算。SRP-PHAT 可直接對(duì)多路麥克風(fēng)信號(hào)進(jìn)行變換處理,利用多個(gè)麥克風(fēng)提高位置估計(jì)的準(zhǔn)確性。

SRP 可以使用塊處理方案加以實(shí)現(xiàn),該方案使用短時(shí)數(shù)字傅里葉變換作為麥克風(fēng)信號(hào)頻譜的估計(jì)[14-15]。將陣列信號(hào)在時(shí)域上分割成多個(gè)塊,并計(jì)算每個(gè)塊的轉(zhuǎn)向響應(yīng)。信號(hào)塊的數(shù)字傅里葉用Xm,b[k]表示,其中m 是麥克風(fēng)索引,b 是塊索引,Gm,b[k]是麥克風(fēng)m 離散時(shí)間濾波器的傅里葉變換,會(huì)在每個(gè)塊b 中單獨(dú)進(jìn)行計(jì)算。塊b 的轉(zhuǎn)向響應(yīng)可定義如下:

[k,Δ1...ΔM)是索引為k 的離散頻率函數(shù)和連續(xù)的轉(zhuǎn)向延遲(Δ1...ΔM表示陣列所有連續(xù)的轉(zhuǎn)向延遲)。理論上需要對(duì)信號(hào)中所有頻率段的數(shù)據(jù)進(jìn)行處理,但在實(shí)際使用過(guò)程中,一般會(huì)選擇一個(gè)或多個(gè)頻率段的數(shù)據(jù)進(jìn)行處理。同時(shí),盡管M 個(gè)轉(zhuǎn)向延遲是連續(xù)的,但在實(shí)際使用過(guò)程中,會(huì)在預(yù)定義的一組空間位置或方向進(jìn)行采樣,并通過(guò)對(duì)K 個(gè)離散頻率進(jìn)行求和,從而獲得轉(zhuǎn)向響應(yīng)功率:

離散濾波器如下:

將式(3)代入式(1),相位變換加權(quán)的可控響應(yīng)表示為:

將式(4)代入式(2),可獲得相位變換加權(quán)的可控響應(yīng)功率SRP-PHAT 為:

2 算法實(shí)現(xiàn)

為方便計(jì)算,首先對(duì)多個(gè)通道的麥克風(fēng)數(shù)據(jù)進(jìn)行DFT變換,根據(jù)麥克風(fēng)的物理參數(shù)計(jì)算在某特定方向上的可控時(shí)延;然后基于音頻數(shù)據(jù)的DFT 以及可控時(shí)延,結(jié)合公式(5),可求得該方向所有頻率的SRP-PHAT;最后重復(fù)上述運(yùn)算,直到獲得所有方向的SRP-PHAT 值,并選取最大值對(duì)應(yīng)的方向作為音源方向。具體流程如圖1 所示。

Fig.1 Flow of SRP-PHAT algorithm implementation圖1 SRP-PHAT 算法實(shí)現(xiàn)流程

上述程序可利用Python 的NumPy 庫(kù)方便地實(shí)現(xiàn)如矩陣內(nèi)積、點(diǎn)積以及共軛轉(zhuǎn)置等諸多矩陣運(yùn)算,并可使用NumPy 庫(kù)中的fft 函數(shù)實(shí)現(xiàn)傅里葉變換[16]。但如果要在嵌入式平臺(tái)上運(yùn)行,考慮到部署方便的問(wèn)題,實(shí)驗(yàn)一般使用C++實(shí)現(xiàn)。由于在算法中需要使用傅里葉變換、線性代數(shù)等運(yùn)算,必須使用相應(yīng)的數(shù)學(xué)庫(kù)。本文使用了Xtensor、Xtl、OpenBLAS 等數(shù)學(xué)運(yùn)算庫(kù)[17-19]。Xtensor 是一個(gè)C++庫(kù),用于多維數(shù)組表達(dá)式的數(shù)值計(jì)算,可提供支持延遲廣播的可擴(kuò)展表達(dá)式系統(tǒng),Xtensor 提供的API 遵循C++標(biāo)準(zhǔn)。

基于Xtensor 庫(kù)有很多擴(kuò)展包,其中Xtensor-fftw 主要實(shí)現(xiàn)了xt::fftw 函數(shù)以進(jìn)行fft 運(yùn)算。fftw 是一個(gè)用來(lái)計(jì)算一維或多維離散傅里葉變換(DFT)的C 語(yǔ)言函數(shù)庫(kù),其支持輸入任意大小的實(shí)數(shù)及復(fù)數(shù)運(yùn)算。Xtensor-blas 是對(duì)Xtensor 庫(kù)的擴(kuò)展,基于FLENS 項(xiàng)目的CXXBLAS 和cxxla?pack 將BLAS 與LAPPACK 庫(kù)進(jìn)行綁定,具有計(jì)算逆矩陣、求特征值、解線性方程組及求解行列式等功能。其提供的函數(shù)接口基本可直接與NumPy 庫(kù)兼容,因而方便程序移植。上述幾個(gè)庫(kù)還依賴Xtl(提供了基本的科學(xué)計(jì)算函數(shù)庫(kù))和OpenBLAS(Basic Linear Algebra Subprograms 基礎(chǔ)線性代數(shù)子程序庫(kù)),這些庫(kù)之間的關(guān)系如圖2 所示。

Fig.2 Algorithm library structure圖2 算法庫(kù)結(jié)構(gòu)

3 實(shí)驗(yàn)分析

3.1 實(shí)驗(yàn)環(huán)境

在性能對(duì)比實(shí)驗(yàn)中,主要對(duì)算法的準(zhǔn)確性及實(shí)時(shí)性進(jìn)行分析。通過(guò)選取編程語(yǔ)言、運(yùn)行環(huán)境、頻率范圍、采樣時(shí)間等幾種不同變量進(jìn)行多組組合實(shí)驗(yàn),以獲得這些參數(shù)對(duì)算法準(zhǔn)確性及性能的影響。實(shí)驗(yàn)采用的錄音設(shè)備為Re?Speaker Core v2.0[20],該麥克風(fēng)陣列排列以及實(shí)驗(yàn)時(shí)收音方向如圖3 所示。

Fig.3 Microphone array arrangement and sound reception diagram圖3 麥克風(fēng)陣列排列及收音示意圖

3.2 準(zhǔn)確性實(shí)驗(yàn)

準(zhǔn)確性實(shí)驗(yàn)主要對(duì)算法定位的準(zhǔn)確性進(jìn)行測(cè)試。定義中心到MIC 的方向?yàn)?°,中心到MIC4 的方向?yàn)?80°,錄制在180°方向、距離約50cm 位置處人聲閱讀文章的音頻。經(jīng)6 麥克風(fēng)錄制后的音頻數(shù)據(jù)格式為6 通道,采樣深度為16bit,采樣頻率為16K。具體音頻如圖4 所示,音頻時(shí)間長(zhǎng)度為1min。

Fig.4 6-channel audio of microphone array圖4 麥克風(fēng)陣列6 聲道收音音頻

在實(shí)際應(yīng)用中,頻段范圍的選擇比較重要,由于人聲的頻率范圍集中在300~3 000Hz,選取該頻率范圍可在盡量保證準(zhǔn)確性的前提下,減小算法運(yùn)算量。為考察頻率范圍對(duì)算法準(zhǔn)確性的影響,本實(shí)驗(yàn)選取0~8 000Hz 與300~3 000Hz 范圍進(jìn)行對(duì)比實(shí)驗(yàn)。具體方法為將1min 時(shí)間以50ms 進(jìn)行切片,分別進(jìn)行處理,共獲得1 200 個(gè)樣本。對(duì)處理結(jié)果進(jìn)行統(tǒng)計(jì),獲得不同頻段范圍的準(zhǔn)確率如圖5 所示。

從實(shí)驗(yàn)結(jié)果可以看出,在0~8 000Hz 及300~3 000Hz頻段范圍進(jìn)行處理時(shí),定位偏差在±5°范圍內(nèi)的概率分別為92%及81%。0~8 000Hz 頻段的誤差范圍可控制在±14°以內(nèi),而300~3 000Hz 頻段的誤差范圍為±18°以內(nèi)??梢钥闯觯诓捎昧溯^小頻率范圍后,整體精度還是降低了10%~20%。

為了得到不同時(shí)間片對(duì)處理準(zhǔn)確性的影響,分別以25ms、50ms 及500ms 對(duì)數(shù)據(jù)進(jìn)行切片,然后對(duì)切片數(shù)據(jù)分別進(jìn)行處理,并對(duì)處理結(jié)果的偏差值進(jìn)行統(tǒng)計(jì)。結(jié)果如圖6 所示。

Fig.6 Accuracy of different time slices圖6 不同時(shí)間片的準(zhǔn)確率

從實(shí)驗(yàn)結(jié)果來(lái)看,25ms 的數(shù)據(jù)切片在0°方向的準(zhǔn)確率最高,但在±4°以后的準(zhǔn)確率小于其他兩種切片方式,整體準(zhǔn)確率基本在控制±17°以內(nèi)。從整體來(lái)看,不同時(shí)間切片對(duì)聲源定位的準(zhǔn)確性并無(wú)明顯影響。

3.3 實(shí)時(shí)性實(shí)驗(yàn)

很多嵌入式設(shè)備對(duì)算法的實(shí)時(shí)性都有一定要求,因此本節(jié)對(duì)該算法的實(shí)時(shí)性能進(jìn)行測(cè)試與分析。選取1 000ms的6 麥克風(fēng)數(shù)據(jù)進(jìn)行處理,相位變換加權(quán)角度的精度分別為1°、2°與4°。選取X86 平臺(tái)以及嵌入式ARM 平臺(tái),X86處理器為i7-4790,嵌入式ARM 處理器為RK3399,運(yùn)行的操作系統(tǒng)均為L(zhǎng)inux Ubuntu 發(fā)行版。0~8 000Hz 及300~3 000Hz 頻段在各平臺(tái)運(yùn)行耗時(shí)如圖7 所示。

Fig.7 Time consuming of each platform圖7 各平臺(tái)運(yùn)行耗時(shí)

從實(shí)驗(yàn)結(jié)果來(lái)看,相對(duì)于0~8 000Hz 頻段范圍,采用300~3 000Hz 頻段范圍能夠減少約40%的處理時(shí)間。

業(yè)內(nèi)認(rèn)為一般情況下,C++語(yǔ)言運(yùn)行效率高于Python。為了對(duì)比使用Python 和C++的算法性能區(qū)別,對(duì)應(yīng)用兩種語(yǔ)言在X86 平臺(tái)的處理速度進(jìn)行測(cè)試??煽吹酵ㄟ^(guò)兩種不同語(yǔ)言實(shí)現(xiàn)的程序運(yùn)行時(shí)的性能差距較小,這是因?yàn)樵谑褂肞ython 語(yǔ)言實(shí)現(xiàn)算法時(shí),已利用cPython 庫(kù)加速矩陣預(yù)算過(guò)程,因此在使用C++語(yǔ)言后,性能并未得到較大提升。

最后,使用C++語(yǔ)言實(shí)現(xiàn)該算法,并在嵌入式ARM 處理器RK3399 芯片上進(jìn)行性能測(cè)試。ARM 平臺(tái)由于處理能力有限,運(yùn)行耗時(shí)約為X86 平臺(tái)的2.8 倍。

在一些產(chǎn)品交互應(yīng)用,特別是語(yǔ)音機(jī)器人中,主要是在喚醒操作時(shí)對(duì)聲源進(jìn)行定位,提供聲源方向,為后續(xù)波束形成提供音源方向參數(shù)。根據(jù)實(shí)驗(yàn)結(jié)果,在嵌入式平臺(tái)通過(guò)本算法對(duì)1 000ms 的6 麥克風(fēng)數(shù)據(jù)進(jìn)行處理需要110ms 的時(shí)間,在人機(jī)對(duì)話交互過(guò)程中,該時(shí)間在可接受范圍內(nèi)。如果希望進(jìn)一步提高算法響應(yīng)速度,可根據(jù)需求減小相位變換角度分辨率。繼續(xù)在ARM 處理器上進(jìn)行實(shí)驗(yàn),分別選取角度分辨率為1°、2°與4°,運(yùn)行多次取均值,實(shí)驗(yàn)結(jié)果如圖8 所示。

根據(jù)實(shí)驗(yàn)結(jié)果,可看出通過(guò)降低角度分辨率,可以線性地降低算法復(fù)雜度,減少運(yùn)行時(shí)間,但需要在實(shí)現(xiàn)過(guò)程中通過(guò)綜合考慮進(jìn)行效率及精度取舍。

對(duì)于音源持續(xù)時(shí)間與處理耗時(shí)的關(guān)系也進(jìn)行對(duì)比實(shí)驗(yàn),選取音頻時(shí)間為1 000ms、500ms 和50ms,在ARM 平臺(tái)上運(yùn)行多次取均值,結(jié)果如圖9 所示。

Fig.9 Time consuming of different audio duration圖9 不同音頻時(shí)長(zhǎng)運(yùn)行耗時(shí)

可以看到,對(duì)于不同時(shí)長(zhǎng)的音頻進(jìn)行處理,其耗時(shí)并未隨音頻時(shí)長(zhǎng)的減少而大幅下降,減少的時(shí)間大部分來(lái)自對(duì)源數(shù)據(jù)進(jìn)行預(yù)處理及傅里葉變換導(dǎo)致的時(shí)間變化。因?yàn)楦道锶~變換后將時(shí)域數(shù)據(jù)轉(zhuǎn)為頻域信息,對(duì)頻域數(shù)據(jù)進(jìn)行相位變換加權(quán)后的數(shù)據(jù)矩陣大小與時(shí)長(zhǎng)無(wú)關(guān),比較耗時(shí)的部分是在角度搜索中進(jìn)行互功率最大值運(yùn)算。

4 結(jié)語(yǔ)

本文簡(jiǎn)要分析了SRP-PHAT 算法原理,并提出使用Py?thon 及C++語(yǔ)言實(shí)現(xiàn)該聲源定位算法。針對(duì)在工程實(shí)踐中的角度分辨率及音源時(shí)長(zhǎng)等相關(guān)參數(shù)對(duì)算法準(zhǔn)確性與實(shí)時(shí)性的影響進(jìn)行實(shí)驗(yàn)與分析,為算法部署時(shí)的參數(shù)選取提供了依據(jù)。實(shí)驗(yàn)結(jié)果表明,該算法在嵌入式平臺(tái)處理耗時(shí)在200ms 以內(nèi),能基本滿足嵌入式平臺(tái)的應(yīng)用要求,也可根據(jù)需求選取不同的音頻頻率段,調(diào)整搜索精度以進(jìn)一步提高算法的實(shí)時(shí)性能。根據(jù)實(shí)驗(yàn)結(jié)果,該方案可應(yīng)用于智能語(yǔ)音交互產(chǎn)品中,使用單個(gè)ARM 芯片即可實(shí)現(xiàn)聲源定位,并通過(guò)與服務(wù)器的通信實(shí)現(xiàn)語(yǔ)音識(shí)別、語(yǔ)義分析等關(guān)鍵功能。下一步在產(chǎn)品具體實(shí)施過(guò)程中,需要結(jié)合噪聲抑制以及回聲消除等其他音頻處理技術(shù),進(jìn)一步提高聲源定位的準(zhǔn)確性。

猜你喜歡
麥克風(fēng)聲源波束
虛擬聲源定位的等效源近場(chǎng)聲全息算法
Binaural Rendering based on Linear Differential Microphone Array and Ambisonic Reproduction
毫米波大規(guī)模陣列天線波束掃描研究*
基于GCC-nearest時(shí)延估計(jì)的室內(nèi)聲源定位
基于數(shù)字麥克風(fēng)的WIFI語(yǔ)音發(fā)射機(jī)
圓陣多波束測(cè)角探究
Helix陣匹配場(chǎng)三維波束形成
運(yùn)用內(nèi)積相關(guān)性結(jié)合迭代相減識(shí)別兩點(diǎn)聲源
麥克風(fēng)
基于非正交變換的局域波束空時(shí)自適應(yīng)處理
子长县| 宝应县| 高邮市| 南靖县| 鲁山县| 砀山县| 疏附县| 海阳市| 芦山县| 松原市| 莱阳市| 东兴市| 澄江县| 疏勒县| 漳浦县| 江永县| 株洲县| 湖口县| 宁化县| 仪征市| 综艺| 三河市| 芦溪县| 镇平县| 安溪县| 陈巴尔虎旗| 云安县| 德州市| 龙海市| 平泉县| 营山县| 家居| 余江县| 乐都县| 汶上县| 尉犁县| 高阳县| 红安县| 三门峡市| 鲁甸县| 罗平县|