我最近知道gps.conf
目录中的/system/etc/
文件。
似乎将NTP_SERVER值调整到更靠近通常位置的NTP服务器可以改善TTFF。
读取LocationProvider
类中的源代码,似乎在启动时,从NTP服务器检索时间并在计算中“注入”。
每个GPS坐着的AFAIK都有一个非常准确的原子钟,星座中的每一个都与所谓的“GPS时间”同步。一旦接收器有4个或更多卫星,它(通过某种方法)解决了一个方程,其中有四个未知数:x,y,z,b;其中(x,y,z)是接收器位置,b是接收器内部时钟和(正确)GPS时间之间的时间差。一旦修复,接收器时钟就会与正确的时间同步。 (如果我错了,请纠正我。)
到目前为止,我对NTP时间注入的工作方式有一些疑问:
答案 0 :(得分:22)
好好侦察一些维基百科和其他一些消息来源,让我猜一想。
是的,您可以从UTC时间推断GPS时间。您只需知道偏移量,它每15秒传输一次,并在大约18个月内更改一次。资料来源:Wikipedia
NTP没有给你准确的时间。它测量消息从客户端到服务器的时间以及响应从服务器到客户端的时间。然后使用这些时间来计算连接的延迟。然后将其作为接收时间的偏移量应用。这适用于对称路线。如果路线是不对称的,则会出错。如此靠近服务器,降低不对称的机会和水平,从而降低误差。来源:Wikipedia再次
NTP信号不直接用于获取GPS定位。但要获得准确的修复,您需要非常精确的时钟。我们在这里谈论纳秒。 GPS卫星确实传输当前的GPS时间,但即使它以光速传播,也会有一些延迟。 GPS接收器无法知道延迟是什么,因此它必须从几个接收信号中估算出来。随着接收到的每次传输,时钟变得更加精确。因此,您在开始时拥有的时间越长,获得准确时钟所需的时间就越少。资料来源:Wikipedia
3中已经解释得很清楚 - 时钟误差越小,接近正确时间所需的信号越少。
我在这里猜不到,但是有一个大概的位置可以帮助你更好地近似卫星的距离,从而延迟。 (不确定是否真的使用过。)
我希望它至少有点意义; - )
答案 1 :(得分:3)
我的回答将更多地放在你问题的NTP方面。对于GPS,我研究了mirabilos在评论中提到的this PDF paper。
根据该文件,对于GPS接收器的热启动,您需要知道20s内的时间,100km内的位置,25m / s内的速度和最少几周的历书数据。您仍然需要从每颗卫星下载ephemiride数据,根据GPS接收器类型需要30秒到3分钟。
对于热启动,您还需要星历表数据(它们有效期为4小时)。它们也可通过A-GPS获得(见下文)。
NTP协议使用从原始时间源开始的服务器层次结构--GPS,原子钟......这称为stratum-0源。直接连接到此源的NTP服务器称为stratum-1。使用它作为上游服务器的服务器是stratum-2,依此类推。即使对于stratum-1服务器,您也需要特殊的调整硬件才能实现小于1 ms的错误(由于CPU中断延迟,串行端口延迟,温度振荡器更改)。
在普通网络上使用普通硬件(例如,不是饱和的DSL链路),您可以达到大约10毫秒的精度。例如,NTP pool认为其服务器有效且足够好,如果它们在100毫秒内具有精确的时间。来自NTP的时间准确性不依赖于您和NTP服务器之间的地理位置,而是更多地取决于层,服务器的质量以及服务器基于网络拓扑的距离。
Android手机通常知道时间内至少1秒的准确度。可以通过GSM网络定期进行时间同步,也可以通过NTP进行数据连接(wifi或蜂窝网络)。
对于上面提到的应用程序 FasterGPS - 将您的NTP服务器更改为更好的服务器将无法帮助您获得更快的TTFF。为此,您需要在纳秒内获得精确的时间,这是通过NTP无法实现的。只有GPS芯片本身能够以这种精度跟踪时间。 Android有更快的TTFF有助于:
答案 2 :(得分:2)
Ian的评论是正确的,答案与GPS接收器的实际工作方式有关。如果接收器具有更精确的接收器时钟偏差估计,接收器将更快地找到解决方案。许多接收器实现了迭代解决方案,该解决方案依赖于接收器位置和时钟偏差的初始估计。如果这些估计值已经接近真实值,那么将需要更少的迭代次数。这只是TTFF会减少的部分原因。还有其他重要因素。如果初始位置和时间估计是好的,则用于获取卫星信号的搜索过程将花费显着更少的时间,因为接收器可以计算哪些卫星应该是可见的并且还可以估计每个信号经历的近似多普勒频移。接收者的参考框架。