本文继续上一篇UWB MAC时间网格继续介绍UWB 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层时间网格的建立按照如下操作:
在测距会话建立以及同步的过程中,协调器告知所有应答者设备,会话将要开启的时刻,即从多久之后整个测距会话正式启动,协调器将开始发送第一个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信号),进而完成这一轮的测距操作。
对于给定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):
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)与接收机无关,应该被忽略。相应的,即使在测距工作过程中,由于冲突、干扰等原因导致无法正常进行测距,那也没有办法避免。
此时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)按照以下方式计算:
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)。决策的数据可以通过当前的数据交换,或一系列从应答设备接收到的应答帧来获取(历史数据)。在发起者端,触发多跳的具体标准超出了本规范的范围,有设备供应商来自行决定实现机制。但是,对于所有标准而言都需要满足的是,若没有接收到任何的相应,设备就应该触发多跳。
持续更新,系列教程,收藏关注吧!
1、CCC联盟——UWB PHY
2、CCC联盟(一)——UWB MAC概述
3、CCC联盟数字车钥匙(二)——UWB MAC时间网格