由于得到delay值后对offset值的计算是根据式(1)中的第一个式子得到,所以由图2N分析可得,offset值可以比精确值偏大,也可以比精确值偏小,且从概率上来讲应为等概的,故可采用较为简单的均值滤波算法进行平滑即可。
其次,引起误差的外部因素主要来自环境对系统和仪器的影响和时间印章(时间戳)的准确性,前者主要反映在晶振的速率上,而后者主要反映在IEEEl588时间协议的实现上。
在晶振速率方面,由于仪器的时钟是由普通晶振提供的,所以环境(如温度)的变化将极大地影响晶振的速率,常用品振精度不高,大概在100ppm左右,而对一般的LXI模块则每隔2s进行一次同步,那么可以计算得到两个模块之间最大的偏差是400μs,故不可忽略。通常高精度仪器的晶振可以安在恒温槽中(如OCXO),但考虑到成本和仪器简化等因素,采用晶振同步自适应方法改进。设R,R′分别为主机和从机的品振速率,△t表示两次测量晶振速率的时间问隔。那么分别计算一段时间内每台从机记录的本地时钟时间,然后从机与主机进行比较来调整时钟计数值,调准方案如下式所示,M,N分别为存△t的时间间隔内主从机的时钟计数值。
为了使其更具自适应能力,可以根据上述方法计算t1′,t2′…tn′多个时间点时钟计数调整值,并据此由曲线拟合的方法得到下一时间段[tn′,tn+l′]内的晶振速率,起到不断校正品振偏差,使从机时钟达到跟随主机时钟变化的目的。
实现IEEEl588(PTP)时钟协议的方法有通过FPGA实现、通过集成有PTP协议的网络收发芯片实现等几种。通过FPGA实现的方法是最常用的,但方法繁琐、实现精度不高。而最近出现的集成有PTP时钟协议的实现方案方便快捷、实玑精度高,因此迅速被广大设计者所接受。其硬件框图如图3所示。
在上述FPGA实现PTP的方案中,信息包加时间戳这一关键步骤也有几种实现方法,每种方法产生不同的同步精度。见图4所示。