学生手册计算与测定GNSS卫星位置

学生手册计算与测定GNSS卫星位置
学生手册计算与测定GNSS卫星位置

计算与测定GNSS卫星位置

【任务概述】

利用GNSS卫星进行导航和定位,就是根据已知的卫星轨道参数计

算出卫星瞬时位置,通过观测和数据处理,确定接收机的位置和载体

的运动速度。所以,获取准确的卫星轨道参数,计算出卫星在观测瞬间的位置,是GNSS导航定位的基础。因为GNSS系统坐标系统采

用WGS-84坐标系统。为了计算卫星在WGS-84大地坐标系中的位置,首先需要计算卫星在其轨道平面内的位置。此时定义:原点与地

心M相重合,x轴指向升交点,y轴在轨道平面内垂直于x轴,我们

称其为轨道平面直角坐标系,它是一种过渡性的坐标系。再进行坐标系的转换,将卫星在其轨道的坐标转换到地面直角坐标系下。

【学习目标】

(1)知识目标:①星历文件的获取方法有哪些?②了解星历文件的构成?③明确卫星星历参数,及计算公式推导过程。

(2)技能目标:①如何打开星历文件;②如何读取星历文件,并将参数赋值到变量中;③如何计算卫星位置。

【教学内容】

一、GPS导航原理

GPS卫星导航,就是用GPS卫星发送的导航定位信号引导运载体从

一个地点航行到另一个地点的过程。航行的意思;也就是确定航行体运动到什么地方和向何方向运动的意思。要使飞机、舰船、车辆等运载工具成功地完成所预定的航行任务。除了起始点和目标的位置之外,

主要的就是必须知道航行体所处的即时位置。因为只有确定了即时位置才能考虑怎样到达下一目的地的问题;如果连自己已经到了什么地

方和以后该到什么地方也不知道的话,那就无从谈起完成预定航行任务的问题。由此可见,导航的首要问题就是确定航行体的即时位置。另外,为现代载体提供精确的导航信息,还需要测定载体的瞬时速度,精确的时间,运动裁体的姿态等状态参数,进而“导引”该运动载体准

确地驶向预定的后续位置。由此可见,导航是一种广义的动态定位。GPS卫星所发送的导航定位信号,是一种可供无数用户共享的空间

信息资源;陆地、海洋和空间的广大用户,只要持有一种能够接收、跟踪、变换和测量GPS信号的接收机,就可以全天候和全球性地测量运动栽体的七维状态参数(三维坐标、三维速度、时间)和三维姿态参数;其用途之广,影响之大,是任何其他接收设备望尘莫及的;上至航空

航天,下至渔业、导游、摄影和农业生产,均可利用GPS信号接收机。对于任何某一具体的导航过程,首先必须确定本次航行的起始点、目的点以及航行计划路径(总称之为一条航线)。路径的标定一般是用一系列均匀分布于路径上的坐标点来确定,这些坐标点就叫航路点。起始点、目的点、航路点的位置坐标可以是从地图上量取,也可以是直接测得,总之必须是已知的。

在航行过程中,GPS定位系统能够实时提供给航行体位置信息(坐标),结合计算机中存储的航行路径中各航路点位置信息,可以计算出各种可用来纠正航行偏差、指导正确航行方向的制导参数,如应航迹角、偏航距和待航距离(待航时间)等,图10-1以飞机导航为例,说明各制

导参数的物理意义(图中还示出真航向、航迹角、偏流角和地速V)。利用制导参数,可以计算出航行体的操纵指令,再通过控制系统,可实

现航行的自动化。

上述GPS导航是广义的GPS动态定位,它有着极其广阔的应用

前景。例如,用于陆地、水上和航空航天运载体的导航。根据用户的应用目的和精度要求的不同,GPS动态定位方法也随之而改变。从目前

的应用看来,主要分为以下几种方法:

(1)单点动态定位它是用安设在一个运动载体上的GPS信号接收机,自主地测得该运动载体的实时位置,从而描绘出该运动载体的运

行轨迹。所以单点动态定位又叫做绝对动态定位。例如,行驶的汽车和火车,常用单点动态定位。

(2)实时差分动态定位它是用安设在一个运动载体上的GPS信号

接收机,及安设在一个基准站上的另一台GPS接收机,联合测得该运

动载体的实时位置,从而描绘出该运动载体的运行轨迹,故差分动态

定位又称为相对动态定位。例如,飞机着陆和船舰进港,一般要求采

用实时差分动态定位,以满足它们所要求的较高定位精度。

(3)后处理差分动态定位它和实时差分动态定位的主要差别在于,在

运动载体和基准站之间,不必像实时差分动态定位那样建立实时数据

传输,而是在定位观测以后,对两台GPS接收机所采集的定位数据进

行测后的联合处理,从而计算出接收机所在运动载体在对应时间上的

坐标位置。例如,在航空摄影测量时,用GPS信号测量每一个摄影瞬间的摄站位置,就可以采用后处理差分动态定位。

因此,应该依据GPS动态测量的这些特点,载体的运行速度和加速度的不同,以及所要求的精度不同选购适宜的接收机,采用适当的数据处理方法,以便获得所要求的运动载体的七维状态参数和三维姿态参数的测量精度。例如,用于航空摄影测量摄站的接收机,不仅要求它在秒速300m左右时能够作伪距和载波相位测量,而且要求它具有秒脉冲输出的时间同步能力;对于海洋测绘用户而言,则宜选购具

有速度测量和定时功能的双频接收机,并附设有带抑径板或抑径圈

的GPS信号接收天线,以减弱海面所产生的多路径效应的影响。

二、GPS导航方法

导航的任务是引导航行体自起始点出发沿着预定的航线,经济而安全地到达目的地。经常地测定在航行中的航行体位置,是完成导航任务的一个重要课题,因为引航人员需要随时了解航行体已经到达的位置,以便掌握航行体的运动状态,判明其有无偏离预定的航线,偏

