GPS:NTP时间注入的工作原理

30

我最近知道了一个在/system/etc/目录下的gps.conf文件。 似乎将NTP_SERVER值调整为更接近通常位置的NTP服务器可以改善TTFF。

阅读LocationProvider类中的源代码,似乎在启动时从NTP服务器检索时间并将其“注入”计算。 据我所知,每个GPS卫星都有非常精确的原子钟,并且每个卫星都与所谓的“GPS时间”同步。一旦接收器获得4个或更多卫星,它会解决(通过某种方法)一个方程式,在其中有四个未知数:x,y,z,b;其中(x,y,z)是接收器位置,b是接收器内部时钟与(正确的)GPS时间之间的时间差。一旦它有一个位置修复,接收器时钟就与正确的时间同步了。(如果我错了,请纠正我)。

到目前为止,我对NTP时间注入的方式有一些问题:

  1. GPS时间大约是TAI(国际原子时间)加上一个偏移量。这两个时间不依赖于地球自转,但UTC依赖于它。鉴于NTP服务器返回UTC时间,是否可以从UTC时间推断出GPS时间?
  2. 如何从更近的服务器检索NTP时间可以改善GPS时间近似值的“质量”?
  3. 假设我们有一个初始的GPS时间值(从某种方式推断出的NTP时间),注入是关于什么的?这个时间值被视为正确的来解决只有x,y,z为未知数的方程吗?如果是这样,那么第一个修复也只是一个近似值,对吗?
  4. 高质量的GPS时间初始近似值如何提高TTFF?这是因为使用低质量的NTP时间会将第一个修复视为不可接受并丢弃吗?
  5. 是否具有近似的初始位置有助于检索下一个正确的修正(例如仅侦听卫星子集)?

1
这个问题涉及GPS如何工作以及如何执行的一些非常深入的问题。我敢说这并不完全适合于Android论坛,因为它没有关于API的问题。也许有更合适的标签来吸引正确的人群的注意?话虽如此,我想知道这些问题是否可以通过查看源代码来得到答案,就像作者开始做的那样。总的来说,我很高兴这些GPS细节似乎都能正常工作,而我并不需要知道它们是如何工作的 :)。 - Ian
3个回答

23

通过查阅维基百科和其他来源,我能猜出以下几点:

  1. 是的,你可以从UTC时间推算GPS时间。你只需要知道时间偏差,它每15秒传输一次,并且大约每18个月更改一次。来源:维基百科

  2. NTP无法给出精确的时间。它测量客户端到服务器的消息时间和服务器到客户端响应的时间。然后将这些时间用于计算连接的延迟。然后将其作为偏移量应用于接收到的时间。这适用于对称路线。如果路线是非对称的,则会有误差。因此,服务器越近,不对称的机会和等级就越低,因此误差就越小。来源:同上

  3. NTP信号并没有直接用于获取GPS定位。但是要获得精确的定位,你需要非常精确的时钟,我们谈论的是纳秒级别的时间。 GPS卫星确实会传输当前的GPS时间,但即使以光速行驶,也会有一些延迟。 GPS接收器无法知道延迟是多少,因此必须从接收到的几个信号中进行近似计算。每次接收到传输就会使时钟更加精确。因此,一开始拥有更好的时间,需要接收的信号就越少,就可以获得准确的时钟。来源:同上

  4. 基本上在3中已经解释了 - 时钟误差越小,需要近似正确时间的信号就越少。

  5. 我在这里猜测一下,但大概有近似的位置可以帮助你更好地近似计算与卫星的距离,从而计算出延迟。(不确定是否真的被使用。)

希望至少有点意义 ;-)


1
这个(AGPS)特别有趣,因为它与FasterGPS主页相关联,这是一款精确执行此操作的Android应用程序。更多关于GPS、时间和一般获取定位的详细信息,请参阅这个惊人的PDF - mirabilos
那份PDF明确指出,对于热启动,时间必须在20秒内准确无误。NTP获取的时间在常见硬件上通常会有5-10毫秒的差异。 - Marki555

3
我的回答将更专注于您问题中的NTP方面。对于GPS,我已经研究了mirabilos在评论中提到的这篇PDF文件
根据该文档,在GPS接收器的温启动过程中,您需要知道时间在20秒内,位置在100公里以内,速度在25米/秒以内,并且历书数据最多几周前。您仍然需要从每个卫星下载星历数据,根据GPS接收器类型,这需要30秒到3分钟不等的时间。
对于热启动,您还需要星历数据(其有效期为4小时)。它们也可以通过A-GPS获取(见下文)。
NTP协议使用服务器层次结构,从最初的时间源- GPS、原子钟等开始。这被称为stratum-0源。直接连接到此源的NTP服务器称为stratum-1。使用此作为上游服务器的服务器是stratum-2,依此类推。即使对于stratum-1服务器,要实现小于1毫秒的误差,您也需要特殊调整的硬件(由于CPU中断延迟、串口延迟、温度振荡器变化等原因)。
在正常网络上的普通硬件(例如未饱和的DSL链路)上,您可以实现约10毫秒的精度。例如,NTP池认为其服务器如果具有100毫秒内的时间精度,则有效且足够好。NTP提供的时间精度不取决于您与NTP服务器之间的地理位置,而更多地取决于层数、该服务器的质量以及该服务器基于网络拓扑结构的距离。
Android手机通常能够以至少1秒的精度知道时间。无论是通过GSM网络的定期时间同步还是如果数据连接(wifi或蜂窝数据)可用,也可以通过NTP来实现。
对于提到的应用程序FasterGPS——将您的NTP服务器更改为更好的服务器将无法帮助您加快TTFF速度。要实现这一点,您需要具有纳秒级精度的时间,这在NTP中是不可能的。只有GPS芯片本身才能以那种精度跟踪时间。在Android上加快TTFF速度的方法包括:
  • 您的Android手机上已经有良好的20秒内的时间
  • 通过Wifi或GSM网络(基于传输塔)获得大致位置
  • 使用A-GPS——它通过互联网下载所有GPS卫星的最新历书和星历数据,因此您无需从GPS卫星上下载(这需要30秒钟的时间用于星历数据和15分钟的时间用于历书)。使用A-GPS,您可以使用热启动,并且TTFF速度在10秒以下。

对于提到的应用程序FasterGPS来说,更改您的NTP服务器不会帮助您获得更快的TTFF时间,我对此表示怀疑。因为该应用在应用商店上有数千条积极的评论。 - Chin

2

Ian在评论中提到的答案与GPS接收器的实际工作原理有关。如果接收器对接收机钟差有更准确的估计,它将更快地得出解决方案。许多接收器实现了一种迭代解决方案,依赖于接收器位置和钟差的初始估计值。如果这些估计已经接近真实值,那么需要的迭代次数就会更少。这只是TTFF较少的部分原因,还有其他重要因素。如果初始位置和时间估计值很好,那么获取卫星信号的搜索过程将花费显著较少的时间,因为接收器可以计算哪些卫星应该可见,并且还可以估计每个信号相对于接收器参考框架的大致多普勒频移。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接