声音定位是指动物利用环境中的声音刺激确定声源方向和距离的行为。用于觅食,寻找幼仔、父母,躲避捕食者等。取决于到达两耳的声音的物理特性变化,包括频率、强度和持续时间上的差别。为模仿这一生物现象,许多定位方法被应用到了音源定位当中,声音定位技术最早被应用在声呐系统中,后来逐渐地应用到探测水下目标的领域,因为电磁波在海水中会有较为明显的信号衰减,所以电磁波的传输距离就会受到较大的限制,而声音定位技术因为其自身特点,刚好弥补了电磁波的不足。
时至今日,声音定位作为一种已经应用广泛的技术,利用声学传感器以及与其相连的电子设备(MCU)和相关电路,处理接收到的声波信号,确定声源的位置。但诸多声音定位方案往往对传感器精度要求较高。在嵌入式系统中由于ADC采样速率或微控制器的算力限制,常常不能达到很高的精度。
为解决这一问题,本文提出了一种利用声音信号定向,FM信号辅助计算距离的方法,能够在确保一定精度的条件下,实现快速且准确的定位。其中,声音定向使用广义互相关计算多个麦克风到声源的距离差,具有较强的抗扰性。
目前应用比较广泛的定位算法有信号到达时间测量AOA、信号到达角度测量AOA、接收信号强度指示RSSI、信号到达TDOA等。
接下来对上述算法的利弊及在智能车信标组中的可行性进行分析
由于声音的传播速率是确定的,只要测量出信号发送与接收之间的时间差,就可以根据传输时间计算出到声源的距离。声源目标即在以麦克风为中心,距离为半径的圆上。当至少有三个不同位置的麦克风到声源的距离时,即可通过三个或更多个圆的交点为声源位置。但是由于信标组原有chrip信号的发送频率和tc264的算力限制,用fm信号和麦克风信号互相关得到的距离分辨率只有1.7cm,而且受限于车身大小,麦克风间距比较近,显然不足以用于进行AOA定位。该算法更加适合使用多个距离较远的基站定位。
通过阵列智能天线测出声源目标与基站之间所成的夹角,直接用多个夹角的连线交点确定声源位置。显然该方法难以应用在智能车信标组的比赛中。
通过接受到信号的强弱测定接收点到天线的距离。但该算法需要非常准确的信号衰减模型,在智能车信标比赛中显然也难以实现。
该算法是TOA算法的改进,使用两麦克风之间的距离差用于定位,从而也就不再需要严格的时间同步信号。用两个声音信号即可确定声源在一组双曲线上。当有多个双曲线时,即可通过解双曲线的交点计算出声源位置。该算法的硬件实现相对最为简单,我们的算法本质上也是在特定麦克风排布下,TDOA算法的近似解。不过仍然是由于距离差精度不够高,直接使用解方程方法的话,计算时间长且精度较低。
假设两个麦克风接收到的信号分别为:
式中 为声源信号, 和 为互不相关的噪声,音源信号与噪声信号也是互不相关的, , 为声波传到麦克风的时间, , 为声波的衰减系数。 为两麦克风间的时延。
声源到两个麦克风的信号的互相关可以表示为:
由此:
由相关函数的性质得到,当 时 , 取最大值。因此,求得 的最大值对应的 就是两个麦克风之间的时延 。
由互相关函数与功率谱的关系可得:
式中, 为麦克风信号 间的互功率谱。
在实际中由于有限样本估计以及噪声的影响,互相关估计可能没有一个明显的尖峰存在。为了凸现尖峰,可以先对数据进行滤波处理,它等效于在频域的加权处理,这有利于加强接收信号中源信号的谱分量,提高信噪比,从而获得更高的时延估计精度。
广义互相关法通过求两信号之间的互功率谱,并在频域内给予一定的加权。来对信号和噪声进行白化处理,增强信号中信噪比较高的频率成分,从而抑制噪声的影响,再反变换到时域,得到两信号之间的广义互相关函数,即:
式中为广义互相关加权函数。PHAT加权函数的数学式为 ,PHAT加权相当于白化滤波,对大噪声能取得较好效果。
通过广义互相关的方法可以求出到达时间或者到达时间差,即可以计算出声音音源到麦克风的距离,或音源到不同麦克风的距离差。下面是一种常见的传统定位算法。
Trilateration(三边测量)是一种常用的定位算法,已知三点位置 , , 已知未知点 到三点距离 为半径作三个圆,得出交点的计算式:
设未知点位置为 , 令其中的第一个球形 的球心坐标为 (0, 0), 处于相同纵坐标,球心坐标为 (d, 0), 球心坐标为 (i, j),三个球形半径分别为 。则有:
解得未知点坐标:
实际应用中,三个圆不能恰好交为一点,可以采用最小二乘法进行估计得到未知点坐标。在求解非线性方程组的过程中需要用到Chan算法,Chan算法在求解非递归的双曲线方程组时计算量相对较小,比较适合单片机进行计算,而且由于该算法可以处理一定的高斯噪声,在智能车使用中可以取得比较好的定位结果。
不过在实际测试中,虽然该算法准确率较高,但计算时间相对较长,下面提出一种特殊麦克风(基站)排布下的极简定位算法。
为了解决上述问题,我们将定向与测距分离,使用四麦克风采集声音进行方向计算,再对FM和声音信号进行互相关计算得到距离。车模上安装有4个呈正方形排列的麦克风,以及一个fm模块。我们依靠两组麦克风的到达时间差确定方位,依靠fm与麦克风互相关计算距离,然后根据距离差的差,计算出声源的方向。
以正方形中心为远点建立坐标系,则四个麦克风坐标为 , 其中i=1,2,3,4,设声音音源坐标为 ,现将声音音源到麦克风1的距离 与声音音源到麦克风4的距离 做差,即 以正方形中心为远点建立坐标系,则四个麦克风坐标为 , 其中i=1,2,3,4,设声音音源坐标为 ,现将声音音源到麦克风1的距离 与声音音源到麦克风4的距离 做差,即
将 与 用计算公式表示
同理可以得到 的表达式
现将 与 取绝对值后做差dangle=d14-d23:
利用Matlab绘制出 随 变化的图像,通过下图可以直观看出在同一方向上 大致相同,证明该方法具有一定的合理性。
下面利用matlab定量绘制某一方向的 值,由曲线可知 在距离相对较远时无限趋近某一常数,如下图所示,而今年灯壳的半径加上车身已超过30cm,是满足音源相对较远这一条件。因此可以用 唯一确定音源角度。
分别记两组对角线上麦克风的距离差为距离差1和距离差2,通过matlab仿真可以进行论证,两组对角线麦克风的距离差的差(以下简称为距离差的差)在距离相对较远时无限趋近某一常数,该常数随着角度变化而发生改变,如下图。由于今年新版信标灯的灯壳半径加上车身已超过30cm,是满足这一条件的,在实际测试中距离差的差也确实是一个常数。为了防止近距离误判,也使用fm与麦克风互相关测出的距离进行限制。
下面将求解这一常数与声源角度的对应关系。仍然使用matlab仿真进行分析,结果如图5.2所示。图5.3则是智能车车模的实际测试验,用麦克风数据互相关算出的距离差、距离差的差与角度的关系。接收采用山外上位机,红线和蓝线分别为两组距离差,棕线为距离差的差,可以发现与matlab仿真结果基本保持了一致。
由matlab仿真图不难分析出,虽然单独根据距离差的差不能推导出确定的声源角度,但如果结合两个距离差本身的正负进行辅助,只需要进行简单的分段线性变换,就可以很好的将距离差的差与声源角度一一对应起来。具体对应结果如图5.4,可以发现求解非常接近线性关系。由于比赛所用chrip信号的频率和tc264芯片算力和存储能力的限制,综合控制所需实时性的考量,我们最终选择了20khz的adc采样速率,理论上用该算法解算声源角度的分辨率为2.3度,误差在0.6度以内,完全满足智能车信标组比赛的要求。
本文分析了传统定位方法的优缺点,包括chan算法,三边测量方法等,这些方法虽然准确,但对时延精度要求较高,我们所使用的微控制器采样和处理能力无法达到要求。我们进而提出了适合本竞赛项目的简单定位算法,并使用matlab完成仿真,通过仿真证明了其合理性。之后进行实物进行测试,证实了该方法的定位精度能够满足要求,且实时性较好,能够在本竞赛项目中达到令人满意的定位效果。