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

麦克风阵列声源定位实现[通俗易懂]麥克風陣列音源定位系統是利用麥克風陣列接收音訊,然後經由適當的演算法估算出音源入射麥克風陣列的方向角,即判斷出音源的位置方向。本專題著重於此演算法的程式撰寫,並實際測試二維及三維空間中單一音源入射的方向角,期望於演算速度及準確度上能有最好的效果。此系統完成後可搭配攝影機應用於視訊會議,隨時定位出發言者;也可應用於監視系統、玩具等。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

麥克風陣列音源定位系統是利用麥克風陣列接收音訊,然後經由適當的演算法估算出音源入射麥克風陣列的方向角,即判斷出音源的位置方向。本專題著重於此演算法的程式撰寫,並實際測試二維及三維空間中單一音源入射的方向角,期望於演算速度及準確度上能有最好的效果。此系統完成後可搭配攝影機應用於視訊會議,隨時定位出發言者;也可應用於監視系統、玩具等。 
麥克風陣列音源定位系統主要是利用同一音源到麥克風陣列中每支麥克風的距離不全相同,因此同一音源的訊號傳遞到每支麥克風會有時間差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.net/192635.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CurrentHashMap的实现原理

    CurrentHashMap的实现原理hash表介绍哈希表就是一种以键-值(key-indexed)存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。链式hash表链式哈希表从根本上说是由一组链表…

    2022年6月18日
    17
  • webgame开发中的文件解密

    webgame开发中的文件解密上一篇讲的是文件的加密,这一篇记录一下如何加载并显示图片。 因为图片文件经过加密,已经成了二进制流的文件了(一堆乱码),只能使用URLStream来加载资源了。这里有一点要注意:URLStream中的读取操作是非阻塞的,在读取数据之前必须使用bytesAvailable属性来确定是否能够获取足够的数据,如何不能获取足够的数据,将引发EOFError异常。 主要思路:1、加载…

    2022年6月7日
    28
  • kubernetes CKA题库(附答案)

    kubernetes CKA题库(附答案)第一题RBAC授权问题权重:4%设置配置环境:[student@node-1]$kubectlconfiguse-contextk8sContext为部署管道创建一个新的ClusterRole并将其绑定到范围为特定的namespace的特定ServiceAccount.Task创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole:DeploymentStatefulSetDaemonSet在现有的name

    2022年6月9日
    142
  • java后端开发需要什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]

    java后端开发需要什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]很多小伙伴想转行做Java的后端,但是又不知道到底该学习些什么。今天就跟你们聊聊做Java的后端,需要学习和了解什么?1、首先要明确后端包括哪些职业DBA(数据库维护优化专家)Developer(程序猿)Architect(构架师)Scrummaster及类似(敏捷开发专家)ProjectManager(产品狗)Maintenance&ITsupport(通讯和服务器相关)当然这只是一个大…

    2022年7月7日
    18
  • 深度卷积网络_卷积神经网络输出大小

    深度卷积网络_卷积神经网络输出大小在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如最近的GoogLenet,VGG-19,Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skipconnection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。今天我们要介绍的是DenseNet(Denselyconnectedcon

    2022年9月27日
    0
  • qsqlquery查询到的数据个数_获取sequence的当前值

    qsqlquery查询到的数据个数_获取sequence的当前值publicintselectAll(finalStringtime1, finalStringtime2,finalintcityname,finalStringairstatus){ finalStringBufferhql=newStringBuffer( “selectcount(air)fromTableNameair

    2022年9月26日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号