本文继续上一篇UWB MAC时间网格继续介绍UWB MAC中关于时间同步相关内容。
3、MAC时间网格同步
每个测距会话的定义都基于相对的指定时钟参考 U W B t i m e 0 k UWB^k_{time0} UWBtime0k,相对于发起者的内部时钟定义。
时钟参考 U W B t i m e 0 k UWB^k_{time0} UWBtime0k为第k个测距会话建立MAC层时间网格。
假设在发起者和响应者之间没有非常严格的时钟级同步,则应在每个应答器(响应者设备)建立MAC层时钟网格,基于相对合理的精度范围。这允许每个responder(响应者设备上)确定何时期望从发起者接收Pre-Poll消息,何时需要发送其应答消息给发起者,以及何时期望从发起者接收Final以及Final_Data消息。
每个Responder的大致MAC层时间网格的建立按照如下操作:
- 在每个测距会话的协商阶段,发起者需要发送 U W B t i m e 0 k UWB^k_{time0} UWBtime0k到需要连接到第k次测距会话的响应者设备。
- 每个响应者通过以下方法估计发起者的MAC层时间网格:
- 响应者使用专用的out-of-band(OOB,带外数据)时钟同步(例如通过BLE控制信道)。通过使用OOB时钟同步方法,发起者告知响应设备何时测距会话开始,估计协调器的参考MAC时钟网格 U W B t i m e 0 _ R e s p o n d e r # l k UWB^k_{time0\_Responder\#l} UWBtime0_Responder#lk。对于第(l+1)个Responder的参考时钟,时刻到达后,响应者打开UWB接收机,开始搜寻、等待第一帧UWB包。
- 接收到UWB包之后 ,响应者进一步使用从发起者收到的UWB包持续改善,更加精细化估计MAC时间网格,假设在其专用时隙(dedicated slot)开始之前,每个传入的数据包不是由发起方启动的。
- 飞行时间的计算应不受MAC时间网格的影响。(时间戳信息从UWB来获得,不影响飞行时间计算。从接收到发送,再到收到Final帧,通过来回测量时间戳信息,可以一定程度上消除UWB时钟偏差带来的影响)
在测距会话建立以及同步的过程中,协调器告知所有应答者设备,会话将要开启的时刻,即从多久之后整个测距会话正式启动,协调器将开始发送第一个UWB包。
MAC层时间网络,以发起者为参考,同步也以发起者为基准。其他Responder的数据包,不用于同步。此外,对于车辆等应用而言,也无需接收其他Responder的数据。
对于第k个测距会话,近似MAC网格和时间参考的建立,在第l个responder被标记为,与发起者的时钟参考的关系为:
U W B t i m e 0 _ R e s p o n d e r # l k = U W B t i m e 0 k + ϵ ( k , l ) UWB^k_{time0\Responder\#l} = UWB^k{time0} + \epsilon(k,l) UWBtime0_Responder#lk=UWBtime0k+ϵ(k,l)
其中,误差依赖于采用接收的UWB数据包 ϵ ( k , l ) = ϵ U W B ( k , l ) \epsilon(k,l)=\epsilon_{UWB}(k,l) ϵ(k,l)=ϵUWB(k,l)还是OOB时钟同步协议( ϵ ( k , l ) = ϵ O O B ( k , l ) \epsilon(k,l)=\epsilon_{OOB}(k,l) ϵ(k,l)=ϵOOB(k,l)),用于估计近似MAC层时间网格。此误差的特征以及最小化误差超过了CCC规范的范围,所以并没有在其规范中进行详细的描述,需要在实现时去考虑。
在底层块时间同步处理流程参考示意如下图:
对于Responder设备,会基于预估的同步时钟,提前开启接收机,等待第一帧信号(Pre-Poll信号),进而完成这一轮的测距操作。
4/多跳标记与轮次索引
对于给定RAN的第k个测距会话中的发起者将默认地在第一测距块(Ranging Block 0)的第一个测距轮(Ranging Round 0)中启动UWB测距流程。这假设响应方设备已经通过OOB方法实现了块同步,如果没有,则永久地监听Pre-Poll消息帧。
在发起者端,假设没有资源冲突发生,将根据在测距会话设置中的hopping模式,来确定下一个测距块(i+1)的 H o p _ F l a g k ( i + 1 ) Hop\_Flag^k(i+1) Hop_Flagk(i+1)、 R o u n d _ I d x k ( i + 1 ) Round\_Idx^k(i+1) Round_Idxk(i+1):
- 若多跳模式设置为"no hopping",发起者可以继续使用相同与测距块k相同的测距round 编号。
R o u n d _ I d x k ( i + 1 ) = R o u n d _ I d x k ( i ) = 0 Round\_Idx^k(i+1)=Round\_Idx^k(i)=0 Round_Idxk(i+1)=Round_Idxk(i)=0
H o p _ F l a g k ( i + 1 ) Hop\_Flag^k(i+1) Hop_Flagk(i+1)设置为0。在这种情况下, H o p _ F l a g k ( i + 1 ) Hop\_Flag^k(i+1) Hop_Flagk(i+1)与接收机无关,应该被忽略。相应的,即使在测距工作过程中,由于冲突、干扰等原因导致无法正常进行测距,那也没有办法避免。
- 若多跳模式设置为"continuous hopping",发起者将使用第 S i + 1 k S^k_{i+1} Si+1k测距轮(Ranging Round),
R o u n d _ I d x k ( i + 1 ) = S k ( i + 1 ) Round\_Idx^k(i+1)=S^k(i+1) Round_Idxk(i+1)=Sk(i+1)
此时Hop_Flag设置为1,同样, H o p _ F l a g k ( i + 1 ) Hop\_Flag^k(i+1) Hop_Flagk(i+1)与接收机无关,需要被忽略。(为固定值)
-
若多跳模式设置为"adaptive hopping",那么在发起者,针对下一个测距块(i+1)的 H o p _ F l a g k ( i + 1 ) Hop\_Flag^k(i+1) Hop_Flagk(i+1)和 R o u n d _ I d x k ( i + 1 ) Round\_Idx^k(i+1) Round_Idxk(i+1)按照以下方式计算:
- 若发起者决定round是干净,即没有冲突的且当前的测距轮次测距成功,发起者应停留在当前的测距轮,同时设置: H o p _ F l a g k ( i + 1 ) = 0 Hop\_Flag^k(i+1)=0 Hop_Flagk(i+1)=0, R o u n d _ I d x k ( i + 1 ) = R o u n d _ I d x k ( i ) Round\_Idx^k(i+1)=Round\_Idx^k(i) Round_Idxk(i+1)=Round_Idxk(i)。即,暂时不再往hopping的下一个序列去跳。
- 若发起者发现在当前的round有干扰,或测距不成功,发起者就应该跳到下一个不同的round(已知的Hopping序列,在发起者和接收者两端一致)。
H o p _ F l a g k ( i + 1 ) = 1 Hop\_Flag^k(i+1)=1 Hop_Flagk(i+1)=1
R o u n d _ I d x k ( i + 1 ) = S k ( i + 1 ) Round\_Idx^k(i+1)=S^k(i+1) Round_Idxk(i+1)=Sk(i+1)
此时,发起者需要发送下一次测距块的 H o p _ F l a g k ( i + 1 ) Hop\_Flag^k(i+1) Hop_Flagk(i+1)和 R o u n d _ I d x k ( i + 1 ) Round\_Idx^k(i+1) Round_Idxk(i+1)到响应者设备。该数据作为包含在当前测距序列最后的Final_Data的数据包内。
在响应者设备,针对随后的测距轮次的多跳标记与轮次号,需要按照如下伪代码进行设置:
if Final_Data packet is received
{
Hop_Flag_k(i+1) = Final_Data.Hop_Flag
if(Hop_Flag_k(i+1)=0)
{
set Round_Idx_k(i+1) = Round_Idx_k(i)
}
elseif (Hop_Flag_k(i+1)=1)
{
set Round_Idx_k(i+1) = S_k(i+1)
}
}
else
{
set Round_Idx_k(i+1) = S_k(i+1)
}
处理思路解析:
1、没有收到Final_Data,假设测距是失败的,需要跳到Hopping序列的下一个测距轮。
2、收到Final_Data,按照数据段的Hop_Flag信息判断是否Hopping,若要Hopping,则跳到对应的测距轮次的索引,否则在下一个测距块中保持当前的测距轮索引。
注意:发起者基于干扰等级或数据包的冲突概率来决定是否触发多跳(即Hop_Flag =1)。决策的数据可以通过当前的数据交换,或一系列从应答设备接收到的应答帧来获取(历史数据)。在发起者端,触发多跳的具体标准超出了本规范的范围,有设备供应商来自行决定实现机制。但是,对于所有标准而言都需要满足的是,若没有接收到任何的相应,设备就应该触发多跳。
持续更新,系列教程,收藏关注吧!