离的程度如何,GPS卫星导航中的常用方法包括:

1.GPS单机导航

顾名思义,单机就是在航行体上仅装配一台C用接收机,单独实施导航,如在地质勘探、资源调查、船只航行、汽车导航等方面,得到广泛应用。因为一台GPS接收只要能接收到4颗以上的卫星信号便可测定出所处的位置。因此操作和使用非常简单,价格也便宜,且具有全天候、全球性、较高精度及实时三维定位和测速能力。

但是在众多阶情况下,单机导航还需配备适当的辅助设备,以保证导航的安全可靠性。如船只航行不仅要确定船的实时位置,还必须

实时测定水深,才不致使船只触礁而能够安全的航行。又如汽车导航时,当汽车行驶在高层建筑的街道或林荫道上,可能GPS接收机接收不到足够的卫星数以满足定位的需要。一般在汽车上还要配备电子罗盘,结合速度计和相应软件,来实现不能实施GPS定位情况下的连续定位导航工作。在陆地车辆的导航中,还经常配备电子地图、交通信息库和智能选线功能,以帮助驾驶员安全、快速地到达目的地。

2.差分CPS导航

由于使用C/A码的民用用户的定位精度低,因而就提出了如何提高民用定位精度的问题。差分GPS就是适应这一要求而产生的,其原理如图10-3所示。在地面已知位置设置一个地面站,地面站由一个GPS差分接收机和一个差分发射机组成。差分接收机接收卫星信号,监测GPS差分系统的误差,并按规定的时间间隔把修正信息发送给用户,用户用修正信息校正自己的测量或位置解。差分GPS导航有两种工作方式。

(1)位置差分法

差分接收机和用户接收机一样,通过伪距测量确定自己的位置。把测量确定的位置数据和已知位置数据比较,即得位置校正量

?X,?Y,?Z。通过发射机把这些位置修正信息发送给用户接收机,用户接收机用以校正自己的输出坐标。

(2)伪距差分法

地面接收机对所有可见卫星测量伪距,并根据星历数据和已知位置计算用户到卫星的距离,两者相减得到伪距误差。把伪距误差作为

修正信息发送给用户接收机,用户接收机用来修正自己测量的伪距,

然后进行定位计算。这种方法不要求用户接收机和地面接收机使用相同的星座,使用方便,但对地面接收机要求的通道数多。

上述两种校正方法都是以用户接收机和地面接收机具有相同的误差

为前提。实际上,两台接收机所处的位置不同,接收机本身也不一样,因此误差不可能相同。随着两台接收机间距离的增大,修正效果变差。

【重点】

1.GPS导航的基本原理

2.导航的目的和任务

3.单点导航定位

【难点】

1.GPS导航的基本原理

【思考题(作业)】

1.试述GPS导航的目的和作用

卫星星历计算和轨道参数计算编程实习

专业:地图学与地理信息工程(印刷) 班级:制本49—2 学号:3272009010 姓名:张连杰 时间:2012/9/21 一、概述 在C++6.0中建立基于单文档的MFC工程,利用简洁的界面方便地由卫星轨道根数计算卫星的实时位置和速度,并可以根据卫星的星历反求出卫星轨道根数。 二、目的 通过卫星编程实习,进一步加深理解和掌握卫星轨道参数的计算和卫星星历的计算方法,提高编程能力和实践能力。 三、功能 1、由卫星位置与速度求取卫星轨道参数; 2、由卫星轨道参数计算卫星星历。 四、编程环境及工具 Windows7环境,VC++6.0语言工具 五、计划与步骤 1.深入理解课本上的星历计算方法和轨道根数的求取方法,为编程实习打下算法基础; 2.学习vc++对话框的设计和编程,解决实习过程中的技术难题; 3.综合分析程序的实现过程,一步步编写代码实现。 六、程序异常处理 1.在进行角度转换时候出现的问题导致结果错误。计算三角函数时候先要把角度转换成弧度进行计算,最后输出结果的时候需要再把弧度转换回角度输出。 2.在计算omiga值得时候的错误。对计算出的omiga值要进行象限的判断,如果不符合条件要加或减一个周期pi(因为是反正弦函数)。 七、原创声明 本课程设计报告及相应的软件程序的全部内容均为本人独立完成。其间,只有程序中的中间参量计算值曾与同学共同讨论。特此声明。 八、程序中的关键步骤和代码 1、建立基于单文档的名字为TrackParameter的MFC工程。 2、在资源视图里面增加一个对话框改属性ID为IDD_DIALOG1,在新的对话框IDD_DIALOG1上面添加控件按钮,并建立新的类CsatelliteDlg. 3、在菜单栏里面添加菜单实习一,并添加命令响应函数OnMenuitem32771(),在该函数中编写代码 CsatelliteDlg dlg; dlg.DoModal();

卫星坐标计算

GPS 卫星坐标计算 班级:08测绘一班 姓名:浦绍佼 学号:20080754

目录 实验目的: (3) 卫星坐标计算步骤: (3) 具体过程: (5) 四:运行与结果 (12) 五,心得体会: (13)

实验目的: 根据导航文件求出卫星坐标。 卫星坐标计算步骤: 一:计算平均角速度: n =;n0=;:由导航文件给出二:规划时刻:,为参考历元 三:平近点角: 四:偏近点角:+e;(此处进行迭代运算) 五:真近点角:; 六:升交点角距:; 七:摄动改正:顾及?,I,n的摄动变化以及正弦改正模型的振幅项,;则 升交点角距: 轨道向径:

轨道倾角: 式中:为参考时刻的升交角距; 八:改正后的升交角距: 改正后的轨道向径:; 改正后的轨道倾角:; 九:卫星在升交点轨道直角坐标系的坐标: ;: 十:升交点经度: 7.2921151467*rad/s;:升交点赤经变化率; :GPS周开始时刻的升交点经度; 十一:卫星在地固坐标系的空间直角坐标为: =R(-)(R(-) R(-), (R(-)为旋转矩阵,将其代入展开后得: ; ;

具体过程: 一:原始资料(卫星导航文件) 二:进行必要的界面设计:

三:编写代码: using System; using System.Collections.Generic; using https://www.360docs.net/doc/cc3165974.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Diagnostics; namespace 20080754 { public partial class Form1 : Form { private string stFilePath = string.Empty; public Form1() { InitializeComponent(); listView1.Columns.Add("序号", 40, HorizontalAlignment.Center); listView1.Columns.Add("星历参数", 80, HorizontalAlignment.Center); listView1.Columns.Add("参数值", 130, HorizontalAlignment.Center); listView1.GridLines = true; listView1.View = View.Details; listView1.HeaderStyle = ColumnHeaderStyle.Clickable; listView1.FullRowSelect = true;

卫星导航定位算法与程序设计实验报告

2013 级测绘工程专业 卫星导航定位算法与程序设计 实 验 报 告 实验名称:卫星导航基本程序设计 班级: 学号: 姓名: 实验时间: 2016年6月28日~2016年6月30 中国矿业大学

目录 实验一时空基准转换 (2) 一、实验目的 (2) 二、实验内容 (2) 三、实验过程 (2) 四、实验感想 (6) 实验二RINEX文件读写 (6) 一、实验目的 (6) 二、实验内容 (7) 三、实验过程 (7) 实验三卫星轨道计算 (12) 一、实验目的 (12) 二、实验内容 (12) 三、实验过程 (12) 四、实验感想 (15)

实验一时空基准转换 一、实验目的 1、加深对时空系统及其之间转换关系的理解 2、掌握常用时空基准之间的转换模型与软件实现 3、每人独立完成实验规定的内容 二、实验内容 本实验内容包括: 内容一:编程实现GPS起点1980年1月6日0时对应的儒略日 内容二:编程实现2011年11月27日对应的GPS周数与一周内的秒数 内容三:在WGS84椭球的条件下,编程实现当中央子午线为117度时,计算高斯坐标x = 3548910.811290287, y = 179854.6172135982 对应的经纬度坐标? 内容四:WGS84椭球下,表面x=-2408000; y=4698000;z= 3566000处的地平坐标系坐标为: e=704.8615;n=114.8683;u=751.9771的点对应的直角坐标为多少? 三、实验过程 1.针对第一、二部分内容: 1.1解决思路:先建立” TimeStruct.h”的头文件,将格里高利历、GPS时间结构、儒略日时间结构共结构体的方式放在里面;在建立“TimeTr”的头文件,建立类“CTimeT r”,创建变量“GPS Time”、“Time”、”JulDay”,并且申明函数“TIME2JUL”、“TIME2GTIME”等,用这些函数分别实现所需要的转换。 1.2具体的实现函数: “TIME2JUL”函数: double CTimeTr::TIME2JUL()//TIME Time,JULIANDAY &JulDay { double m,y; double D; //h =Time.byHour+Time.byMinute/60.0+Time.dSecond/3600.00; if(Time.byMonth<=2) {

GPS卫星的坐标计算

第三章GPS 卫星的坐标计算 在用GPS 信号进行导航定位以及制订观测计划时,都必须已知GPS 卫星在空间的瞬间位置。卫星位置的计算是根据卫星导航电文所提供的轨道参数按一定的公式计算的。 3.1卫星运动的轨道参数 3.1.1基本概念 1.作用在卫星上力 卫星受的作用力主要有:地球对卫星的引力,太阳、月亮对卫星的引力,大气阻力,大气光压,地球潮汐力等。 中心力:假设地球为匀质球体的引力(质量集中于球体的中心),即地球的中心引力,它决定卫星运动的基本规律和特征,决定卫星轨道,是分析卫星实际轨道的基础。此种理想状态时卫星的运动称为无摄运动,卫星的轨道称为无摄轨道。 摄动力:也称非中心力,包括地球非球形对称的作用力、日月引力、大气阻力、大气光压、地球潮汐力等。摄动力使卫星运动产生一些小的附加变化而偏离理想轨道,同时这种偏离量的大小随时间而改变。此种状态时卫星的运动称为受摄运动,卫星的轨道称为受摄轨道。 虽然作用在卫星上的力很多,但这些力的大小却相差很悬殊。如果将地球引力当作1的话,其它作用力均小于10-5。 2.二体问题 研究两个质点在万有引力作用下的运动规律问题称为二体问题。 3.卫星轨道和卫星轨道参数 卫星在空间运行的轨迹称为卫星轨道。 描述卫星轨道状态和位置的参数称为轨道参数。 3.1.2卫星运动的开普勒定律 (1)开普勒第一定律 卫星运行的轨道为一椭圆,该椭圆的一个焦点与地球质心重合。此定律阐明了卫星运行轨道的基本形态及其与地心的关系。由万有引力定律可得卫星绕地球质心运动的轨道方程。r 为卫星的地心距离,as 为开普勒椭圆的长半径,es 为开普勒椭圆的偏心率;fs 为真近点角,它描述了任意时刻卫星在轨道上相对近地点的位置,是时间的函数。 (2)开普勒第二定律 卫星的地心向径在单位时间内所扫过的面积相等。表明卫星在椭圆轨道上的运行速度是不断变化的,在近地点处速度最大,在远地点处速度最小。 近地点 远地点 s s s s f e e a r cos 1)1(2+-=

GPS广播星历计算卫星位置和速度-Read

“GPS广播星历计算卫星位置和速度” 及“GPS伪距定位”计算试验 1.试验内容及上交成果 1.1 试验内容 应用C语言按预定格式(函数、输入输出变量之名称、类型)编写“GPS广播星历计算卫星位置和速度”函数SatPos_Vel( )、“GPS伪距定位”函数Positioning( )。将此两个函数组成文件F2.cpp,并包含于文件GPS_Positioning.cpp中。编译、连接并运行文件GPS_Positioning.cpp,逐一时刻读取广播星历(Ephemeris.dat)、观测时间及伪距、卫星号(Observation.dat)信息,计算WGS84坐标系中观测时刻相应的卫星位置、速度以及载体位置,结果保存于文件Position.dat中。 1.2 上交成果 磁盘文件F2.cpp、Position.dat,并存于“学号作者中文姓名”目录中。 2.函数说明 2.1 星历文件读取函数 void EFileReading(Efile) 功能:读取星历文件,给星历数据结构体Ephemeris赋值。 输入变量:EFile 字符串,文件名。 2.2 观测数据读取函数 int ObsReading(fp_Obs,Time,Rho,Mark) 功能:从文件Observation.dat中读取某一时刻的伪距、卫星号。读取成功函数值返回“1”,失败返回“-1”(读错,或至文件尾)。 输入变量:fp_Obs 文件指针; 输出变量:Time double,时间(秒); Rho double[12],伪距(米); Mark int[12],卫星号,“-1”表示此通道无卫星、无伪距。 2.3 最小二乘估计函数 int LeastSquareEstimation(Y,A,P,m,n, X) 功能:最小二乘方法求解观测方程Y=AX+ε,其中观测值方差阵的逆阵为P(也称为权阵),得未知参数X。成功返回“1”,失败返回“-1”(亏秩)。 输入变量:Y double[m],观测方程自由项(米); A double[m×n],系数阵(无量纲),按第1行第1、2……n元素,

计算卫星位置的程序

计算卫星位置 一、C语言程序 #include #include #include #define bGM84 3.986005e14 #define bOMEGAE84 7.2921151467e-5 void main() { long double roota=0.515365263176E+04; //轨道长半轴的平方根(根号a) long double toe=0.720000000000E+04; //观测时刻toe long double m0=-0.290282040486E+00; //参考时刻toe的平近点角 long double e=0.678421219345E-02; //轨道偏心率e long double delta_n=0.451411660250E-08;//卫星的摄动改正数△n long double smallomega=-0.258419417299E+01;//近地点角距ω long double cus=0.912137329578E-05;//纬度幅角正弦调和项改正的振幅(弧度)long double cuc=0.189989805222E-06;//纬度幅角余弦调和项改正的振幅(弧度)long double crs=0.406250000000E+01;//轨道半径的余弦调和项改正的振幅(m)long double crc=0.201875000000E+03;//轨道半径的正弦调和项改正的振幅(m)long double cis=0.949949026108E-07;//轨道倾角的余弦调和项改正的振幅(弧度)long double cic=0.130385160446E-07;//轨道倾角的正弦调和项改正的振幅(弧度)long double idot=-0.253939149013E-09;//轨道倾角变化率I long double i0=0.958512160302E+00; //轨道倾角(弧度) long double bigomega0=-0.137835982556E+01;//升交点赤经 long double earthrate=bOMEGAE84; //地球自转的速率we long double bigomegadot=-0.856928551657e-08; long double t=0.720000000000E+04; //加入卫星钟差改正的归化时间 long double A; long double n0=0,n,tk; long double mk,ek,tak,ik,omegak,phik,uk,rk; long double corr_u,corr_r,corr_i; long double xpk,ypk,xk,yk,zk; int i; printf("输入的数据:\n"); printf("√a=%e \n",roota); printf("toe=%e \n",toe); printf("e=%e \n",e); printf("i0=%e \n",i0); printf("ω=%e \n",smallomega); printf("△n=%e \n",delta_n); printf("Ω0=%e \n",bigomega0); printf("I=%e \n",idot); printf("Cuc=%e \n",cuc);

卫星位置计算程序

#include #include"math.h" #include"float.h" using namespace std; double kpro(double mk,double e){ double f[2000],ek; int i=0; f[0]=mk; do{ f[i+1]=mk+e*sin(f[i]); i++; }while(abs(f[i+1]-f[i])>=0.005); ek=f[i+1]; return ek; } #define PI 3.14159265357589 int main(void){ double toc,a2,a1,a0,dotn,t1,m0,e,roota,toe,cic,crc,cis,crs,cuc,cus,omega0,omega,i0,omegadot,idot; double n,n0,dott,t,tk,mk,ek,vk,ak,u,r,i,uk,rk,ik,xk,yk,wk,we,x,y,z; int k,j; cout<<"输o?入¨?秒?数oy据Y参?数oy toc\n"; cin>>toc; cout<<"输o?入¨?秒?数oy据Y幂Y数oy\n"; cin>>k; toc=toc*pow(10,k); cout<<"输o?入¨?时o?à钟¨?修T正y2 a2\n"; cin>>a2; cout<<"输o?入¨?时o?à钟¨?修T正y1 a1\n"; cin>>a1; cout<<"输o?入¨?时o?à钟¨?修T正y0 a0\n"; cin>>a0; cout<<"输o?入¨?摄|?动?¥改?正y数oy dn\n"; cin>>dotn; cout<<"输o?入¨?观?测a时o?à间? t'\n"; cin>>t1; cout<<"输o?入¨?反¤??常?ê m0\n"; cin>>m0; cout<<"输o?入¨?偏?心?率¨o e\n"; cin>>e; cout<<"输o?入¨?长?è半??径?平?方¤?根¨′ roota\n"; cin>>roota; cout<<"输o?入¨?星?历¤¨2基¨′准á?时o?à间?系|ì数oy toe\n"; cin>>toe; cout<<"输o?入¨?星?历¤¨2基¨′准á?时o?à间?幂Y数oy\n"; cin>>j; toe=toe*pow(10,j); cout<<"输o?入¨?对?倾?角?余?¨¤弦¨?校?ê正y值|ì cic\n"; cin>>cic;

GPS卫星位置的计算

GPS卫星位置的计算 利用C++编写了一段能计算单一瞬时卫星坐标的程序,在运行程序之前,需做部分准备工作:(1)在F盘下建立一名为“单一卫星广播星历”的txt文件。 (2)从“广播星历.txt”文件中拷贝从卫星PRN号开始的8行数据到“单一卫星广播星历.txt”中 (3)在编辑选项中,将全部的“D”替换为“E”。 下面为我所选取的一个广播星历: 18 06 8 25 6 0 0.0-2.472363412380E-04-1.023*********E-12 0.000000000000E+00 1.410000000000E+02-1.721875000000E+01 4.502687555010E-09 1.413760604187E+00 -7.990747690201E-07 7.598234573379E-03 1.118145883083E-05 5.153709835052E+03 4.536000000000E+05-1.303851604462E-08-1.095067942661E-01 1.527369022369E-07 9.571235745530E-01 1.640000000000E+02-2.656176299285E+00-8.0374********E-09 -5.193073455211E-10 1.000000000000E+00 1.389000000000E+03 0.000000000000E+00 2.000000000000E+00 0.000000000000E+00-1.024*********E-08 1.410000000000E+02 4.464490000000E+05 4.000000000000E+00 程序设计部分: #include #include int main() { int i = 0; double n[50], n0, nn, t, tk, Mk, Ek, Vk, Yk, Gu, Gr, Gi, uk, rk, ik, xk, yk, zk, X, Y, Z, Lk, UT, yy, mm, JD, gpsz; FILE *fp; fp = fopen("F:\\单一卫星广播星历.txt", "r"); if (fp == NULL) { printf ("文件打开失败!\n"); return 0; } while (! feof (fp)) { fscanf(fp, "%lf", &n[i]); i++; } n0 = (sqrt(3986005E+8))/pow(n[17], 3); nn = n0 + n[12];/*计算卫星运行的平均角速度*/ UT = n[4] + (n[5] / 60) + (n[7] / 3600);/*民用日的时分秒化为实数时*/ if (n[1] >= 80)/*广播星历中年只有后两位,化为4位,参考1980年1月6日0点*/ { if (n[1] == 80 && n[2] == 1 && n[3] < 6) { n[1] = n[1] + 2000; } n[1] = n[1] + 1900;

卫星导航定位算法与程序设计_单点定位程序流程

GPS 单点定位程序流程 、计算流程 读取RINEX N 文件,将所有星历放到一个列表(数组) ephlst 中。 数据预处理 根据epoch 中的卫星号和历元时刻T R 在ephlst 查找相应的卫星星历, 1、 2、 读取RINEX 以件,读取一个历元观测值epoch 3、 4、 准则T R TOE 3600.0s 。 程序初始化,置测站概略位置为X r ,接收机钟差初值dt r 。 X o X 0 X Y dt Z 第一次迭代,取X 。 o cdt r 0 0 0 5、选择epoch 中一颗卫星S i 观测值,设其伪距为 S 6、计算卫星§的信号发射的概略时刻T*方法如下: a )卫星S i 的信号传播时间:0S Si / c dt r dt Si ;dt Si 为卫星钟差,需要进行相 对论改正; b )卫星S i 的信号发射时刻:T S T R Si ; c )卫星S i 在T Si 时刻的位置X S T Si X S Y Si Z Si d )对卫星位置X Si T Si 进行地球自转改正,得到 Xj e )根据X W i T Si 和测站概略位置X r 计算卫星和测站的几何距离 R S f )根据几何距离R Si 求信号传播时间I S R S /c

