位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机、掌上电脑等)的标配。而定位导航技术中,目前精度最高、应用最广泛的,自然非GPS莫属了。网络上介绍GPS原理的专业资料很多,而本文试图从编程人员的角度出发,以一种程序员易于理解的方式来简单介绍一下GPS定位的基本原理,希望对做GPS开发的朋友有所启发。当然,本文并没有涉及具体的开发方面的技术。

一、GPS定位数学模型

之所以先介绍数学模型,是因为我认为这个数学模型可能是程序员比较关心的问题。当然事先声明,这个模型只是我根据一些GPS资料总专为程序员总结出来的一个简化模型,细节方面可能并不符合实际,想了解具体细节请参考专业的GPS讲解资料。

GPS定位,实际上就是通过四颗已知位置的卫星来确定GPS接收器的位置。

如上图所示,图中的GPS接收器为当前要确定位置的设备,卫星1、2、3、4为本次定位要用到的四颗卫星:

  • Position1、Position2、Position3、Position4分别为四颗卫星的当前位置(空间坐标),已知
  • d1、d2、d3、d4分别为四颗卫星到要定位的GPS接收器的距离,已知
  • Location 为要定位的卫星接收器的位置,待求

那么定位的过程,简单来讲就是通过一个函数GetLocation(),从已知的[Position1,d1]、[Position2,d2]、[Position3,d3]、[Position4,d4]四对数据中求出Location的值。用程序员熟悉的函数调用来表示就是:

Location=GetLocation([Position1,d1],[Position2,d2],[Position3,d3],[Position4,d4]);

一看到这个函数调用,程序员们就该来劲了:这些参数从哪里来?这个函数又是如何执行?由谁来执行的呢?立体几何还没有忘干净的可能还要问:为什么必须要4对参数呢?那下面我们就来一起探究一下。

1.Position1、Position2、Position3、Position4这些位置信息从哪里来?

实际上,运行于宇宙空间的GPS卫星,每一个都在时刻不停地通过卫星信号向全世界广播自己的当前位置坐标信息。任何一个GPS接收器都可以通过天线很轻松地接收到这些信息,并且能够读懂这些信息(这其实也是每一个GPS芯片的核心功能之一)。这就是这些位置信息的来源。

2.d1、d2、d3、d4这些距离信息从哪里来?

我们已经知道每一个GPS卫星都在不辞辛劳地广播自己的位置,那么在发送位置信息的同时,也会附加上该数据包发出时的时间戳。GPS接收器收到数据包后,用当前时间(当前时间当然只能由GPS接收器自己来确定了)减去时间戳上的时间,就是数据包在空中传输所用的时间了。

知道了数据包在空中的传输时间,那么乘上他的传输速度,就是数据包在空中传输的距离,也就是该卫星到GPS接收器的距离了。数据包是通过无线电波传送的,那么理想速度就是光速c,把传播时间记为Ti的话,用公式表示就是:

di=c*Ti(i=1,2,3,4);

这就是di(i=1,2,3,4)的来源了。

3.GetLocation()函数是如何执行的?

这个函数是我为了说明问题而虚构的,事实上未必存在,但是一定存在这样类似的运算逻辑。这些运算逻辑可以由软件来实现,但是事实上可能大都是由硬件芯片来完成的(这可能也是每一个GPS芯片的核心功能之一)。

4.为什么要必须要四对参数?

根据立体几何知识,三维空间中,三对[Positioni,di]这样的数据就可以确定一个点了(实际上可能是两个,但我们可以通过逻辑判断舍去一个),为什么这里需要四对呢?理想情况下,的确三对就够了,也就是说理想情况下只需要三颗卫星就可以实现GPS定位。但是事实上,必须要四颗。

因为根据上面的公式,di是通过c*Ti计算出来的,而我们知道c值是很大的(理想速度即光速),那么对于时间Ti而言,一个极小的误差都会被放大很多倍从而导致整个结果无效。也就是说,在GPS定位中,对时间的精度要求是极高的。GPS卫星上是用銫原子钟来计时的,但是我们不可能为每一个GPS接收器也配一个銫原子钟,因为一个銫原子钟的价格可能已经超过了这个GPS设备再加上使用GPS的这辆名贵汽车的价格。

同时,由于速度c也会受到空中电离层的影响,因此也会有误差;再者,GPS卫星广播的自己的位置也可能会有误差。其他等等一些因素也会影响数据的精确度。

