1. 背景介绍
    定位系统
    GPS全球定位系统(Global Positioning System)
    GPS系统为例介绍卫星定位的计算方法
  2.  
  3. GPS定位的基本原理
    GPS定位的基本原理是根据高速运动卫星的瞬间位置作为已知的起算数据,采用空间距离-后方交会的方法,确定待测点的位置。
    假设t时刻在地面待测点上安置GPS接收机,可以测定GPS信号到达接收机的时间△t,再加上接收机所接收到的卫星星历等其它数据,就可以确定一个方程组来对位置信息进行求解。
    假设地球上一个点R,同时收到6颗卫星(S1,S2,…,S6)发射的信号,假设接受信息如下表所示。其中xy表示卫星的经纬度,z表示卫星的高度。

  1. 由于上述6个卫星和地球在高速运动,从卫星发出的位置信息以光速传输到GPS接收端需要一定的时间。
    假设(x,y,z,t)表示R当前的位置, tR的相对时间,卫星S1(发出信号时刻)到(当前接收时刻)满足以下关系(其中c是光速)。
    (x-3)^2 + (y-2)^2 + (z-3)^2 = [(10010.00692286 t)*c]^2
    该公式表示以(x, y, z,t)为参数的(欧式空间距离)与信号传输距离相等。
  2.  
  3. 对于卫星S1,S2,…,S6,满足方程组:
    ...(1)
  1. 其中,光速为常数c=0.299792458km/us,上述方程组是非线性的,但很容易将所有二次项都消去(每个公式减去第一个公式),从而得到:

  1. 此时,上述等式变成了A*X=B形式,根据线性代数方法,X=A-1*B,即只需对系数矩阵求逆,再乘以常数矩阵便可以得到方程组的解。
  2.  
  3. GPS定位的问题建模
    上面给出了GPS的定位原理,如何利用计算机辅助GPS的定位计算呢?
    6颗卫星为例,GPS定位计算问题的IPO模式----描述如下:
    输入:6颗卫星的欧式坐标和信号时间戳
    处理:GPS定位算法
    输出:GPS接收设备的地理坐标和当前时间
    假设第i颗卫星的坐标和时间戳表示为(x_i, y_i ,z_i ,t_i ),结合上述例子,GPS定位算法可以描述为如下公式:

  1. 我们下面将使用Numpy函数库实现上述矩阵操作。首预习一下程序中用到的函数:
  1. numpy.dot(a,b):计算矩阵a与矩阵b的点积
  2. numpy.linalg.inv(a):求矩阵a 的逆矩阵
  1. GPS定位的程序实现
    Python代码如下:
    其中zerosNumPy提供的函数,用来建立指定维度的数组,
    zeros用来生成数组x用来存储接受来自外部输入的六颗卫星坐标,
    数组ab用来存放前面算法中的系数矩阵,
    例程中我们还展示了两种数组的索引方法,最后调用求矩阵逆的函数及点乘操作完成坐标计算。
  1. from numpy import *
  2. def main_GPSLocation():
  3. i = 1
  4. c = 0.299792458 # 光速 0.299792458km/us
  5. x = zeros((6, 4)) #存储6个卫星的(x,y,z,t)参数
  6. while i<=6:
  7. print(" %s %d" % ("please input (x,y,z,t) of group",i) )
  8. temp=input()
  9. x[i-1]=temp.split()
  10. j=0
  11. while j<4:
  12. x[i-1][j]=float(x[i-1][j])
  13. j=j+1
  14. i=i+1
  15. a=zeros((4,4)) #系数矩阵
  16. b=zeros((4,1)) #常数项
  17. j=0
  18. while j<4:
  19. a[j][0]=2*(x[5][0]-x[j][0])
  20. a[j][1]=2*(x[5][1]-x[j][1])
  21. a[j][2]=2*(x[5][2]-x[j][2])
  22. a[j][3]=2*c*c*(x[j][3]-x[5][3])
  23. b[j][0]=x[5][0] * x[5][0] - x[j][0] * x[j][0] + \
  24. x[5][1] * x[5][1] - x[j][1] * x[j][1] + \
  25. x[5][2] * x[5][2] - x[j][2] * x[j][2] + \
  26. c*c*(x[j][3] * x[j][3] - x[5][3] * x[5][3])
  27. j=j+1
  28. a_ni=linalg.inv(a) #系数矩阵求逆
  29. print(dot(a_ni,b))
  30.  
  31. main_GPSLocation()
  1. 运行程序后,依次输入6颗卫星的坐标,运算结果如下:

  1.  

