在昨天的推文中,讨论了利用声音测距的基本方法。在具体应用中,具体会碰到哪些问题,下面给出今天的一些测试结果。

实验装置和数据采集

数据时通过基于STM32F103RE的AD、DA1采样板来控制音响发送Chirp声音信号和采集MIC接收到的声音信号的。

实验中测试面包板

1. 直线滑轨定位

演示中所使用的滑轨长度大约为1米,滑块有效移动距离为0.9米。通过ZIGBEE无线控制命令控制滑块做直线均匀运动。

设置在滑轨上的声音传感器

实验中的Chirp声音信号是由单片机产生并通过DA输出给蓝牙音箱的播放。信号从数字缓冲区通过DA转换成模拟信号,声音信号经过AD转换为数字信号的速率为都设置为10kHz。输出和输入声音的缓存区的长度为2500,声波时间长度为0.25秒。

实际声音的长度为2048,。因此在输出和采样前后各有250个数据点(大约25ms)左右时静音的声音。下图给出了一个典型的发送声音信号和接收到的声音采集信号波形。

每个采集数据包里的数据波形

采集数据处理

在每个位置点都采集到相应的发送和接受数据,通过相关计算获得时间延迟。

1. 发送和接收数据之间的互相关系数计算

计算每个数据包里的发送信号与接收信号之间的相关系数,从而确定最大的峰值位置。下图给出了一个典型的发送和接受信号的相关结果曲线:

第一个数据包中发送和接收数据之间的相关系数

2. 相关系数的最大、最小位置与数据采样之间的关系

下图将每个数据包中相关系数的最大值点和最小值点的位置与数据采样点之间的绘制出来。随着数据序号的增多,对应接收声音的MIC位置原理音箱,相关系数的极值位置也在发生变化。基本上都是随着采用序列的增多而线性下降,反映了MIC的位置是线性原理声源的位置。

相关系数最大值最小值的位置与数据采用之间的关系

数据中最大值的位置基本上都是单调下降,只是在后期出现了略微的抖动。但是最小值的位置出现过较大的波动。这说明最大值的位置用于确定延迟时间比较稳定。

下图显示了相关系数最大值和最小值随着采样点位置之间的关系。随着采样点增多,音箱和麦克风之间的距离增加。相关系数的绝对值因为噪声的原因都会下降。整体上极大值点的相关系数呈现单调下降的趋势,而极小值点的数值变化呈现非单调的形态。这也从另外一个角度反映了为什么前面相关系数极小值点的位置出现抖动的原因。

相关系数最大值和最小值与采样位置之间的关系

3. 分析相关峰值位置的变化与采样距离之间的关系

对于相关系数最大值峰值点的变化从开始的p1=p_1 =p1​= 2497,一直变化到最后的p2=p_2 =p2​= 2473。变化的数值: p1−p2=p_1 - p_2 =p1​−p2​= 24。

由于实验中声音信号的采集频率fs=10,000f_s = 10,000fs​=10,000Hz,所以上述峰值位置的变化所对应的时间延迟为:Δt=p1−p2fs=2410×103=2.4(ms)\Delta t = {{p_1 - p_2 } \over {f_s }} = {{24} \over {10 \times 10^3 }} = 2.4\,\,\left( {ms} \right)Δt=fs​p1​−p2​​=10×10324​=2.4(ms)
如果考虑到当时的室温为25℃左右,对应的空气中声音传播的速度:vair=331+0.6×T=331+0.6×25=346(m/s)v_{air} = 331 + 0.6 \times T = 331 + 0.6 \times 25 = 346 \:\:(m/s)vair​=331+0.6×T=331+0.6×25=346(m/s)

那么前面Δt\Delta tΔt所对应的距离为:D=Δt×vair=2.4×10−3×346=0.83(m)D = \Delta t \times v_{air} = 2.4 \times 10^{ - 3} \times 346 = 0.83\:\:(m)D=Δt×vair​=2.4×10−3×346=0.83(m)

测量接收声音的MIC实际移动的距离为0.671米。这中间出现了 χ=0.83−0.6710.671×100%=23.7%\chi = {{0.83 - 0.671} \over {0.671}} \times 100\% = 23.7\%χ=0.6710.83−0.671​×100%=23.7%的误差。