总之,数据是存在误差的。这些误差可能导致定位精确度降低,也可能直接导致定位无效。GetLocation(函数)中多用了一组数据,正是为了来校正误差。至于具体的细节,我们就不用关心了,我们只要知道,多用一组数据,就可以通过一些巧妙的算法,消除或减小误差,保证定位有效。这就是GetLocation()函数必须用四组数据的原因,也就是为什么必须有四颗卫星才能定位的原因。

5.GetLocation()函数返回的位置信息怎样被GPS设备识别呢?

前面说在进行位置计算时都是用的空间坐标形式表示,但是对GPS设备及应用程序而言,通常需要用的是一个[经度,纬度,高度]这样的位置信息。那么我们可以想象,在GetLocation()函数返回位置结果前,可能会进行一个从空间坐标形式到经纬度形式的转换,我们不妨假设存在一个Convert(经纬度,空间坐标)这样的函数来进行这个转换。

6.单点定位与差分定位

实际上上面所说的只是定位原理中的其中一种,称为单点定位,或绝对定位。就是通过唯一的一个GPS接收器来确定位置。

目前定位精度最高的是差分定位,或称相对定位。就是通过增加一个参考GPS接收器来提高定位精度。

上面我们已经围绕一个虚拟的GetLocation()函数基本搞清楚了GPS定位的基本数学模型,对于编程而言,知道这些就足够了(其实不知道也不影响编程)。如果好奇心还没满足的话,我们继续了解一些GPS相关的背景知识。

二、GPS卫星是哪里来的?

(废话,当然是人发射的!地球人发射的!)

GPS(Global Position System,全球定位系统),全称为NAVSTAR GPS(NAVigation Satellite Timing And Ranging Global Position System,导航星测时与测距全球定位系统)。GPS是一个由美国国防部开发的空基全天侯导航系统,它用以满足军方在地面或近地空间内获取在一个通用参照系中的位置、速度和时间信息的要求。

1.GPS发展历程

  • 1957年10月第一颗人造地球卫星SputnikⅠ发射成功,空基导航定位由此开始
  • 1958年开始设计NNSS-TRANSIT,即子午卫星系统; 
    1964年该系统正式运行; 
    1967年该系统解密以供民用。
  • 1973年,美国国防部批准研制GPS; 
    1991年海湾战争中,GPS首次大规模用于实战; 
    1994年,GPS全部建成投入使用; 
    2000年,克林顿宣布,GPS取消实施SA(对民用GPS精度的一种人为限制策略)。

2.美国政府的的GPS策略

  • 两种GPS服务: 
    SPS--标准定位服务,民用,精度约为100M; 
    PPS--精密定位服务,军用和得到特许的民间用户使用,精度高达10M.
  • 两种限制民用定位精度的措施(保障国家利益不受侵害): 
    SA--选择可用性,认为降低普通用户的测量精度,限制水平定位精度100M,垂直157M(已于2005年5月1日取消); 
    AS--反电子欺骗。

3.其他卫星导航系统

  • GLONASS(全球轨道导航卫星系统),前苏联
  • Galileo-ENSS(欧洲导航卫星系统,即伽利略计划),欧盟
  • 北斗导航系统,中国

三、GPS系统的构成

GPS系统=空间部分+控制部分+用户部分

 

1.空间部分

GPS空间部分主要由24颗GPS卫星构成,其中21颗工作卫星,3颗备用卫星。24颗卫星运行在6个轨道平面上,运行周期为12个小时。保证在任一时刻、任一地点高度角15度以上都能够观测到4颗以上的卫星。

主要作用:发送用于导航定位的卫星信号。

构成:24颗卫星=21颗工作卫星+3颗备用卫星

2.控制部分

GPS控制部分由1个主控站,5个检测站和3个注入站组成。

组成:GPS控制部分=主控站(1个)+监测站(5个)+注入站(3个)

作用:监测和控制卫星运行,编算卫星星历(导航电文),保持系统时间。

  • 主控站:从各个监控站收集卫星数据,计算出卫星的星历和时钟修正参数等,并通过注入站注入卫星;向卫星发布指令,控制卫星,当卫星出现故障时,调度备用卫星。
  • 监控站:接收卫星信号,检测卫星运行状态,收集天气数据,并将这些信息传送给主控站。
  • 注入站:将主控站计算的卫星星历及时钟修正参数等注入卫星。

 