Numpy库应用实例——GPS定位的更多相关文章

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

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

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

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

  3. GPS定位学习笔记

    ********************************* GPS定位简介 ********************************** 1. iOS SDK提供两个框架来实现位置服务 ...

  4. 与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器

    原文:与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器 [索引页][源码下载] 与众不同 windows phon ...

  5. 数据分析与展示——NumPy库入门

    这是我学习北京理工大学嵩天老师的<Python数据分析与展示>课程的笔记.嵩老师的课程重点突出.层次分明,在这里特别感谢嵩老师的精彩讲解. NumPy库入门 数据的维度 维度是一组数据的组 ...

  6. H5结合百度map实现GPS定位

    前言 目前我们做m端时都会用到定位,当用户第一次打开h5页面时会启动gps定位,并结合百度map来查找城市.按照我们的逻辑思路就是gps定位获取经纬度,传到后台调用百度的一个接口查找城市名称. 1.查 ...

  7. 数据分析之Numpy库入门

    1.列表与数组 在python的基础语言部分,我们并没有介绍数组类型,但是像C.Java等语言都是有数组类型的,那python中的列表和数组有何区别呢? 一维数据:都表示一组数据的有序结构 区别: 列 ...

  8. 手机版的百度map封装,使用gps定位

    代码如下,包自己引 包参考 一个百度MAP导航的基础封装 使用的是浏览器调用gps定位 修改了标注的大小 效果如图: 代码...... <!DOCTYPE html> <html&g ...

  9. Python数据分析与展示(1)-数据分析之表示(1)-NumPy库入门

    Numpy库入门 从一个数据到一组数据 维度:一组数据的组织形式 一维数据:由对等关系的有序或无序数据构成,采用线性方式组织. 可用类型:对应列表.数组和集合 不同点: 列表:数据类型可以不同 数组: ...

随机推荐

  1. nginx配置location总结

    location匹配顺序 "="前缀指令匹配,如果匹配成功,则停止其他匹配 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配) ...

  2. [Android Pro] Swift 3.0多线程

    本文只介绍Grand Central Dispath(GCD) 中央调度 个人认为一个GCD就够用了,可能是改版或是其他的在找之前写的多线程方法时发现不能用了,看文档之后发现改了,现在看上去更加简单易 ...

  3. Spark向HDFS中存储数据

    程序如下: import org.apache.spark.sql.Row; import org.apache.spark.SparkConf; import org.apache.spark.ap ...

  4. ActiveMQ使用示例之Queue

    我们使用ActiveMQ为大家实现一种点对点的消息模型. 开发时候,要将apache-activemq-5.12.0-bin.zip解压缩后里面的activemq-all-5.12.0.jar包加入到 ...

  5. C++获得本机所有网卡的IP和MAC地址信息

    一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...

  6. svn报错can only be performed on a version resource [at this time].

    报错 can only be performed on a version resource [at this time].   有的文件能提交,有的文件不能提交 猜想:是不是因为缓存问题方法:tea ...

  7. C#一个FTP操作封装类FTPHelper

    参考了网上一些代码,作了一些调整优化. 001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 0 ...

  8. JSON与XML

    XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词.我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所 ...

  9. 宏定义偷懒型set,get

    之前看到有这么一个写法 #define DEF_SET_GET(varType,varName,funName) \ private : varType varName; \ public : voi ...

  10. 【ACM】杭电ACM题一直WA求高手看看代码

    数据测试了好几个都没问题,可以就是WA不让过,检测了2个小时还是没发现有什么问题T_T!!求高手看看代码,小弟在此谢谢各位哦! #include <stdio.h> #include &l ...