具体为什么?现在还不可得而知。

测量实际接收声音的MIC移动的距离

声音延迟的分辨率与空间分辨率

通过相关运算可以获得声音传播的延迟,近而获得声源与接收麦克之间的距离。

由于声音信号是通过离散时间采样,因此对于时间 延迟的分辨率就会受到采样时间TsT_sTs​的影响。在前面给出了测量结果中可以看出时间延迟曲线呈现明显的台阶,这是由于采样时间所引起的时间分辨率引起的。

根据实验延迟计算出空间距离,同样也会具有一个分辨率下限。Δd=Ts⋅vair\Delta d = T_s \cdot v_{air}Δd=Ts​⋅vair​。其中的vairv_{air}vair​是空气中的升速,TsT_sTs​是声音信号采样时间。

下面讨论如何提高声音延迟的分辨率、计算效率、以及麦克的不同空间指向对于测量结果的影响。

快速相关运算

1. 利用FFT加速计算相关运算

(1)相关运算的复杂度

对于两个时间信号x(t),y(t)x\left( t \right),y\left( t \right)x(t),y(t),它们的相关运算结果Rxy(t)R_{xy} \left( t \right)Rxy​(t)定义如下:
Rxy(t)=∫−∞∞x(τ)⋅y(τ−t)∗⋅dτR_{xy} \left( t \right) = \int_{ - \infty }^\infty {x\left( \tau \right) \cdot y\left( {\tau - t} \right)^* \cdot d\tau }Rxy​(t)=∫−∞∞​x(τ)⋅y(τ−t)∗⋅dτ如果这两个信号都是实值信号,公式里面的共轭就可以省略。

对于两个实数离散时间信号x[n],y[n],n∈{0,...,N−1}x\left[ n \right],y\left[ n \right],n \in \left\{ {0,...,N - 1} \right\}x[n],y[n],n∈{0,...,N−1},它们之间的普通相关运算定义为:
Rxy[n]=∑m,m−n∈[0,N−1]x[m]⋅y[m−n]R_{xy} \left[ n \right] = \sum\limits_{m,m - n \in \left[ {0,N - 1} \right]}^{} {x\left[ m \right] \cdot y\left[ {m - n} \right]}Rxy​[n]=m,m−n∈[0,N−1]∑​x[m]⋅y[m−n]

从相关运算定义来看,计算两个长度为NNN的序列相关运算,乘法、加法的计算复杂度与N2N^2N2成正比。

(2)相关运算与卷积运算的关系

在信号运算中,还有一个应用更广泛的运算:卷积运算。x(t),y(t)x\left( t \right),y\left( t \right)x(t),y(t)之间的卷积运算定义为:x(t)∗y(t)=∫−∞∞x(τ)⋅y(t−τ)dτx\left( t \right) * y\left( t \right) = \int_{ - \infty }^\infty {x\left( \tau \right) \cdot y\left( {t - \tau } \right)d\tau }x(t)∗y(t)=∫−∞∞​x(τ)⋅y(t−τ)dτ
对比一下信号的相关运算和卷积运算的定义,可以看出它们之间的关系:
Rxy(t)=x(t)∗y∗(−t)R_{xy} \left( t \right) = x\left( t \right) * y^* \left( { - t} \right)Rxy​(t)=x(t)∗y∗(−t)

(3)快速卷积数值计算

之所以讨论相关运算与卷积运算之间的关系,是为了寻找相关运算的快速算法。

计算一个序列x[n],n∈{0,...,N−1}x\left[ n \right],n \in \left\{ {0,...,N - 1} \right\}x[n],n∈{0,...,N−1}的离散傅里叶变换DFT{x[n]}DFT \left\{ {x\left[ n \right]} \right\}DFT{x[n]}有相应的快速算法-快速傅里叶变换FFT{x[n]}FFT\left\{ {x\left[ n \right]} \right\}FFT{x[n]},在NNN为2的整数次幂的情况下,计算FFT的乘法,加法的复杂度都在log⁡2N\log _2 Nlog2​N的数量级别。正变换和反变换的复杂度相同。

在根据傅里叶变换的卷积定理,序列的时域卷积(和)运算,在频域是乘积运算。基于此,再利用前面讨论的相关与卷积运算之间的关系,可以得到计算两个序列的相关运算的快速算法:

Rx,y(t)=FFT−1{FFT[x(t)]⋅FFT[y(t)]∗}R_{x,y} \left( t \right) = FFT^{ - 1} \left\{ {FFT\left[ {x\left( t \right)} \right] \cdot FFT\left[ {y\left( t \right)} \right]^* } \right\}Rx,y​(t)=FFT−1{FFT[x(t)]⋅FFT[y(t)]∗}

在实际工程中,往往参与卷积的两个信号实现已知,比如在利用声音定位的时候,发送声音信号往往是事先确定好的固定的Chirp信号,每次参与计算的新的信号是接收到的回声信号。所以在上面卷积的快速算法中,对于已知信号的FFT可以事先计算好并存储,实际运算中只需要完成对新采集到信号的FFT计算,以及对乘积结果的反FFT计算。

最后需要补充一下,在利用上面公式计算的时候,还需要将两个信号通过补0,变成长度等于两个序列长度之和减一。

2. 快速相关运算结果

使用快速计算,比直接在时域中进行卷积速度大大提高了。通过计算获得100组采样数据,每组2048个数据的相关峰值点,使用FFT需要大约:0.36秒钟;而使用普通的相关运算则需要200秒左右。

下图显示了通过两种方法所得到的相关峰值位置随着麦克风距离音箱位置变化而产生的延迟,这两种方法所得到的结果是一样的。

通过FFT得到的相关结果峰值位置

快速算法和直接计算两种方法的速度对比,可以通过下面两个动图所显示的计算过程能够体会出来。

下面是应用FFT快速计算机相关运算的过程。

使用FFT计算100组,每组2048点相关结果只需要0.37秒

下面则是直接计算卷积的过程:

直接计算100组,每组2048数据点相关结果则需要192秒左右

提高相关运算的空间精度

1. 为什么前面测量结果曲线中出现台阶

如果直接根据序列的相关结果峰值位置确定声音延迟,那么声音延迟的时间分辨率就是声音信号的采样时间TsT_sTs​,再根据声音速度vsoundv_{sound}vsound​,可以计算出所对应的测量距离的空间分辨率Δd=Ts×vsound\Delta d = T_s \times v_{sound}Δd=Ts​×vsound​。

在采样时间Ts=0.1msT_s = 0.1msTs​=0.1ms,20℃空气速度v20oc=343(m/s)v_{20^o c} = 343\,\,\left( {m/s} \right)v20oc​=343(m/s),对应的空间分辨率Δd=3.4(cm)\Delta d = 3.4\left( {cm} \right)Δd=3.4(cm),也就是当收音麦克与音源之间的距离变化小于3.4厘米时,所测量得到的结果是一样的。这也就解释了前面100个位置点测量声音延迟曲线出现了很多台阶的原因。

2. 如何提高测量结果的空间分辨率

提高基于声音采样数据相关方法测量距离的空间分辨率,可以通过提高AD采样速率来解决。但这需要更高速的AD转换器,更多的数据存储内存以及更快速数据计算能力。

除此之外,还可以通过数据插值处理的方法来提高测量结果的空间分辨率。

数据插值可从离散时间采样数据x[nTs]x\left[ {nT_s } \right]x[nTs​]中获得时间更加密集的数据x[nTs1]x\left[ {nT_{s1} } \right]x[nTs1​]。插值分解成两个过程:第一个过程是将离散时间信号恢复成一个连续时间信号x(t)x\left( t \right)x(t);第二个过程就是在连续时间信号的基础上采用更加密集的是时间间隔采样x[nTs1]x\left[ {nT_{s1} } \right]x[nTs1​]。

恢复成连续时间信号可以有零阶保持、一阶保持、理想插值等不同方法,它们都可以看成是离散时间采样脉冲信号与一个插值函数进行卷积的结果:x(t)reconstructed=h(t)∗xs(t)x\left( t \right)_{reconstructed} = h\left( t \right) * x_s \left( t \right)x(t)reconstructed​=h(t)∗xs​(t)

零阶保持、一阶保持、理想插值分别对应的卷积信号是矩形信号、三角信号以及sin⁡c(t)\sin c\left( t \right)sinc(t)信号等。

不同的离散时间信号重建成连续时间信号的方法

