我觉得Timestamp是OpenBTS 实现严格时隙同步一个非常精彩的方案,对于以后使用USRP都有很多参考价值
利用这次机会我将我对OpenBTS如何实现实习同步进行一次简单的介绍,希望对研究OpenBTS的朋友有所帮助,如果有理解不对的地方,希望您及时指出,从而不会对其他的学习者造成误导。
一)如何实现采样值的时钟同步
由于计算机和USRP之间没有精确的时钟同步信号,OpenBTS采用时间戳Timestamp的方式来保证二者的相对时间同步。
计算机和USRP都维持一个timestamp的64位变量作为时间标记,为了便于区分
计算机端的timestamp我们称之为 c_timestamp
USRP端的timestamp 我们称之为 u_timestamp
c_timestamp 是在Radiointerface 中的一个变量,它通过接收样值的数目进行更新,比如接收到了625个样值以后,c_timestamp=c_timestamp+625, 另外c_timestamp 也成了时间戳与gsm时钟的桥梁,因为c_timestamp每增加625,则时隙gsm时钟增加4个时隙。
u_timestamp可以理解为usrp中通过其采样时钟激励的一个计数器,每增加一个采样值,其值会增加1,在往计算机打包数据时,会将每一包中第一个采样值对应的计数及其对应的u_timestamp封装在数据包头处。而这个值可以通过USRPDevice中的readsamples获取
我们知道c_timestamp 和 u_timestamp是两个不同的计数器,在理想状况,c_timestamp和u_timestamp 应该是保持一个稳定的差值, 只要这个时间差在允许范围之内,就不影响bts的正常工作。然而实际中确会出现各种异常。比如USRP出现过载,即计算机无法及时地读取USRP中的数据,c_timestamp就会落后于u_timestamp。
为了解决c_timestamp 和 u_timestamp 逐渐分离的问题,bts 采用updatealignment 周期的用c_timestamp 去重置u_timestamp,从而保证二者的差值一直处在可以接受的范围之内,从而实现了一定程度上计算机中的样值和USRP中的样值同步。
二)如何实现上下行的同步
我们知道,USB的传输是时间是非常难以精确控制的,那么如何保证上行和下行的数据准确的相差3个时隙,同样依赖于timestamp这一巧妙的配置。
由于有上面c_timestamp和u_timestamp的同步机制,我们现在可以放心的人为c_timestamp和u_timestamp是几乎同步的,下面将GSM时钟和timestamp的关系表述如表
样值方向 计时方式 通信方向 计时方式
上行: USRP-->计算机 u_timestamp 手机-->基站 gsm uplink clock
下行: 计算机-->USRP c_timestamp 基站-->手机 gsm down link clock
从上行开始,USRP接收好了数据包,按照u_timestamp的顺序在计算机端存储,计算机通过c_timestamp去读取特定时刻的样值,因为u_timestamp和c_timestamp同步,因此可以认为按照c_timestamp读取的样值就是对应usrp时钟u_timestamp时的样值。
然后根据读取的样值数目,同样可以理解为c_timestamp的更新量去更新gsm uplink clock
而下行的时钟gsm downlink clock通过gsm uplink clock – 3 slot 得到,所以通过与timestamp与时隙的对应关系可以得到每个下行时隙样值所需发送的对应c_timestamp, 此时需要提前将该数据发往USRP中,同时通过c_timestamp标记每一个数据包待发送的时间,usrp根据本身的u_timestamp来确定何时发送哪一组样值,只要c_timestamp和u_timestamp差值不大,那么上下行的同步就能得到保证。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。