之前已经用LimeSDR实现了测速和测距,后来又用声卡实现了测速,所以自然而然想到要用声卡实现测距。
其实对于测速来说,不管是LimeSDR还是声卡,都是通过多普勒频移来实现的。
但是测距就有点不一样,测距基本原理是需要用某种方法计算发射和接收的时间差,通过时间差和速度来算距离,而无线电波的速度(光速)与声速差异是非常大的,所以用到的算法就很不一样。
我之前玩无线电测向和声波测向,目标是计算两个接收通道之间的时间差,对于无线电波来说,我比较的是相位差,对声波我使用互相关算时间差。
我在本系列第6篇中,已经用LimeSDR的收发通道之间的相位差测过距离了,那么我应该也能用互相关算法计算声卡的收发通道之间的时间差,实现用声卡测距离。
理论算法很简单,时域互相关对应频域共轭相乘,可以先用fft变到频域,做完共轭相乘再变回时域,就得到了互相关函数,再把波峰的横坐标取出来就对应时间差了。
上面就是流图。
实际实现会有好几个坑:
1.喇叭和麦克风需要有一定方向性。
2.反射到物体上效果不好,最好直接测喇叭到麦克风之间的距离。
3.互相关波峰最好不要放在0位置,否则会被衰减,要往右偏移一些。
4.声卡本身的收发采样可能有问题,实际收发没有延迟时, 波峰也在不停变化。
5.alsa声卡选择使用的参数问题。
大家如果要玩的话需要注意避坑!
流图:
链接: https://pan.baidu.com/s/1_nN7uCmC-8oyZyRE9m1axQ 提取码: f6i6
视频: