最近貌似各个论坛都在推信道侦测技术,听芯片原厂的讲解,这个技术目前只能用于测距,目前用的最多的地方是车钥匙(靠近解锁)。而翻阅了不少蓝牙相关的资料,我发现其实这个技术的底层核心思想就两个,一个是RTT(基于飞行时间的原理),另一个是PBR(基于合成相位)。
下面是个人理解的信道侦测技术的逻辑,如有错误,还需要以蓝牙技术联盟的官方资料为准。
RTT思想
核心原理
RTT的核心思想,个人理解和红外测距差不多,红外测距用的是自己发射个红外脉冲并记录发射时间,同时统计收到的红外脉冲时间(可能会做一些编码,用于抗干扰)。而RTT的测距,由于对方是蓝牙方案,不是纯硬件的反射板,存在接收解码后发送返回数据的过程,因此就取巧地做了这么个逻辑,发送者记录发出(t1)和接收的时间戳(t4),收到者也记录接收到(t2)和发出的时间戳(t3)。之后这么计算:
d = c * (((t2 - t1) + (t4 - t3))/2)
其中:c是无线电传播的速度(空气中几乎约等于光速)。
这个公式的含义是:距离的2倍等于信号在控件中传输总时间乘以无线电的传播速度。
收发端是否需要做时钟同步
而这个公式又恰巧可以变换一下,变成
d = c * (((t4 - t1) - (t3 - t2))/2)
由于t4和t1都是发射端的时间戳,而t3和t2都是接收端的时间戳,就刚好代表了这个计算逻辑不需要考虑发射端和接收端之间的时间戳同步(其实还有另一个理解,接收端并不需要上报实际收发时间,只需要报自己的处理时间即可)。
实际落地限制
实际上c的速度挺快的,一般接近光速,那就意味着,如果我们要基于这个测距,那要测出10m的距离,算出来的总的飞行时间为33.36ns左右,这是一个非常短的时间,这就意味着方案记录的时间戳精度要远远低于此值,否则距离误差会很大。
PBR思想
核心原理
PBR技术,蓝牙技术联盟洋洋洒洒地写了一大堆公式,转来转去地,能把人给绕晕。但是从我的角度上看,核心思想就这么个:如果是2.4G的信号传输,那对方读到信号的相位信息tau时,能估算的距离可以这么换算:
d = (n + (tau / 2pi)) * (c / f)
其中,n为周期数,c/f代表该频率对应的一个周期的传播距离,tau对应相位(0~2pi)
意思是,如果读到一个相位信息,那这个信号可能是在n个周期所对应的距离 加上该相位对应的单次传输距离。
由于c/f为0.125m,因此单纯地靠一个频率计算,能拿到的距离非常多。
但是如果再发一个另一个频率的信号,如2.401G,这个时候还是这么个公式,这个时候会得到另一个表,这个表也会非常大。但是呢,有意思地地方来了。
我记得之前学过一个逻辑,两个不同周期的信号,若做线性组合,那新的信号y = a * x1 + b * x2的周期为两个信号周期的最小公倍数,也就是说,这个新的组合出来的信号的周期就变成了1/f1和1/f2两个时间的最小公倍数了,按照分数的最小公倍数计算算法(若有两个分数a/b和c/d,那这个分数的最小公倍数为 LCM(a,c)/GCD(b,d),其中LCM为最小公倍数,GCD为最大公约数),也就是 1/GCD(f1,f2),再带进去算,就能算出来一个数1/(1000000),也就是说,这个信号频率为1000000Hz = 1MHz,这个数相比较于2.4G,已经是一个很小的数了,它对应的无线电波约为299m,这就有意思了,也就是说,单程的有效距离是299m左右。
而实际上,蓝牙信道侦测测试的距离,是发射端发射信号,之后自己测收回来的信号的,也就是说,这个299米,在实际算距离时是需要算往返,这么算的话,有效距离就得折半,也就是149米左右(这是按照1M的差值计算的,实际上,蓝牙信道侦测,用的信道间隔就是1M,这也是蓝牙信道侦测的最大有效监测距离约150米的由来)。
实际测距的工程操作处理
PBR接收端的处理时长不可忽略
理想的PBR肯定是B收到立即发出去,但是实际上,这不可能,接收端自己收到信号解码后再发出,这本身就需要时间消耗,不可能忽略。此时,再回去看RTT的算法,接收端是有记录自己收到和发出的时间的,因此只需要上报自己的处理时间,那就可以让主机端根据此信息去掉多余的等效距离,即算出的总距离减去接收端实际处理时间对应的距离。这也就是RTT和PBR混合计算逻辑。
收发两端的晶振频偏不可忽略
发射端虽然拿到了接收端的处理时间,但又出现了一个问题了,A并不知道B的时间刻度,且从另一个角度上来讲,A的时钟刻度,也不一定是精确的。
而为了解决这个问题,就有了SS-TWR技术,具体操作过程是:A作为发射端收发一次,再B作为发射端收发一次,两次都采用发射端的时钟尺度换算出时间。由于两边的晶振大概率存在频率不一致现象,这个时间肯定是会有差异,而这个差异是可以通过算法换算出收发两端的实际晶振频偏,再进一步换算出频偏引入的误差。
具体算法逻辑我暂时还没理解透,就不说明了,以免误导人。
相位模糊问题解决
单纯的采用PBR,不管任何距离的信号,最终都会被估算至0~150M的范围内。此时可以考虑参考RTT的距离来进行距离选取(虽然纯RTT误差比较大,但不至于大到150m这种程度(误差约1us,因为RTT要误差小,必须做到ns级别的时间尺度))。
写在最后
写到这,基本上信道侦测技术的核心算法逻辑和部分工程问题的解决已经基本理清了。再往下就是具体在蓝牙上是怎么实现的了,这块老实说,我既非蓝牙技术联盟的维护者,更非手机厂那类专职的研究十几二十年蓝牙协议栈的人员,即使写出也大概率是错误百出的,因此暂时不往下深究了,好好使用这块的技术即可。
我要赚赏金
