
当时正值第14届全国大学生智能车竞赛结束,竞赛秘书处准备将进行了四届的信标组由原来的光电导航,改变成声音导航,由此也可以使得该组别的能够适应在各种场地环境,包括室外场地。
那么利用声波定位完成导航究竟能够给出多大精度的导航信息?是否会受到环境噪声的影响?是否会受到周围墙壁反射和中间障碍的影响?
现在受到疫情影响反正也出不去,不如动手做几个小实验来研究一下这些问题,以便确定该方案是否可行。
声音测距精度到底有多大?
在前两天介绍了声源测距的基本原理和数据处理方法。为了能够在单片机上快速完成运动,可以借助于FFT提高计算速度以及完成对相关结果的插值来减少采样时间对空间分辨率的影响。
那么测量的结果究竟会有多大的精度呢?下面通过一组实验来探讨一下。
实验场地和方法
为了能够模拟未来在信标导航比赛中的实际情况,声源和接收的麦克风都距离地面比较近,将发射声波的蓝牙音箱放置在距离地面17.5厘米高,接收信号的声音探头也放置在相同的高度。它们之间的距离可以改动。

1. 分别在不同距离采集数据
调整扬声器与麦克风之间的距离,分别在相距145厘米,100厘米、50厘米、15厘米下测量声音传播距离。下面是几个不同距离下发送和接收到的声音波形。
在100厘米处采集音频数据对应的示波器得到的输入输出波形。

在53厘米处采集音频数据对应的示波器得到的输入输出波形。

在15厘米处采集音频数据对应的示波器得到的输入输出波形。

2. 数据处理结果
总共有四个位置的四组数据,每个位置采集了50次发送和接收的数据波形。将每组数据使用相关差分方法获得相关系数峰值位置,并求出50次结果的均值和方差。结果如下表所示:
| 序号 | 距离(cm) | 相关峰值 | 方差 |
|---|---|---|---|
| 1 | 15 | 4994.6 | 0.0 |
| 2 | 50 | 4983.855 | 0.000225 |
| 3 | 100 | 4969.485 | 0.00883 |
| 4 | 145 | 4956.079 | 0.00361 |
现在室温温度摄氏度。声音速度为(m/s):
数据采样时间,那么一个采样时间声音传播距离:
根据前面测量得到的各个位置相关峰值位置,再根据采样时间声音传播距离,可以计算出根据声音时间差所得到的距离:
| 序号 | 位置实测距离(cm) | 相关峰值差 | 计算距离(cm) |
|---|---|---|---|
| 1 | 15 | 5.40 | 18.66 |
| 2 | 50 | 16.15 | 55.79 |
| 3 | 100 | 30.52 | 105.45 |
| 4 | 145 | 43.92 | 151.77 |
可以看到根据声音信号延迟所得到的计算距离比起实际测量的距离普遍大大了5厘米左右。这可能是因为所测量距离都是按照蓝牙音箱的前面面板的位置开始计量的,但实际上音箱内部的喇叭的振动膜要比音箱前面板还是往后的,所以实际距离应该比测量距离大。
根据上面表格,可以计算出四个位置之间的差值,如下表所示,这样就消除了测量距离的系统误差。
| 序号 | 距离差(cm) | 峰值位置 | 计算距离差(cm) |
|---|---|---|---|
| 1 | 50-15 | 10.7450 | 37.13 |
| 2 | 100-50 | 14.37 | 49.66 |
| 3 | 145-100 | 13.406 | 46.33 |
通过处理后的结果可以看出根据声音传播速度差所得到的距离差与实际测量值是很接近的。其中数据误差最大不超过5%。
双通道麦克测定音源方位
使用多个相距一定距离的麦克同时测量声波传播距离,根据距离差值可以获得音源的方向和距离。下面简单测试一下使用两个通道的麦克接收声音的情况。
1. 接收双声道麦克风的布局
使用了两个驻极体麦克风来接收声源的声音。它们的固定方式如下图所示。左右两个麦克风的距离为26.5厘米,距离地面的高度为15厘米。

2. 发送声音的扬声器和滑轨
固定在滑轨上的声源采用8的动圈式扬声器。它的尺寸和固定的高度见下图所示。它外部固定一个与其尺寸相当的原来的铝质灯罩,可以减少扬声器外部声音短路,提高发送声音的效率。

固定扬声器的滑轨可以做直线运动,运动的范围大约0.7米。驱动器可以通过WiFi接收到运动距离的指令。

3. 驱动声源喇叭的功放
驱动声源扬声器的音频功率放大器是一款双声道的音箱音频放大器。适配电源为12V,BTL输出。前端带有音量、左右平衡、高音、低音调节旋钮。
实验中只是用其中一路来驱动滑轨上的扬声器。

4. 数据发送和接收
下图是发送和接收声音数据的带有单片机的实验面包板。它的原理在如下相关博文中进行了介绍:
基于STM32F103F ADDA板制作[1]
声音定位硬件电路[2]

5. 数据采集
设置麦克阵列在相距滑轨不同的距离下,控制扬声器从左移动到右,每个位置下发出Chirp声音。接收并存储该声音数据。

分别将麦克放置在距离滑轨100厘米、50厘米、25厘米左右。滑轨带着喇叭移动,分别测量声源到两个喇叭之间的距离。
1. 在一米处的采集数据

2. 在50厘米处采集的数据

3. 在25厘米处采集的数据

6.结果分析
(1)实验数据理论模型
根据勾股定理,声源在滑轨上的移动距离和接收声音的麦克风之间的距离为:

下图就是在x0=50, y1=25, x1在[0,100]范围内,L1与x1之间的关系:

