在去年(2019)9月18日在公众号(TSINGHUAZHUOQING)给出了NXP公司宋岩发送过来的一个短视频:在水塘里一只狗在追咬一只鸭子。
狗追鸭子
当时全国大学生智能车竞赛秘书处准备将进行了四届的信标组,由原来的光电导航,改变成声音导航,由此也可以使得该组别的能够适应在各种场地环境,包括室外场地。
那么利用声波定位完成导航究竟能够给出多大精度的导航信息?是否会受到环境噪声的影响?是否会受到周围墙壁反射和中间障碍的影响?
现在受到疫情影响反正也出不去。动手做几个小实验来确定一下这些问题,以便确定该方案是否可行。
在前两天介绍了声源测距的基本原理和数据处理方法。为了能够在单片机上快速完成运动,可以借助于FFT提高计算速度以及完成对相关结果的插值来减少采样时间对空间分辨率的影响。
那么测量的结果究竟会有多大的精度呢?下面通过一组实验来探讨一下。
为了能够模拟未来在信标导航比赛中的实际情况,声源和接收的麦克风都距离地面比较近,将发射声波的蓝牙音箱放置在距离地面17.5厘米高,接收信号的声音探头也放置在相同的高度。他们之间的距离可以改动。
调整扬声器与麦克风之间的距离,分别在相距145厘米,100厘米、50厘米、15厘米下测量声音传播距离。下面是几个不同距离下发送和接收到的声音波形。
在100厘米处采集音频数据对应的示波器得到的输入输出波形。
示波器显示的发送和接收到的音频信号
在53厘米处采集音频数据对应的示波器得到的输入输出波形。
示波器采集到的输出和反射的声音信号
在15厘米处采集音频数据对应的示波器得到的输入输出波形。
总共有四个位置的四组数据,每个位置采集了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 |
现在室温温度 T r o o m = 25 T_{room} = 25 Troom=25摄氏度。声音速度为(m/s): V s o u n d = 331.4 + 0.6 × T a i r = 346.65 V_{sound} = 331.4 + 0.6 \times T_{air} = 346.65 Vsound=331.4+0.6×Tair=346.65
数据采样时间 T s = 0.1 m s T_s = 0.1ms Ts=0.1ms,那么一个采样时间声音传播距离: D s = T s × V s o u n d = 3.4665 c m D_s = T_s \times V_{sound} = 3.4665 \:\:cm Ds=Ts×Vsound=3.4665cm
根据前面测量得到的各个位置相关峰值位置,再根据采样时间声音传播距离 D s = 3.4665 c m D_s = 3.4665\,\,cm Ds=3.4665cm,可以计算出根据声音时间差所得到的距离:
序号 | 位置实测距离(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%。
使用两个相距一定距离的麦克同时测量声波传播距离,根据距离差值可以获得音源的方向和距离。
使用了两个驻极体麦克风来接收声源的声音。它们的固定方式如下图所示。
左右两个麦克风的距离为26.5厘米,距离地面的高度为15厘米。
接收声音的左右声道麦克风的布局
固定在滑轨上的声源采用8 Ω \Omega Ω的动圈式扬声器。它的尺寸和固定的高度见下图所示。它外部固定一个与其尺寸相当的原来的铝质灯罩,可以减少扬声器外部声音断路,提高发送声音的效率。
固定扬声器的滑轨可以做维运动,运动的范围大约0.7米。驱动器可以通过WiFi接收到运动距离的指令。
实验平台
驱动声源扬声器的音频功率放大器是一款双声道的音箱音频放大器。适配电源为12V,BTL输出。前端带有音量、左右平衡、高音、低音调解旋钮。
实验中只是用其中一路来驱动滑轨上的扬声器。
驱动声源扬声器的音频功率放大器
下图是发送和接收声音数据的带有单片机的实验面包板。它的原理在如下相关博文中进行了介绍:
发送和接收声音的数据采集单片机实验面包板
设置麦克阵列在相距滑轨不同的距离下,控制扬声器从左移动到右,每个位置下发出Chirp声音。接收并存储该声音数据。
麦克与滑轨之间的距离
分别将麦克放置在距离滑轨100厘米、50厘米、25厘米左右。滑轨带着喇叭移动,分别测量声源到两个喇叭之间的距离。
1. 在一米处的采集数据
在1米处采集到的D1,D2数据
2. 在50厘米处采集的数据
在50厘米处采集到的D1,D2数据
3. 在25厘米处采集的数据
在25厘米处接收到的D1,D2的数据
(1)实验数据理论模型
根据勾股定理,声源在滑轨上的移动距离和接收声音的麦克风之间的距离为: L 1 = ( x 1 − x 0 ) 2 + y 1 2 L_1 = \sqrt {\left( {x_1 - x_0 } \right)^2 + y_1^2 } L1=(x1−x0)2+y12
滑块移动距离与声源和接收传感器之间的距离关系
下图就是在x0=50, y1=25, x1在[0,100]范围内,L1与x1之间的关系:
横向运动距离 与直线距离之间的关系曲线
(2)根据采集数据估计麦克的方位
从前面实验所得到的不同位置的d1,d2数据曲线来看,它们都大体呈现与上面理论模型相近的性质。只是在实验中粗略的知道y1,x0,x1的数据,实际上测量并不精确。再加上实验中声速也是一个变化量,所以直接使用原始数据来验证它是否符合理论模型就会有困难。
下面先假设数据符合上面的理论模型,然后在对未知的x0, y1, x1进行估计,然后再验证模型的精确性。
在这里先假设以下两点是准确的:
(1)滑轨是直线的;滑轨移动距离 Δ D \Delta D ΔD是可以实现测量得到的,它等于: Δ D = 0.79 m \Delta D = 0.79m ΔD=0.79m。
(2)每个数据点都是在起始点 x s t a r t x_{start} xstart和终止点 x s t o p x_{stop} xstop之间的均匀采样。假设起始点 x s t a r t = 0 x_{start} = 0 xstart=0,终止点 x s t o p = Δ D x_{stop} = \Delta D xstop=ΔD。
(3)采集数据的个数N=100,数据为: { L n } , n = 0 , 1 , . . . , N − 1 \left\{ {L_n } \right\},n = 0,1,...,N - 1 {Ln},n=0,1,...,N−1
这个数据时通过声音传播速度计算得到的,它与真实距离之间相差一个比例 a a a,即: d n = a ⋅ L n d_n = a \cdot L_n dn=a⋅Ln
然后通过采集所得到的数据 { L n } \left\{ {L_n } \right\} {Ln}拟合下面的公式:
x 1 n = x s t o p − x s t a r t N − 1 ⋅ n + x s t a r t = Δ D N − 1 ⋅ n x_{1n} = {{x_{stop} - x_{start} } \over {N - 1}} \cdot n + x_{start} = {{\Delta D} \over {N - 1}} \cdot n x1n=N−1xstop−xstart⋅n+xstart=N−1ΔD⋅n
L n a = ( x 1 n − x 0 ) 2 + y 1 2 {{L_n } \over a} = \sqrt {\left( {x_{1n} - x_0 } \right)^2 + y_1^2 } aLn=(x1n−x0)2+y12
未知参数包括有: { a , x 0 , y 1 } \left\{ {a,x_0 ,y_1 } \right\} {a,x0,y1}。
模型优化算法采用python中的scipy.optimize优化工具完成模型参数估计。下面给出了三个不同位置下的估计参数和拟合结果
两个声道的数据是同时测量的,测量的条件相似,它们的距离比例因子a的数值基本相同,大约在0.9左右。
两个声道的x0相差大约为0.266米,这与直接使用钢尺测量两个麦克风的中心位置距离0.265米在误差范围1mm内是相同的;
由于两个麦克风摆放位置是平行与滑轨,所以它们距离滑轨的距离y0应该是相同的,它们的结果反映了这一点。由于实际测两个麦克风与滑轨的距离为0.9日左右,所以将y1乘以距离因子a,则等于: D = a × y 1 = 0.8857 × 1.0319 = 0.913 D = a \times y_1 = 0.8857 \times 1.0319 = 0.913 D=a×y1=0.8857×1.0319=0.913。这就与实际距离相吻合了。
两个声道数据和参数估计后拟合数据
左右两个声道原始数据和参数估计后的拟合数据
左右两个声道原始数据和参数估计后的拟合数据
有了两个麦克的距离差,就可以反过来计算声源的方向和位置。
下面分别测量一下在周围环境比较安静时测量距离和大声播放音乐时测量距离结果。
首先是在周围环境相对比较安静时,测量声波传递距离。下面显示了示波器看到的两个声源通道电压波形。说明周围声源还是比较安静的。
在没有环境干扰的情况下两个声道的音频电压信号
测量两个通道的麦克风距离。总共测量100次,每次之间相隔1.5秒,对应的距离数值如下图所示。
安静情况下采集到两个声道的距离数值
两个通道的均值和方差分别是:
m e a n ( d 1 ) = 0.8753 , v a r ( d 1 ) = 5.3 × 1 0 − 8 mean\left( {d1} \right) = 0.8753,\,\,\,\,{\mathop{\rm var}} (d1) = 5.3 \times 10^{ - 8} mean(d1)=0.8753,var(d1)=5.3×10−8
m e a n ( d 2 ) = 0.8275 , v a r ( d 2 ) = 7.52 × 1 0 − 7 mean\left( {d2} \right) = 0.8275,\,\,\,\,{\mathop{\rm var}} (d2) = 7.52 \times 10^{ - 7} mean(d2)=0.8275,var(d2)=7.52×10−7
下面在环境内播放歌曲音频,作为背景干扰。此时两个通道的的电压波形如下图所示。这个电压幅值比测距所使用的Chirp声音信号还要大。
在有背景音乐的情况下两个声道的音频电压信号
测量两个通道的距离,测量100组数据,每次相隔1.5秒。两个通道测量所得到的距离数值如下图所示:
有背景音乐情况下采集到两个声道的距离数值
两个通道的距离均值和方差分别是:
m e a n ( d 1 ) = 0.8785 , v a r ( d 1 ) = 1.356 × 1 0 − 6 mean\left( {d1} \right) = 0.8785,\,\,\,\,{\mathop{\rm var}} (d1) = 1.356 \times 10^{ - 6} mean(d1)=0.8785,var(d1)=1.356×10−6
m e a n ( d 2 ) = 0.8275 , v a r ( d 2 ) = 1.256 × 1 0 − 6 mean\left( {d2} \right) = 0.8275,\,\,\,\,{\mathop{\rm var}} (d2) = 1.256 \times 10^{ - 6} mean(d2)=0.8275,var(d2)=1.256×10−6
通过上面实验结果可以看出使用Chirp信号进行测距受到普通的环境声音的影响是很小的。
在声源和接收麦克附近如果存在墙壁或者大型的反射物,会对声波产生反射,从而改变原来的声场。这种影响有多大呢?
下面带有棋盘格的木板边长1.15米。厚度15毫米。将该木板搬移到测试现场的四周,靠近接收的麦克,或者扬声器,在此过程中连续测量声音传播距离,观察测量距离受到该反射木板的影响。
大型木板用于摆放在声源和接收麦克后面和侧面
下面是在移动木板的过程中,测量得到的50个距离数值。可以看到该数值范围波动在五个厘米的范围内。
在声源和麦克周围移动大型木板对声音传播距离的影响
如果中间有小型的物体,不遮挡声波的传递,对于测距没有太大的影响。下面分别使用一个小型的塑料箱和稍大一点的纸盒子从声源和麦克风之间经过,测量声波传递距离。
(1)使用小型的塑料盒子:
小型塑料箱进行遮挡
测量声音传播距离的变化如下面的曲线所示。两个声道所显示的距离上下波动了4厘米。
在有小型塑料从中间移动过对距离的影响
(2)使用较大的纸盒子
下面是将较大的纸盒子从声源到接收麦克之间经过。
中间设置有较大纸盒子移动过
下图显示了测量声波传递距离的变化。显示距离变化波动了大约8厘米左右。
大型纸箱子从中间移动过对距离的影响
从上面的测试可以看出,在声源与接收麦克之间如果有较大的物体,将会使得测量声波传播距离增加。增加的幅值随着遮挡的物体的尺寸增加而增加。
经过简单的几组实验,分别验证了通过声音导航可以达到的测距和方位的精度,对比了环境噪声和障碍物对于测距的影响。说明了基于声音导航可以满足智能车竞赛中作为信标的方式。
为了降低信号处理难度,在上述实验中声音发送的标准信号是作为已知的信号参与计算的。这就使得计算结果的精度和对环境噪声的抗干扰性都得到了提高。
Dog Chasing Duck
在本文开头的动图中,为什么鸭子总能被狗发现并被追逐,是因为它在受到惊吓或者心情愉悦的时候总是嘎嘎的叫唤。如果鸭子保持沉默,悄悄的走开,也许就不会引起狗的兴趣了。