分布情况:

  • 主控站:位于美国科罗拉多州(Calorado)的法尔孔(Falcon)空军基地。
  • 注入站:阿松森群岛(Ascendion),大西洋;迭戈加西亚(Diego Garcia),印度洋;卡瓦加兰(Kwajalein),东太平洋。
  • 监控站:1个与主控站在一起;3个与注入站在一起;另外一个在夏威夷(Hawaii),西太平洋。

3.用户部分

GPS用户设备部分包含GPS接收器及相关设备。GPS接收器主要由GPS芯片构成。

如车载、船载GPS导航仪,内置GPS功能的移动设备,GPS测绘设备等都属于GPS用户设备。

组成:主要为GPS接收器

作用:接收、跟踪、变换和测量GPS信号的设备,GPS系统的消费者。

GPS定位是目前最为精确、应用最为广泛的定位导航技术,以后将会成为每一个移动设备的标配之一。现在的中高端只能手机,有相当一部分已经配备了GPS硬件。那么针对GPS定位的开发技术也将成为一项主流常规技术。本文目的在于让准备进行GPS定位开发的编程人员对于GPS有一个大致的了解,这对于编程可能没有什么直接的帮助,但是我想了解一下GPS的大致工作原理,在编程过程中就能够对GPS设备的工作特性有一个感性的认识,这对于开发还是有很大间接好处的。想了解关于GPS定位的具体开发技术,请参考《为Windows Mobile设备创建位置感知的应用程序》

出处:

https://www.cnblogs.com/magicboy110/archive/2010/12/09/1901669.html


卫星授时原理:

北斗和GPS的原理基本一致,出于种种考虑(你懂的),这里说下GPS的授时原理。
GPS的星座由24颗卫星组成,不同的卫星分配不同的伪随机码进行区别,卫星上一般都配有3-4台的原子钟以进行时间保持,同时地面上的主控站还会将修正数据(包括卫星轨道,时间修正等)不定期发给卫星,以使24颗卫星之间保持时间同步。
由于GPS的星座经过精心设计,所以地球上绝大多数地方都可以同时看到最少4颗卫星。
同时用户接收机有4个未知数(经度,纬度,高度,本地时间),通过解一个四元二次方程组即可求出接收机的坐标和时间,这样就完成了一次定位和授时。

作者:超重
链接:https://www.zhihu.com/question/20864760/answer/17040058
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:Dean Chu

链接:https://www.zhihu.com/question/20864760/answer/27688730
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

授时可以分为三步来完成:1、有一个基准源;2、知道自己与基准的差;3、算个加减法
1:无论GPS和北斗卫星上一般搭载原子钟,老GPS是铯钟,部分新星是铷钟。钟的频率考虑了相对论效应,保证卫星距离引力场的距离和高速运动带来的相对论效应下依然能达到设计频率,做法是假设要产生精确10.23Mhz,实际调校的频率是比这个差一点点的,刚好抵消掉相对论效应。有了这样精确的时钟,加上地面站的不断校正,GPS会在自己的电文中播发一个GPS时间,播发这个时间的帧的第一个bit的边沿是和这个时间值严格对应的。比如播发的时间是1445s(指从这一周开始经过的秒数,称周内秒),那么这一帧的第一个bit反转的边沿就应该刚好从这个时刻从天线出去。这样通过测量这个反转沿,可以在本地恢复出一个精确的秒的变化边沿,这个边沿是与发射时刻同步的,而接收机要授时是要获得精确的本地时间,那么剩下的就是计算信号从天线传播到接收机经过的时间了。
2:这一步比较复杂,基本实现方法是通过解方程的方式完成,通过设一个本地与卫星原子钟差的未知数Δt。这一步和定位是一起完成的,也就是说定位精度越高,其授时精度理论上也应该越高。基本定位方法是通过对卫星信号中播发的C/A码进行观测,计算接收机与至少4颗卫星的距离(这个距离就是前面各位说的伪距,它并不是真实的距离,实际上应该是真实距离加上光速乘以之前设的未知数Δt,所以接下来可以列方程求出它)。然后是根据卫星播发的电文中的轨道参数,计算出能看到的每一颗卫星的具体位置。然后再设接收机坐标xyz三个未知数,连立4个三维空间求距离的方程,左边是xyz与卫星的距离,右边是伪距加上c*Δt,这样就可以解出xyz和Δt了。由于伪距观测量会有误差,所以定位和授时会有误差,所以GPS的定位精度是有上限的,除非使用载波测量的方式可以极大提高精度,这个就不说了....
3:获得了2里面的时间差Δt之后,和1里面的秒反转沿进行加减运算即可获得精确的GPS时间,然后根据GPS和UTC时间的变换关系就可以获得精确的UTC时间。
 
 

