zl程序教程

您现在的位置是:首页 >  其他

当前栏目

麦克风阵列声源定位实现[通俗易懂]

定位 实现 通俗易懂 阵列 麦克风 声源
2023-06-13 09:13:38 时间

大家好,又见面了,我是你们的朋友全栈君。

麥克風陣列音源定位系統是利用麥克風陣列接收音訊,然後經由適當的演算法估算出音源入射麥克風陣列的方向角,即判斷出音源的位置方向。本專題著重於此演算法的程式撰寫,並實際測試二維及三維空間中單一音源入射的方向角,期望於演算速度及準確度上能有最好的效果。此系統完成後可搭配攝影機應用於視訊會議,隨時定位出發言者;也可應用於監視系統、玩具等。 
麥克風陣列音源定位系統主要是利用同一音源到麥克風陣列中每支麥克風的距離不全相同,因此同一音源的訊號傳遞到每支麥克風會有時間差TDOA ( Time Difference of Arrival ),利用求得的TDOA,代入推論出的方向角公式即可得到音源入射的方向角。而本專題著重於估算TDOA及方向角公式的演算法上,我們使用兩種演算法實作測試,其中一種演算法只適用於二維空間,而另一種適用於二維或三維空間的音源定位。

有許多相關的論文是以頻域的方法分析,但若要將此系統實作在微處理器上,運算較簡單時域分析方法會有較好的效用,且對初學訊號分析的我們來說也較容易實現,所以我們主要以時域的方法來建立演算法。

此系統主要的實作流程為:「語料取樣」、「訊號前處理」、「估算TDOA」、「計算方向角」。下圖1-1為麥克風陣列音源定位系統流程圖,詳細說明如下:
  1. 由兩支以上麥克風組成麥克風陣列接收音訊。
  2. 麥克風接收的訊號經過一放大器後,再經由四輸入USB動態訊號擷取模組,依設定的取樣頻率取樣訊號,輸入電腦分析。
  3. 將每支麥克風接收的訊號音量標準化,並切割成多個音框(frame)。
  4. 設定音量門檻值,去除音量小的部份。(算出一段訊號中所有音框的音量,取其中音框音量最小值的k倍為門檻值,k值由經驗得到。)
  5. 以Cross Correlation的方法估算TDOA。
  6. 將求得的TDOA代入方向角公式,即可得到音源入射的方向角。

TDOA的計算方法:

TDOA (Time Difference of Arrival) 是指同一音源的訊號傳遞到兩支麥克風的時間差由麥克風所取樣的訊號來估算。而時域上常見的計算方法有四種:AMDF(Average Magnitude Difference Function)、ratio AMDF、最小平方法、Cross Correlation。我们採用最常見且穩定性高的Cross Correlation。

Cross Correlation

x1及x2為兩支麥克風所取樣到的兩段訊號,經由下式可算出所對應λ值的cross correlation值。

(1)

最大合理平移範圍當音源與兩支麥克風的中心成90度時(音源與兩支麥克風距離相等),音源傳遞到兩支麥克風的時間差為0;當音源與兩支麥克風三者成一直線時,音源傳遞到兩支麥克風的時間差最大。 
假設聲速為v,兩支麥克風距離為m,取樣頻率為 fS,則最大合理平移範圍為:( m / v ) × fS單位為取樣點數(sample)。                                             

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192635.html原文链接:https://javaforall.cn