g ) 如果/ o S 10 7,则退出迭代。T 1Si T R :即为卫星信号发射时刻 h ) 否则0s i Si ,回带到b )进行迭代。 7、 求卫星§方向余弦 V V s i VW S 77S s 入入 I S 丫丫 s ZZ s A t o ' S — ,b i S ,炬’ S ,b ; 1 R i R S R S 8、 求卫星S 在观测方程式中的余数项: 其中: Si —— 卫星S j 的伪距观测值; R Si —— 卫星S 到测站的几何距离; c dt S 以米表示的卫星S i 的钟差; d trop —— 对流层延迟改正量,单位米,用简化的 hopfield 模型计算; d iono —— 电离层延迟改正量,单位米,采用无电离层伪距组合观测值时,此项为 0; D RTCM ——对伪距的差分改正值,此处为 0; 10、 重复第6— 9步,计算每颗卫星的系数和余数项 11、 将所有卫星的系数组成误差方程,以 x,y,z,cdt r 为未知参数进行求解,形 式应该是:AX L b S 0 t 1So 玻。 1 b? b* b ; 1 T S S S A 2 X x y z cdt L I s0 l S1 L l Si M M M M b S b Si b ; 1 i 0,1,L ,svnum 1 12、 求解法方程X A T PA 1 A T PL ,求出定位结果 |Si Si R Si c dt Si d trop d iono D RTC M 9、 选择epoch 中下一颗卫星S j 观测值,设其伪距为 S j