使用理想插值所获得的结果更加平滑,但计算起来相对比较复杂。但如果是从离散时间信号的傅里叶变换结果中恢复插值信号的话,则有一个非常方便的方法,那就是通过对数据的DFT结果补零,获得更长的频谱数据,再通过反离散傅里叶变换,就可以得到原来数据的理想插值结果了。具体的 原理在信号与系统课程中会进行介绍的。

由于前面在快速计算相关结果的时候,就利用了快速傅里叶变换,所以可以在最后一步进行反傅里叶变换的时候,先进行补零,然后在进行。

3. 实验数据对比

下面给出了插值10倍之后所获得的相关峰值位置结果,对比原始计算方法,可以看到经过插值之后的结果明显平滑多了。通过插值后的结果所获得的空间分辨率就从原来的3.6厘米降低到3.6毫米了。

经过空间插值细化后10倍后的相关峰值位置计算结构

由于实验环境是在室内,存在着很多反射波的干扰,所以当距离远了之后,距离测量出现了很多的波动,它们反映了空间中的很多驻波干扰。下图给出了不同插值倍率下结果曲线。

随着插值倍数增加,所得到延迟曲线变化

通过简单的差值就可以轻松提高测距的空间分辨率,所需要的代价就是计算时间加长了。下面图给出了插值的倍数与结果计算消耗的时间之间的关系,整体上呈现线性比例关系。

细化倍数和计算时间

室内环境反射波对于测量结果的影响

由于是在室内进行实验,麦克风所接受到的声音信号除了直接来自于声源之外,可能还包括有四周墙壁的反射信号。如果声源距离比较近,四周的反射声波强度受到衰减,对于测量结果影响较小。

下面通过控制接受麦克的不同方向,考察一下测量结果是否受到影响。

使用舵机控制MIC的方向

将麦克放置距离音箱30厘米左右,方向从左到右旋转180°。对所获得的声音数据使用前面给出的插值细分方法,得到的声音延迟时间。下图给出了不同方向声音延迟结果曲线:

不同指向对应的相关延迟结果

延迟时间对应的最大值和最小值分别是:tmax⁡=4895.5,tmin⁡=4896.4t_{\max } = 4895.5,\,\,\,\,t_{\min } = 4896.4tmax​=4895.5,tmin​=4896.4
在10kHz的采样率下,上述时间差所对应的距离变化为:Δd=(tmax⁡−tmin⁡)⋅v200c=0.9×10−4×343=3(cm)\Delta d = \left( {t_{\max } - t_{\min } } \right) \cdot v_{20^0 c} = 0.9 \times 10^{ - 4} \times 343 = 3\,\,\left( {cm} \right)Δd=(tmax​−tmin​)⋅v200c​=0.9×10−4×343=3(cm)

这个3厘米的变化距离和麦克风转动过程中所引起的距离变化大体相当,说明此事四周的反射波对于测量结果影响不大。同时所使用的MIC的方向指向性并不强,可以对来自于180°方向的声波都能够很好的探测。

下面是分别将麦克在距离音箱10厘米和50厘米处重新测量不同的指向对于测距结果的影响。

在10厘米距离下麦克不同方向对应的声音延迟

```在50厘米距离下麦克不同方向对应的声音延迟```

结论

根据前面的一些初步实验数据,对于普通的喇叭发出的Chirp声音,通过小型全向麦克所获得的声音信号可以获得空间分辨率在0.5厘米之内的检测精度。当然,这个精度会受到麦克风的与声源之间的指向的影响,上述的测量误差就会引入3个厘米的误差。

3个厘米误差对于在赛场上比赛的智能车模来说,问题不是很大。可以基于此设计出未来新型的室外声音引导的信标赛题组。


  1. AD\DA采样板的设计说明:https://blog.csdn.net/zhuoqingjoking97298/article/details/104180878 ↩︎

