×

使用麦克风进行声学定位

消耗积分:2 | 格式:zip | 大小:0.02 MB | 2022-12-23

李鸿洋

分享资料个

描述

在信号处理等方面有一点经验,我想我可以尝试使用麦克风进行声学定位。

设置很简单,我们一直使用它来确定声音通过我们耳朵的位置。当然,不同之处在于,这是通过使用来自 ebay 的“廉价”现成组件来完成的,所以这在理论上一切都很好,但它真的有效吗?开门见山,这是肯定的。

 

 

前端

 
poYBAGOkHeSAJJ0dAACjuH3g0xY207.jpg
max9812麦克风
 

前端由两个基于 max9812 芯片的麦克风模块组成,可提供 20dB 的固定增益。理想情况下,如果增益以某种方式可编程会更好,因为我在发射台上使用 12 位 ADC(模数转换器)。信号被馈送到基于运算放大器的二阶低通滤波器中。这是使用 ADC 时所需的抗混叠低通滤波器。当然,我有便宜的陶瓷电容器,额定值为其价值的 +/- 20%,所以嗯。我使用了四个 1uF 去耦电容器并偏置在 1.65V 以输入到 ADC。

 
pYYBAGOkHeaAdfXnAAAldmlu0OE413.png
模拟滤波器
 

 

 
poYBAGOkHemANyv2AAEMDHTr4wI481.jpg
模拟低通滤波器
 

我的前端最大的问题是来自伺服电机的噪音,包括电气和机械噪音。为了解决这个问题,我把地线和电源分开了(伺服在任何情况下都使用 5V)。我还在面包板上加载了接地和 3.3V 之间的十几个电容器。顺便说一句,我使用了第二个运算放大器,通过将运算放大器驱动到轨,将 3.3V 伺服信号转换为 5V。

 
poYBAGOkHe2AI0R8AAEz0Xn3Lis261.jpg
蒂瓦C
 

蒂瓦克

TivaC 是 Texas Instruments 的启动板,运行具有 80Mhz 32 位 Cortex-M4 内核的 TM4C123GH6PM 处理器。

TM4C123GH6PM 实际上只有 2 个物理 ADC,但您可以将输入信号多路复用到每个 ADC,因此在这种情况下,它们每个处理 8 个输入。我以最大速度(每个每秒 1 兆样本)运行两者,将它们加在一起,进行 8 次硬件平均,然后进行微型 DMA 以进入数字滤波阶段。 

数字滤波器在循环缓冲器上运行并使用 63 个抽头。该滤波器旨在滤除 4kHz 以上的噪声。 

它从那里直接进入 USB 缓冲区,一旦收到来自 PC 的请求就被发送出去。

我使用的 USB 协议非常非常简单。PC 向 Tiva 发送一个 6 字节的数据包,其中包含舵机位置和它需要的字节数。Tiva 响应一个 16 位 ADC 值的数据包(实际上是一个 8192 字节的数据包,大约每秒 30 次)。 

TivaC 还配置为从 uart 输出调试信息。事实证明,这对于根除缓冲区溢出具有无可估量的价值。

它还将 PWM 信号驱动到伺服系统。

我提供了一份驱动 TivaC 的主要代码副本,以便您了解它是如何完成的。

上位机软件

我使用的 USB 驱动程序是带有 TI 通用批量设备驱动程序的 WinUSB。

 
poYBAGOkHe-ATVdjAAAqP2AQb4Q351.jpg
TI 的通用大容量设备 USB 驱动程序
 

实际的 PC 软件被编写为本地 C++ DLL(连接到设备并进行时域相关)和基于 C# 的用户界面 exe。C# exe 使用“interop”连接到本机 DLL。当然,PC 运行的是 Windows 10,不确定这是否意味着 Windows IOT,但我想在 IoT 的广义定义中,也许可以这样称呼它。

 
poYBAGOkHfOAOWWPAAA4KOwoY84267.png
追踪器应用程序
 

时域中的互相关非常简单。它只是两个麦克风信号的运行总和的数量,它们彼此相乘,每个信号都有不同的时间延迟。产生最高总和的时间延迟是峰值,从中可以确定两个信号之间的相位延迟。

correlation (time, n) = correlation (time - 1, n) * decay + microphone_left(time) * microphone_right(time-n) 其中 n 是相位延迟

 
poYBAGOkHfuAF_kkAADBbsxnmv4052.png
左右麦克风相位延迟
 

接近 16kHz 的高采样率允许大约 2 度的分辨率。 

我正在使用马尔可夫概率链来结合声源可能没有移动的信念。这似乎工作得很好。显然,多个麦克风(因此有 8 个通道)会更好。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(1)
发评论
jf_41975466 2023-02-02
0 回复 举报
前排沙发 收起回复

下载排行榜

全部1条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用麦克风进行声学定位',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);