GPS卫星坐标计算

卫星定位技术与方法--根据广播星历参数计算卫星坐标 作业报告 指导教师:熊永良 班级:测绘二班 学生姓名:段海东 学生学号: 2 0 0 8 0 7 8 3 作业日期: 2010 年 12月 08 日

目录 一. 已知数据................................ 错误!未定义书签。 二. 计算步骤............................... 错误!未定义书签。 1.平均角速度 (mean angular speed) ........ 错误!未定义书签。 2.规化时刻(normal time) .................. 错误!未定义书签。 3.平近点角(mean anomaly) ................. 错误!未定义书签。 4.偏近点角(eccentric anomaly) ............ 错误!未定义书签。 5.真近点角(true anomaly) ................. 错误!未定义书签。 6.升交距角(argument of ascending node) ... 错误!未定义书签。 7. 轨道向径(Orbital radius)............ 错误!未定义书签。 8. 扰动改正(Perturbed correction)...... 错误!未定义书签。

10.卫星在升交点轨道直角坐标系中的坐标.... 错误!未定义书签。 11. 升交点经度(Longitude of ascending node)错误!未定义书 签。 三. 源程序.................................. 错误!未定义书签。四.程序运行结果........................... 错误!未定义书签。 七.作业体会................................. 错误!未定义书签。 根据广播星历参数计算卫星坐标 一. 已知数据:根据以下的广播星历参数计算UTC2004年1月30日8点0分00秒—20分00秒,每隔一分钟的PRN7的卫星坐标。Compute the coordinate of PRN7 with interval of 1 minute. Navigation data:

C语言计算GPS卫星位置

C 语言计算GPS 卫星位置 1 概述 在用GPS 信号进行导航定位以及制订观测计划时,都必须已知GPS 卫星在空间的瞬间位置。卫星位置的计算是根据卫星电文所提供的轨道参数按一定的公式计算的。本节专门讲解观测瞬间GPS 卫星在地固坐标系中坐标的计算方法。 2 卫星位置的计算 1. 计算卫星运行的平均角速度n 根据开普勒第三定律,卫星运行的平均角速度n0可以用下式计算: () 114/3 )(30-= =a M a G n μ 式中μ为WGS-84坐标系中的地球引力常数,且μ=3.986005×1014m 3 /s 2 。平均角速度n 0加上卫星电文给出的摄动改正数Δn ,便得到卫星运行的平均角速度n n=n 0+Δn (4-12) 2. 计算归化时间t k 首先对观测时刻t ′作卫星钟差改正 t=t ′-Δt 2)'()'(210oc oc t t a t t a a t -+-+=? 然后对观测时刻t 归化到GPS 时系 t k =t-t oc (4-13) 式中t k 称作相对于参考时刻t oe 的归化时间(读者注意:toc ≠toe )。 3. 观测时刻卫星平近点角M k 的计算 M k =M 0+n tk (4-14) 式中M 0是卫星电文给出的参考时刻toe 的平近点角。 4. 计算偏近点角E k E k =M k +esinE k (E k ,M k 以弧度计) (4-15) 上述方程可用迭代法进行解算,即先令E k =M k ,代入上式,求出E k 再代入上式计算,因为GPS 卫星轨道的偏心率e 很小,因此收敛快,只需迭代计算两次便可求得偏近点角E k 。 5. 真近点角V k 的计算 由于: ()164) cos 1()(cos cos ---=k k k E e e E V

GPS卫星的基本运行规律与GPS卫星位置计算

第3章 卫星的基本运行规律与GPS 卫星位置计算 GPS 卫星定位必须已知其在空间的瞬时位置,而针对GPS 卫星在协议地球坐标系中瞬时位置的研究,就是GPS 卫星的轨道运动理论。本章主要内容包括卫星无摄运动、受摄运动以及卫星瞬时位置与瞬时速度的计算等内容。 3.1 卫星的无摄运动 忽略所有的摄动力,仅考虑地球质心引力的情况下来研究卫星相对于地球的运动,在天体力学中,称之为二体问题。二体问题下的卫星运动虽然是一种近似描述,但能得到卫星运动的严密分析解,从而可以在此基础上再加上摄动力来推求卫星受摄运动的轨道。在摄动力的作用下,卫星的运动将偏离二体问题的运动轨道,常将此称为考虑了摄动力作用的受摄运动。 一、二体意义下卫星的运动方程 将地球和卫星均假设为质量集中的质点,研究二者在万有引力作用下的相对运动问题,在天体力学中称为二体问题。根据万有引力定律,地球受卫星的引力F e 可表示为 r r r m M G F e ? ??= 2 (3-1) 卫星受地球的引力F s 与F e 数值相等方向相反,根据牛顿第二定律卫星和地球在万有引力作 用下产生的加速度a s 和a e 分别为 ?? ?? ? ??=? ?-=r r r m G a r r r M G a e s 2 2 (3-2) 则卫星相对于地球的加速度A 应为 r r r m M G a a A e s ?+?-=-=2 )( (3-3) 因为m<

用MATLAB计算GPS卫星位置-最新文档资料

用MATLAB计算GPS卫星位置 GPS定位的基本原理简单来说就是在WGS-84空间直角坐标系中,确定未知点与GPS卫星的空间几何关系。因此利用GPS进行导航和测量时,卫星是作为位置已知的高空观测目标。那么如何精确快速的解算出卫星在空间运行的轨迹即其轨道是实现未 知点快速定位的关键。 1 标准格式RINEX格式简述 在进行GPS数据处理时,由于接收机出自于不同厂家,所以厂家设计的数据格式也是五花八门的,但是在实际中,很多时候需要把来自不同型号的接收机的数据放在一块进行处理,这就需要数据格式的统一,为了解决这种矛盾,RINEX(英文全称为:The Receiver Independent Exchange Format)格式则应运而生,该格式存储数据的类型是文本文件,数据记录格式是独立于接收机的出自厂家和具体型号的。由此可见,其特点是:由于是通用格式,所以可将不同型号接收机收集的数据进行统一处理,并且大多数大型数据处理软件都能够识别处理,此外也适用于多种型号的接收机联合作业,通用性很强。 RINEX标准文件里不是单一的一个文件,而是包括如下几种类型的文件[1]。 (1)观测数据文件(ssssdddf.yyo),记录的是GPS观测值信息,(OBServation data,简写OBS,为接收机记录的伪距、

相位观测值;O文件,如XG012191.10O)。 (2)导航电文文件(ssssdddf.yyn),记录的是GPS卫星星历信息(NAVavigation data,简写NAV,记录实时发布的广播星历;N文件,如XG012191.10N)。 (3)气象数据文件(ssssdddf.yym),主要是在测站处所测定的气象数据(METerological data,简写MET,记录气象仪器观测的温、压、湿度状况;M文件,如XG012191.10M)。 (4)GLONASS导航电文文件(ssssdddf.yyg),记录的是地球同步卫星的导航电文。 由上述可见,RINEX文件的命名规则为ssssdddf.yyt(t指的是数据类型,不同的文件,t所代表的字母不同),其中文件名前四个字母(ssss)指的是测站名,一般是用字母和数字的组合来定义,方便识别,用户自己定义。紧跟着的三个字母(ddd)指的是第一组数据的年积日(年积日是仅在一年中使用的连续计算日期的方法,是从当年1月1日起开始计算的天数。例如:每年的1月1日为第1日,2月1日为第32日,以此类推)如219表示8月7号,年积日的计算可通过在网上下载软件进行快速计算,也可自己编一个小程序计算。f指的是观测当天文件的观测序列号,其可以在0~9或A~Z中取值,如果文件序号取值为0,则其意味着今天一天观测的所有数据都放在该文件中,用户则不用在所有文件中一一去找当天的某个文件,只需在此文件中进行查询即可。对于f的理解,还有一点需要注意,通过下面的例子

GPS卫星位置计算(C语言)

#include #include #include #define bGM84 3.986005e14 #define bOMEGAE84 7.2921151467e-5 void main() { long double roota=0.515365263176E+04; //轨道长半轴的平方根(根号a) long double toe=0.720000000000E+04; //观测时刻toe long double m0=-0.290282040486E+00; //参考时刻toe的平近点角 long double e=0.678421219345E-02; //轨道偏心率e long double delta_n=0.451411660250E-08;//卫星的摄动改正数△n long double smallomega=-0.258419417299E+01;//近地点角距ω long double cus=0.912137329578E-05;//纬度幅角正弦调和项改正的振幅(弧度)long double cuc=0.189989805222E-06;//纬度幅角余弦调和项改正的振幅(弧度)long double crs=0.406250000000E+01;//轨道半径的余弦调和项改正的振幅(m)long double crc=0.201875000000E+03;//轨道半径的正弦调和项改正的振幅(m)long double cis=0.949949026108E-07;//轨道倾角的余弦调和项改正的振幅(弧度)long double cic=0.130385160446E-07;//轨道倾角的正弦调和项改正的振幅(弧度)long double idot=-0.253939149013E-09;//轨道倾角变化率I long double i0=0.958512160302E+00; //轨道倾角(弧度) long double bigomega0=-0.137835982556E+01;//升交点赤经 long double earthrate=bOMEGAE84; //地球自转的速率we long double bigomegadot=-0.856928551657e-08; long double t=0.720000000000E+04; //加入卫星钟差改正的归化时间 long double A; long double n0=0,n,tk; long double mk,ek,tak,ik,omegak,phik,uk,rk; long double corr_u,corr_r,corr_i; long double xpk,ypk,xk,yk,zk; int i; printf("输入的数据:\n"); printf("√a=%e \n",roota); printf("toe=%e \n",toe); printf("e=%e \n",e); printf("i0=%e \n",i0); printf("ω=%e \n",smallomega); printf("△n=%e \n",delta_n); printf("Ω0=%e \n",bigomega0); printf("I=%e \n",idot); printf("Cuc=%e \n",cuc); printf("Cus=%e \n",cus); printf("Crc=%e \n",crc); printf("Crs=%e \n",crs);

根据轨道根数来计算卫星位置

创作编号: GB8878185555334563BT9125XW 创作者: 凤呜大王* 根据轨道根数来计算卫星位置 一、计算卫星在轨道坐标系中的位置 首先建立一个轨道坐标系,该坐标系的坐标原点位于地心,Y X '''',位于轨道平面上,Z '' 轴和轨道平面的法线矢量N 重合。轨道坐标系是一个右手坐标系。计算步骤如下: 1. 用下式计算平近点角M )(0t t n M -= 0t 为卫星过近地点的时刻;n 为卫星的平均角速度,用下式计算: 3 a GM n = )s rad ( a 为轨道椭圆的长半径,231410986005.3s m GM ?==μ(注:G 引力常数,此M 为地球质量) 2. 解开普勒方程E e M E sin ?+=,计算偏近点角E 解算时采用角度制,o o e e ρ?= (e 离心率) 代入开普勒方程反复迭代,直至i i E E -+1<ε时为止。 (当偏心率很小时,迭代法的收敛速度很快) 3. 计算卫星至地心的距离r )cos 1(E e a r -= 4. 计算真近点角θ 2 tan 112 E e e an t -+= θ 5. 计算卫星在轨道坐标系中的坐标 sin cos =''=''=''Z r Y r X θθ 或跳过3、4直接计算:0sin 1sin cos 2=''-==''-=''Z E e a E b Y ae E a X 二、轨道坐标和大地坐标的换算 将上式化算到大地坐标系中去,一是用地心空间直角坐标系(Z Y X ,,)来表示点的位置,二是用经纬度和大地高(H L B ,,)来表示点的位置,只要确定椭球体的参数和定位,(Z Y X ,,)和(H L B ,,)之间就可以换算。 轨道坐标系只需经三次旋转即可和大地坐标系(Z Y X ,,)重合。首先绕Z ''轴

GPS卫星位置计算

GPS卫星位置计算实验 学校:合肥工业大学 学号: 专业班级:测绘工程10-1班 学院:土木与水利工程学院指导教师:陶庭叶

1、通过对GPS卫星位置的计算,增强我们对《GPS测量原理及应用》课程的理解,使我们牢固掌握GPS测量的基本原理和过程,熟悉GPS测量数据处理的基本技能和计算方法。 2、提高运用计算机语言编程开发能力,运用测量平差知识、数学知识和计算机知识,通过给定的程序算法,编制程序实现GPS卫星位置的计算过程。 二、实验内容及要求 1、通过课堂对GPS测量原理的学习,在课后自主完成GPS卫星位置的计算过程并按照课本上的步骤设计程序完成GPS卫星位置的计算过程; 2、要求每位同学独立完成GPS卫星位置的计算过程,编写程序,调试程序,并编写程序设计文档。要求过程和算法正确、程序运行正确、设计文档完备;三、课程设计工具 运用自己熟悉的编程开发语言(C、C#、C++、VC、VS、VB、FORTRAN等)。

1、实验简单介绍 运行后的主界面比以前做的程序要漂亮些,给界面增加了一副图片,让界面看起来还是比较的漂亮,但由于起始的参数较多,因此,界面整体看起来比较的拥挤,但这个不影响程序的计算过程。 整个程序的功能不是很多,但满足了基本的要求,能够进行卫星的位置计算,并且能够达到很好的精度,与课本上给出的结果相差很小,符合实验的要求。 为了避免繁琐的数据的输入,在本次程序中我增加了一个的功能按钮,点击后,程序自动给相关的起始数据赋值并显示在界面上,如图所示:

这些数据是教材《GPS测量原理与应用》41页的卫星星历数据;

用户也可以根据需要更改相应的数据,如上图所示,当点击按钮时,就可以在对话框相应的位置计算出卫星的坐标,如下图所示: 其中,计算出的卫星的坐标为Xk = 4589210.3510074820,Yk = 25371005.6999580190,Zk = -5618292.2998269377,这是卫星在地固坐标系中的坐标,如果还知道极移参数就可以计算出卫星在协议地球坐标系中的坐标了。 用户也可以选择清除计算的结果,点击即可完成,如下图所示:

从广播星历计算卫星位置

从广播星历计算卫星位置: 1. 计算卫星运动的平均角速度n 首先根据广播星历中给出的参数A 计算出参考时刻TOE 的平均角速度0n : 3 0) (A GM n = , 式中,GM 为万有引力常数G 与地球总质量M 之积。然后根据广播星历中给出的摄动参数n ?计算观测时刻卫星的平均角速度n :n n n ?+=0。 2. 计算观测瞬间卫星的平近点角M : )(0TOE t n M M -+= 式中,0M 为参考时刻TOE 时的平近点角,由广播星历给出。 3. 计算偏近点角E : E e M E sin += 解上述方程可用迭代法或微分方程改正法。 4. 计算真近点角f ??? ???? --=--=E e E e f E e e E f cos 1sin 1sin cos 1cos cos 2 式中,e 为卫星轨道的偏心率,由广播星历给出。 5. 计算升交距角u ': f u +='ω 式中,ω为近地点角距,由广播星历给出。 6. 计算摄动改正项i r u δδδ,,: 广播星历中给出了下列6个摄动参数:is ic rs rc us uc C C C C C C ,,,,,,据此可以求出由于2J 项而引起的升交距角u 的摄动改正项u δ、卫星矢径r 的摄动改正项u δ和卫星轨道倾角 i 的摄动改正项i δ。计算公式如下: ??? ??' +'='+'=' +'=u C u C u C u C u C u C is ic i rs rc r us uc u 2sin 2cos 2sin 2cos 2sin 2cos δδδ 7. 计算0,,i r u ''进行摄动改正

卫星导航定位算法与程序设计-单点定位程序流程

GPS 单点定位程序流程 一、计算流程 1、 读取RINEX N 文件,将所有星历放到一个列表(数组)ephlst 中。 2、 读取RINEX O 文件,读取一个历元观测值epoch 3、 数据预处理 根据epoch 中的卫星号和历元时刻R T 在ephlst 查找相应的卫星星历, 准则3600.0R T TOE -

g) 如果10710i i S S ττ--< ,则退出迭代。11i i S S R T T τ=-即为卫星信号发射时刻。 h) 否则01i i S S ττ= ,回带到b)进行迭代。 7、 求卫星i S 方向余弦 ()()()01 2 3 ,,,1i i i i i i i i i i S S S S S S S S S S X X Y Y Z Z b b b b R R R ---==== 8、 求卫星i S 在观测方程式中的余数项: i i i i S S S S trop iono RTCM l R c dt d d D ρ=-+?--+ 其中: hopfield 0i i i S i S i S i trop iono RTCM S R S c dt S d d D ρ?——卫星的伪距观测值; ——卫星到测站的几何距离;——以米表示的卫星的钟差; ——对流层延迟改正量,单位米,用简化的模型计算; ——电离层延迟改正量,单位米,采用无电离层伪距组合观测值时,此项为;——对伪距的差分改正值,此处为0; 9、 选择epoch 中下一颗卫星j S 观测值,设其伪距为j S ρ 10、 重复第6—9步,计算每颗卫星的系数和余数项 11、 将所有卫星的系数组成误差方程,以(),,,r x y z cdt 为未知参数进行求解,形 式应该是:AX L = [] () 0001110 1 0120120121110,1,,1i i i i S S S S S S T S S S S S S b b b b b b A X x y z cdt L l l l b b b i svnum ????????===? ? ????????=- 12、 求解法方程()()1?T T X A PA A PL -=,求出定位结果