转 【MIUI基础普及】【硬件篇】 浅谈手机GPS(A-GPS)定位因素原理

http://www.miui.com/article-8-1.html

现在很多手机都支持AGPS了,吹的很神乎,
但真正是怎么一个原理,怎么实现,对GPS定位的关系以及制约因素
却很少人知道。所以在使用过程中有误区,也有困惑。

于是,我简单说说AGPS实现的原理和结合X500的应用吧:
从GPS冷起说起。
GPS接收机冷起后,GPS接收机内是什么数据都没有的。
必须从零开始接受GPS卫星的信号,逐步分析当前头顶上每颗发送信号的卫星的频率,
是什么编号,运行轨迹,才能最终锁定卫星;
锁定好卫星,GPS终端才能定位自己的位置。
所以冷起后的定位非常慢,一般要在开阔地十几二十分钟,
而室内或者信号不好的地方,几个小时都不一定定位得上。

一旦GPS终端定位成功,在GPS接收芯片的内存中,一般会一直保留/更新以下几个数据

1.最后一次定位的经纬度(一个区域值)
2.最后一次定位位置上空卫星的数量和轨迹以及预测的四小时之内这些卫星的位置。(这就是短效星历)

这两个数据非常关键。
依赖这这组数据,当GPS关机或者丢失信号之后,
再次启动接受到卫星信号的时候,就可以不用去计算卫星轨道了,
只要简单的调整配对,就可以锁定卫星,快速定位。
这也就是为什么GPS短暂的关机开机,进隧道出隧道,再次定位的速度都很快的缘故。

但应该注意这些数据都不是长期有效的,不能随时随地帮GPS实现快速定位。
一种情况是时间过期。这GPS内存储的星历时效一般不超过4小时。
也就是说,如果你关了GPS超过四小时,
即使没有大距离移动,仍然在原来的城市里,而GPS内的保留星历依然会因超时而失效。
此时头顶的卫星已经不是星历里记录的那几颗了,必须再次一颗一颗的去计算卫星轨道。
当然,此时“最后一次定位的经纬度”是有效的,
有一个参考值,锁定卫星的速度还是比冷起稍微快一点点的。

另外种情况是地域错误。比如,你出差了。
四个小时内,关着GPS坐飞机从北京到了上海。
这时候,GPS芯片里存放的数据就不论是否超过4个小时都完全失效。
因为,你所处的位置已经不是GPS内存中记录的那个经纬度了,
内存中的星历,是北京上空的星历,跟上海头顶上的卫星无关。
此时若要锁定GPS卫星,缓慢就跟冷起无异。

以上都是标准GPS定位时间的关键因素,而AGPS呢?
通过上述分析,我们可以知道:
是否存在有效的“当前位置范围”以及其相关的星历数据是卫星能否快速定位的关键
由于从卫星计算出来的星历,时效短,于是AGPS技术出现。
AGPS不依赖GPS接收机的计算或存储,
通过其他的渠道给GPS芯片提供GPS终端机所处位置正确星历,实现随时随地的快速定位

AGPS实现方式也有两种。
一种是实时更新的星历-通过手机基站。
基站是跟AGPS服务器连接的,AGPS服务保存了卫星完整的轨迹资料,
基站跟AGPS服务器连接,就可以得到基站所处位置(基站的经纬度都是有记录的)的星历,
于是再把这两样数据通过GSM,CDMA等协议发到你的手机(你的手机应该离基站不远)上,
实时的更新GPS芯片上的星历,这样GPS定位速度和精度都有很大的提升,哪怕冷起都很快的定位。
到北京,北京的手机基站告诉你北京的星历,到上海,上海的基站告诉你上海的星历,
不再担心星历的失效问题。
不过实现这一功能需要基站的支持,需要实时的流量,还需要专门的AGPS软件。
我们普通的导航软件都不支持这种实时的AGPS。