影响声音定位的几个因素相关推荐

  1. 针对智能车声标组的声音定位方案研究

    李哲明 郝亮 李晶钰 2020-09-01 Tuesday 摘要 声音定位指根据声音信号确定声源方位.传统定位算法虽然准确,但对传感器精度要求较高.本文提出一种利用声音定向的方法,再使用FM信号辅助计 ...

  2. 声学漫谈之五:音腔是怎么影响声音效果的

    手机声腔对于铃声音质的优劣影响很大.同一个音源.同一个SPEAKER在不同声腔中播放效果的音色可能相差较大,有些比较悦耳,有些则比较单调.合理的声腔设计可以使铃声更加悦耳. 手机的声腔设计主要包括前声 ...

  3. 音视频开发(36)---麦克风阵列声音定位解决方案

    麦克风阵列声音定位解决方案 噪声源定位简介 噪声源定位意义 噪声源识别是指在同时有许多噪声源或包含许多振动发生部件的复杂声源情况下,为了确定各个声源或振动部件的声辐射的性能,区分噪声源,并根据他们对于 ...

  4. 影响微信公众号排名的因素

    自微信推出公众号搜索功能以来,排名规则一直深受大家的关注,但腾讯至今对于排名规则没也给出官方参考,那么影响微信公众号排名的因素到底有哪些?根据我多年微信公众号运营的经验,我们总结了以下几条对排名影响因 ...

  5. 麦克风阵列声音定位简介

    麦克风阵列声音定位简介 一般来说,基于麦克风阵列的声源定位算法划分为三类:一是基于波束形成的方法:二是基于高分辨率谱估计的方法:三是基于声达时延差(TDOA)的方法. 波束形成(Beamforming ...

  6. 麦克风阵列声音定位简介【转】

    麦克风阵列声音定位简介 一般来说,基于麦克风阵列的声源定位算法划分为三类:一是基于波束形成的方法:二是基于高分辨率谱估计的方法:三是基于声达时延差(TDOA)的方法. 波束形成(Beamforming ...

  7. 声学漫谈:音腔是怎么影响声音效果的

    声学漫谈之五:音腔是怎么影响声音效果的? (2016-6-7 19:35) 标签:声学基础,音腔 手机声腔对于铃声音质的优劣影响很大.同一个音源.同一个SPEAKER在不同声腔中播放效果的音色可能相差 ...

  8. 影响电商发展的重要因素及电商未来的发展可能

    易观分析:自从互联网传入中国以后,特别是2000年以后,一直保持着非常快的演变速度,而以互联网为基础的电商则更是发展成了中国互联网的代表性行业.中国电商的发展不仅在初期有着非常高的增速,有着多样化的演 ...

  9. 声音定位研究中遇到的困难

    提问 我的心好累呀 卓大大您好,我是一名信标组的参赛选手.最近研究声音定位已经一个多星期了,一直在跟着您推文中的方法走,也曾像其他人求助,解决了很多问题,但是也遇到了一些新的问题,有些暂时想不明白,就 ...

最新文章

  1. 【力扣网练习题】最长公共前缀
  2. nginx 负载均衡配置_Nginx负载均衡NFS配置
  3. 如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO)
  4. BugkuCTF-MISC题where is flag3
  5. java 原子类能做什么_死磕 java原子类之终结篇(面试题)
  6. int与String互相转换
  7. 题目2-括号配对问题
  8. Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
  9. MySQL字符串拼接函数使用
  10. FastDFS原理介绍及集群搭建
  11. ubuntu虚拟机传文件到当前主机
  12. mysql 怎么 增加新用户名和密码_在mysql中怎么添加用户名和密码
  13. 深入理解配准任务中的STN
  14. 计算机技术在预防医学的应用,计算机技术在预防医学科研数据处理中的应用
  15. 互联网高手教你如何搜集你想要的信息
  16. 「分布式技术专题」基于Gossip协议的去中心服务
  17. 中信银行总行信息科技岗2019年校园招聘
  18. 51单片机八位数码管1到F动态滚动显示仿真及程序
  19. Git ---- 自建代码托管平台-GitLab
  20. FF-A学习环境搭建:基于qemu_v8/spmc_at_el3/optee(ubuntu20.10)

热门文章

  1. jpgraph中文使用手册之文本和字体控制教程
  2. 做网站应用应注意的那几点
  3. EditPlue使用进阶之正则表达式
  4. Django之BBS博客项目
  5. 返回用户指定页面的web服务器
  6. JavaScript之js的一些基础方法
  7. 第八章 让开发板发出声音:蜂鸣器驱动读后感
  8. Java数据结构——解析算术表达式
  9. PHP-Ajax跨域解决方案
  10. 首部网络支付风险防范自律规范出台