GPS定位基本原理浅析的更多相关文章

  1. 【Android】GPS定位基本原理浅析

    位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文 ...

  2. 【转】GPS定位原理

    一.距离测定原理 1.伪距测量 伪距测量是利用全球卫星定位系统进行导航定位的最基本的方法,其基本原理是:在某一瞬间利用GPS接收机同时测定至少四颗卫星的伪距,根据已知的卫星位置 和伪距观测值,采用距离 ...

  3. Numpy库应用实例——GPS定位

    背景介绍 定位系统 GPS全球定位系统(Global Positioning System)以GPS系统为例介绍卫星定位的计算方法 GPS定位的基本原理 GPS定位的基本原理是根据高速运动卫星的 ...

  4. GPS定位 测试

    public class MainActivity extends Activity { private final String TAG = "BX"; private Loca ...

  5. Android中GPS定位的简单应用

    在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...

  6. GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样?

    GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样? 先了解一下 高德地图 采用: GCJ-02 (不可逆) 百度百科: http://baike.baidu.com/link?url ...

  7. GPS定位原理

    多分钟吧(有人认为美国对其本土覆盖的GPS信号实行不同码率因此纯GPS定位也会很快,谁有美国朋友不妨让他拔卡试试)!因为美版机型其GPS模块的数据处理软件部分与欧版机型是不同的,欧版机型的数据处理软件 ...

  8. GPS(2)关于位置的3个示例,实时获取GPS定位数据,求两个经纬点距离,邻近某个区域圆时警告

    实时获取GPS定位数据 import android.app.Activity; import android.content.Context; import android.location.Loc ...

  9. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

随机推荐

  1. kebab HDU2883

    题意:现在有n个人要烤肉,有m个烤肉架,然后给出每个人的烤肉开始时间si,结束时间ei,以及要烤肉的串数num,还有拷一串的时间ti,然后问你能不能满足所有人的要求. 为3572的进阶题 每个人为一个 ...

  2. 020.Zabbix的Actions配置

    一 Action概述 当产生Trigger后,即当触发器条件被满足时,采取一些操作,如发送事件通知,远程执行命令等,需要配置Action.   名称 作用 Trigger 当Trigger的状态从OK ...

  3. 003.NTP客户端配置

    一 NTP客户端同步方式 ntpdate定时任务同步 ntp服务同步 二 ntpdate定时任务同步 2.1 安装ntp软件 [root@client ~]# yum -y install ntp # ...

  4. Vue父子组件之间通信

    1.父 -> 子.通过props //father.vue <template> <div id="father"> <div><l ...

  5. 学习linux-基础-操作系统结构

    操作系统结构图 物理层: CPU:( Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要 ...

  6. UI自动化测试(六)TestNG操作详解

    在编写TestNG代码的时候,若没有下载TestNG的jar包的话,代码会出错,下载jar包方法见该链接中java+selenium环境搭建的第二步即可:http://www.cnblogs.com/ ...

  7. C# EF Attach 与 Entry

    先了解一下 EF 框架的 EntityState 在使用EF框架时, 我们通常都是通过调用 SaveChanges() 方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加.修 ...

  8. [HDU2874]Connections between cities

    思路:LCA裸题.本来是帮pechpo调错,结果自己写了半天… 设$dis_x$是点$x$到根结点距离,不难想到两点$u$.$v$之间最短距离等于$dis_u+dis_v-dis_{LCA(u,v)} ...

  9. hdu 4562 dp ***

    题意:给出一个点p(X,Y)以及若干圆.从中选出尽可能多的圆满足:圆能且只能包含p或者原点中的一个(不能在圆上):圆之间不能相交或者相切. 链接:点我 用dp求满足条件包含一个点圆的最多数目,然后两个 ...

  10. 得到Revit子窗体

    start /// <summary> /// 得到主窗体句柄 /// </summary> /// <returns></returns> publi ...