而我们常用的AGPS应用是另外一种方式-下载长效星历。
前面说到,GPS芯片计算并储存的星历,最多只能推演到4个小时内的。
超过四个小时了,GPS就不认识头顶上的卫星了。
于是,就存在一种AGPS星历软件,
通过INTERNET从AGPS服务器上下载了当前位置(是到GPS芯片中获取“最后一次定位的经纬度")
上空若干天内的卫星数据(长效星历)存放在PDA或手机上。
当导航软件通过AGPS驱动端口去调用GPS芯片通信的时候,
AGPS驱动就先把当前时间的卫星星历上传到GPS芯片上,帮助GPS芯片锁定卫星。
这样就不用担心GPS芯片内星历数据四个小时后失效的问题了,即使冷起GPS,也无需漫长的卫星锁定时间
但这个长效星历也有一个最大的缺陷。没错,必须有正确的“当前位置”。
如果你在北京下了长效星历,然后出差到上海,这星历依然失效。
必须先要做一次漫长的“冷起”定位,取得正确的“最后一次定位的经纬度"后,
重新下载长效星历,GPS才能恢复快速的定位速度。

通过以上的分析,我们应该可以很好的理解X500的GPS工作情况。
很多朋友抱怨X500刷机后,GPS坏了。
虽然我不能排除脆弱的GPS天线在刷机过程中刷断的可能性或者确实是ROM有问题,
但GPS失效的最大可能原因还是星历的完全丢失。
我们习惯于X500快速的GPS定位,而手机内置的GPS芯片也少有冷起的机会,
所以正常需要在按空旷地等待20分钟的冷起定位就容易让人等心急了。
刷完机,放到窗口10分钟还不见定位成功,有的同学可能就会跳起来了,呵呵。

这种情况下,那AGPS长效星历肯定是没有的。
用COM7的AGPS端口连接GPS芯片,必然影响其GPS芯片正常的冷起定位。
所以建议先耐心得用COM4硬件端口做一次成功定位,
更新AGPS驱动中的“最后定位经纬度”,再联网下载正确星历,
最后打开COM7连接GPS测试,就能恢复正常了。

另外说说X500的GPS端口选择:
X500有三个GPS端口,不同的用途需要区分对待!

最常用的应该一般是COM7,属于AGPS驱动端口,
也就是可以利用长效星历快速定位的。
但如果你的星历有问题,比如刚刷完机或者星历过期,此端口定位非常慢。

COM4是默认的GPS硬件通信端口,在星历有问题的时候,需要用这个端口来先定位,再更新星历。
此端口也是部分底层GPS调试工具调整GPS模块参数的连接端口,
除了文本的NMEA模式外,还支持sirf3的二进制通讯模式。一般导航软件不要用这个端口。

还有一个端口,COM2,也就是WM自带的GPS端口管理软件分配的端口。
此端口应该不支持长效星历(但支持GPS内部的短效星历),感觉定位速度比COM7慢。
但这个端口有个优点,是虚拟端口,支持多程序共享。
多个导航软件可以同时连接COM2,不需要GPSGATE。

实际使用中,应该根据情况选择不同的端口。
在长效星历有效的情况下:
单一导航软件,可以选择COM7
同时启动两个导航软件或电子狗,一个COM7,一个COM2
三个以上的导航软件,主要的那个选择COM7,其他的都设到COM2。

对A-GPS的理解稍有些偏差。下载“长效星历”,并不是A-GPS的功能。

A-GPS有很多种方案,大体的思路都是在GPS信息外,通过附加信息来提高GPS定位的速度和精度。

在设备初始定位时,A-GPS模块将设备(手机等)的基站相关信息(Cell ID, 信号强度等等)
通过移动数据网发送给移动运营商的位置服务器;

位置服务器根据这些信息模糊估计设备的当前位置(精度可能只有几百米);
将与此位置相关联的卫星信息(星历)发送给设备;

设备根据位置服务器返回信息锁定GPS的信号,解调制,计算伪距,并传送给位置服务器

位置服务器根据设备发送给的伪距,并结合其他信息(如差分GPS基准站)等信息,
计算出设备的精确位置,并返送设备。

至于手机上的“快速GPS”一类通过下载长效星历提高定位速度的方式,
虽然与A-GPS初始定位中的第一步有共同之处,但并不是一回事。
简单的说,快速GPS下载的星历与设备当前位置无关,而A-GPS发送给设备的星历是与设备当前位置相关的。

此外,A-GPS还可以有效提高定位的精度。在某些A-GPS方案中,
大量定位所需计算也是由网络中的位置服务器完成,大大减轻了设备的计算量和计算时间。
这些都不是“下载星历”所能提供的。

从设备端看,A-GPS功能需要特别的软、硬件支持,
而“下载星历”无需GPS之外的额外硬件(需要驱动层软件支持)。

从移动网络看,A-GPS服务需要对现有网络进行改造(比如增加位置服务器);
“下载星历”只需要网络支持数据传送(GPRS/EDGE/HSDPA)。

A-GPS是个好东西,虽然有网络流量的代价。
但很不幸的是,似乎目前国内的几家移动运营商,
好像都没有正式大范围地提供此项服务(中移动曾经和mio进行过测试)。
所以,A-GPS手机在国内,基本也就是被当成普通GPS在用

AGPS是一个很大的范畴,“辅助GPS定位”,
只要能帮助GPS定位,提高精度或速度的,都算AGPS,业界AGPS解决方案多如牛毛,
下载星历就是离线AGPS方案,也是某些公司主推的。

SIRFIII芯片属于GPS硬解码,有独立的解码运算功能。
说支持的AGPS的SIRFIII型号,指的是增加instanceFIX功能。
也就是可以往GPS芯片上上传长效星历,
并可储存星历上的卫星相对于“最后一次成为定位点”的载波相位信息。
GPS二次定位的时候可以参照这些信息,快速的锁定并解码卫星信号,
不需要长时间的扫描和锁定工作。
这方案简单,但缺点很明显,就是并不能时时获取“当前位置”,
如果“当前位置”比实际情况差别比较大,则原先存储的相位偏移信息就没有用了,
GPS芯片依然要去做大范围的信号搜索和锁定工作。

长效星历也有软件的解决方案,比如HP的QGPS。

在不支持instanceFIX的芯片上,QGPS软件提供了星历相位等数据的储存。
通过QGPS软件首次定位卫星,QGPS就可以通过COM和GPS沟通,
告诉GPS当前的卫星数据,加速锁定和定位。
这种方式的不足就是每次都是需要用QGPS先定位,然后再打开其他的导航软件才行。

一样的,业界也还有很多实时的软GPS方案,或者增强GPS方案,
跟您所说的一样,其核心的原理都是一样的,
通过不同的渠道(手机CELLID,信号强度等)获取当前的粗略位置,
通过手机信号传给基站或服务器,
再从服务器那边获取可靠的星历和载波相位以加速GPS的首次定位或者提升GPS的精度。

软GPS就是连算都不是由手机GPS芯片算的了,
直接把卫星下载下来的原始数据通过3G等网络传给服务器,
服务器算好再返回你的经纬度。(这就是您上文所说的方式)
这个受制于移动基站的限制,目前还不太现实。

还有种软GPS,就是芯片只负责伪距以及广播星历的接收,
计算全部由手机CPU完成,比如某些内置GPS功能的高通的CPU,
在运行garmin的时候就报很慢,原因就是如此。
定位计算耗费了大量的CPU资源。(这跟AGPS无关了)

增强型的方案,手机里GPS芯片硬解码会计算和定位,并且把原始信息传输给服务器,服务器也会计算,弄个伪距差分或者相位差分的信息反馈给手机,综合处理,精度提升。

最恶心的“AGPS”解决方案就是连卫星信号都不用收了,
直接通过手机信号的强弱定位,精度在150米以下
(再细分下去,这样的定位,实现方式也有多种,就不再详述了)

--------------------

总结一下我的观点:

1.下载星历也是AGPS解决方案的一种

2.星历下载实现简单,无需实时数据通讯。成本低廉。可有效提高首次定位速度。
但不能提高定位精度,也受使用范围的限制。

3.实时AGPS方案,实现方式多样,可繁可简,首次定位速度也很快。
但都需要实时的数据传输通讯,基于手机的通讯方案,
在没有手机信号的地方就无效了,不适合野外作业。
而且,也并非所有的实时AGPS都能提高定位精度,低廉的解决方案才不会给你提供差分信息。
至于运算量和软件速度的问题,软GPS芯片肯定比不过硬GPS解码芯片的。
即使软GPS不用手机的CPU改用服务器来解码,但网络传输的延时也不能忽略不计。

你可能感兴趣的:(转 【MIUI基础普及】【硬件篇】 浅谈手机GPS(A-GPS)定位因素原理)