(2)根据采集数据估计麦克的方位
从前面实验所得到的不同位置的d1,d2数据曲线来看,它们都大体呈现与上面理论模型相近的性质。只是在实验中粗略的知道y1,x0,x1的数据,实际上测量并不精确。再加上实验中声速也是一个变化量,所以直接使用原始数据来验证它是否符合理论模型就会有困难。
下面先假设数据符合上面的理论模型,然后在对未知的x0, y1, x1进行估计,然后再验证模型的精确性。在这里先假设以下两点是准确的:
(1)滑轨是直线的;滑轨移动距离是可以实现测量得到的,它等于:。
(2)每个数据点都是在起始点和终止点之间的均匀采样。假设起始点,终止点。
(3)采集数据的个数N=100。
由于采集的距离数据是通过声音传播速度计算得到的,它与真实距离之间相差一个比例,即:
然后通过采集所得到的数据拟合下面的公式:
未知参数包括有:。
模型优化算法采用python中的scipy.optimize优化工具完成模型参数估计。下面给出了三个不同位置下的估计参数和拟合结果
在1米处的数据进行参数估计 使用左右两个声道的距离完成估计的参数分别是:
左声道:a=0.8857, x0=0.5006, y1=1.0319 右声道:a=0.8958,x0=0.2341, y1=1.0445
两个声道的数据是同时测量的,测量的条件相似,它们的距离比例因子a的数值基本相同,大约在0.9左右。
两个声道的x0相差大约为0.266米,这与直接使用钢尺测量两个麦克风的中心位置距离0.265米相差1mm;
由于两个麦克风摆放位置是平行与滑轨,所以它们距离滑轨的距离y0应该是相同的,它们的结果反映了这一点。由于实际测两个麦克风与滑轨的距离为0.9日左右,所以将y1乘以距离因子a,则等于:
这就与实际距离相吻合了。
下图使用了前面估计的参数重新拟合出距离曲线:

在0.5米处的数据处理 使用左右两个声道的距离完成估计的参数分别是:
左声道:a=0.8145, x0=0.4787, y1=0.6492 右声道:a=0.7907,x0=0.2326, y1=0.6177

在0.25米处的数据处理 使用左右两个声道的距离完成估计的参数分别是:
左声道:a=0.7180, x0=0.5241, y1=0.354 右声道:a=0.7039,x0=0.2644, y1=0.349

有了两个麦克的距离差,就可以反过来计算声源的方向和位置。
声音导航是否会受到环境影响?
1. 是否会受到环境噪声的影响?
下面分别测量一下在周围环境比较安静时测量距离和大声播放音乐时测量距离结果。
首先是在周围环境相对比较安静时,测量声波传递距离。下面显示了示波器看到的两个声源通道电压波形。说明周围声源还是比较安静的。

测量两个通道的麦克风距离。总共测量100次,每次之间相隔1.5秒,对应的距离数值如下图所示。

两个通道的均值和方差分别是:
下面在环境内播放我喜欢的歌曲音频,作为背景干扰。
此时两个通道的的电压波形如下图所示。这个电压幅值比测距所使用的Chirp声音信号还要大。

测量两个通道的距离,测量100组数据,每次相隔1.5秒。两个通道测量所得到的距离数值如下图所示:

两个通道的距离均值和方差分别是:
通过上面实验结果可以看出使用Chirp信号进行测距受到普通的环境声音的影响是很小的。
2. 是否会受到周围反射物的影响?
在声源和接收麦克附近如果存在墙壁或者大型的反射物,会对声波产生反射,从而改变原来的声场。这种影响有多大呢?
下面带有棋盘格的木板边长1.15米。厚度15毫米。将该木板搬移到测试现场的四周,靠近接收的麦克,或者扬声器,在此过程中连续测量声音传播距离,观察测量距离受到该反射木板的影响。

下面是在移动木板的过程中,测量得到的50个距离数值。可以看到该数值范围波动在五个厘米的范围内。

3. 是否会受到遮挡物的影响?
如果中间有小型的物体,不遮挡声波的传递,对于测距没有太大的影响。下面分别使用一个小型的塑料箱和稍大一点的纸盒子从声源和麦克风之间经过,测量声波传递距离。
(1)使用小型的塑料盒子:

测量声音传播距离的变化如下面的曲线所示。两个声道所显示的距离上下波动了4厘米。

(2)使用较大的纸盒子下面是将较大的纸盒子从声源到接收麦克之间经过。

下图显示了测量声波传递距离的变化。显示距离变化波动了大约8厘米左右。

从上面的测试可以看出,在声源与接收麦克之间如果有较大的物体,将会使得测量声波传播距离增加。增加的幅值随着遮挡的物体的尺寸增加而增加。
结论
经过简单的几组实验,分别验证了通过声音导航可以达到的测距和方位的精度,对比了环境噪声和障碍物对于测距的影响。说明了基于声音导航可以满足智能车竞赛中作为信标的方式。
为了降低信号处理难度,在上述实验中声音发送的标准信号是作为已知的信号参与计算的。这就使得计算结果的精度和对环境噪声的抗干扰性都得到了提高。

在本文开头的动图中,为什么鸭子总能被狗发现并被追逐,是因为它在受到惊吓或者心情愉悦的时候总是嘎嘎的叫唤。
如果鸭子保持沉默,悄悄的游开,也许就不会引起狗狗的兴趣了。
参考资料
基于STM32F103F ADDA板制作: https://blog.csdn.net/zhuoqingjoking97298/article/details/104180878
[2]声音定位硬件电路: https://blog.csdn.net/zhuoqingjoking97298/article/details/104228214