当前位置:文档之家› GPS卫星位置的计算

GPS卫星位置的计算

GPS卫星位置的计算
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;

}

else

{

n[1] = n[1] + 2000;

}

if (n[2] <= 2)

{

yy = n[1] - 1;

mm = n[2] + 12;

}

if (n[2] > 2)

{

yy = n[1];

mm = n[2];

}

JD = (int)(365.25 * yy) + (int)(30.6001 * (mm + 1)) + n[3] + (UT / 24) + 1720981.5;/*化为儒略日*/ gpsz = (int)((JD - 2444244.5) / 7);/*计算GPS周*/

t = (JD - 2444244.5 - 7 * gpsz) * 24 * 3600;/*得出GPS秒*/

tk = t - n[18];/*tk1为中间值,用以判断tk与正负302400的关系,然后返回到tk上*/ while (tk > 302400 || tk < -302400)

{

if (tk > 302400)

{

tk = tk - 604800;

}

else

{

tk = tk + 604800;

}

}/*计算归化观测时间*/

Mk = n[13] + nn * tk;/*观测时刻的卫星平近点角*/

Ek = Mk;

Ek = Mk + n[15] * sin(Ek);

Ek = Mk + n[15] * sin(Ek);/*迭代两次计算观测时刻的偏近点角*/

Vk = atan(sqrt(1 - n[15] * n[15]) * sin(Ek)) / (cos(Ek) - n[15]);/*真近点角*/

Yk = Vk + n[24];/*升交距角*/

Gu = n[14] * cos(2 * Yk) + n[16] * sin(2 * Yk);

Gr = n[23] * cos(2 * Yk) + n[11] * sin(2 * Yk);

Gi = n[19] * cos(2 * Yk) + n[21] * sin(2 * Yk);/*摄动改正项*/

uk = Yk + Gu;

rk = n[17] * n[17] * (1 - n[15] * cos(Ek)) + Gr;

ik = n[22] + Gi + n[26] * tk;/*经摄动改正后的升交距角、卫星矢径、轨道倾角*/ xk = rk * cos(uk); yk = rk * sin(uk);

zk = 0;/*卫星在轨道坐标系的坐标*/

Lk = n[20] + (n[25] - 7.29211515E-5) * tk - 7.29211515E-5 * n[18];/*观测时刻t的升交点经度*/ X = xk * cos(Lk) - yk * cos(ik) * sin(Lk);

Y = xk * sin(Lk) + yk * cos(ik) * cos(Lk);

Z = yk * sin(ik);/*卫星在WGS-84坐标系的坐标*/

printf("该卫星在WGS-84坐标系中的坐标为:\nX = %lf m\nY = %lf m\nZ = %lf m\n", X, Y, Z); fclose(fp);

return 0;

}

计算结果:

该卫星在WGS-84坐标系中的坐标为:

X = 9223153.692525 m

Y = 24133486.931401 m

Z = 6032585.919385 m

卫星坐标计算

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.doczj.com/doc/2918286875.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;

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+-=

卫星坐标计算实验

西南交通大学 《卫星坐标计算实验》 实验报告 专业: 班级: 姓名: 学号: 成绩: 2017年3月20日

一、实验步骤: 1、将星历文件中需要的数据作为矩阵导入MA TLAB 中的变量。 2、编写计算程序代码 1)计算平均角速度0n : 03GM n a = 2)改正平角速度n : 0n n n =+? 3)计算平近点角t M : 0()t e M M n t t =+?- 4)通过迭代计算,计算偏近点角t E : sin t t t E M e E =+ 5)计算真近点角ν: 21sin =atan cos t t e E E e ν-- 6)计算升交距角0u : 0u νω=+ 7)计算卫星轨道摄动项改正数: 2cos sin cos sin cos sin u u Cuc Cus r Crc Crs i Cic Cis ??? ?? ?? =??=+?=+?=+ 8)计算改正后的真近点角ν: 0t u u u =+? 9)计算改正后的向径t r : 0t r r r =+? 10)计算改正后的倾角t i : 0()t e i i i i t t =+?+?-

11)计算轨道平面内的坐标: cos sin 0t t t t t t t x r u y r u z ????????=???????????? 12)计算观测瞬间升交点的经度t l : 0()t e e e l l t t t ω=+Ω++ 13)计算旋转矩阵: 1000cos()sin()0sin()cos()x t t t t R i i i i ?? ??=-?????? cos()sin()0sin()cos() 000 1t t z t t l l R l l -????=?????? 14)卫星坐标: t z x t t X x Y R R y Z z ???? ??? ? =???????????? 15)计算钟差: 2012()()e e t a a t t a t t ?=+?-+?- 二、实现代码: function pos=SPOS(br,dt) GM=3.986005e+14; we=7.2921151467e-5; %a0 a1 a2 a0=br(1,2); a1=br(1,3); a2=br(1,4); % IODE Crs dn M0 Crs=br(2,2); dn=br(2,3); M0=br(2,4); % Cuc e Cus sqA Cuc=br(3,1); e=br(3,2); Cus=br(3,3); sqA=br(3,4); % toe Cic OM0 Cis toe =br(4,1); Cic =br(4,2); OM0 =br(4,3);

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元素,

GPS卫星坐标计算

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

目录 一. 已知数据 (2) 二. 计算步骤 (2) 1.平均角速度 (mean angular speed) (2) 2.规化时刻(normal time) (3) 3.平近点角(mean anomaly) (3) 4.偏近点角(eccentric anomaly) (3) 5.真近点角(true anomaly) (3) 6.升交距角(argument of ascending node) (3) 7. 轨道向径(Orbital radius) (3) 8. 扰动改正(Perturbed correction) (4) 10.卫星在升交点轨道直角坐标系中的坐标 (4) 11. 升交点经度(Longitude of ascending node) (5) 三. 源程序 (5) 四.程序运行结果 (14) 七.作业体会 (15)

根据广播星历参数计算卫星坐标 一. 已知数据: 根据以下的广播星历参数计算UTC2004年1月30日8点0分00秒—20分00秒,每隔一分钟的PRN7的卫星坐标。Compute the coordinate of PRN7 with interval of 1 minute. Navigation data: 卫星导航文件格式: 二. 计算步骤:The steps for satellite coordinates 1.平均角速度 (mean angular speed): ?n 由广播星历获得, GM=3.986005e+14 n n n ?+=03 0a GM n =

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;

计算卫星位置的程序

计算卫星位置 一、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);

C语言计算GPS卫星位置

C 语言计算G P S 卫星位置 1 概述 在用GPS 信号进行导航定位以及制订观测计划时,都必须已知GPS 卫星在空间的瞬间位置。卫星位置的计算是根据卫星电文所提供的轨道参数按一定的公式计算的。本节专门讲解观测瞬间GPS 卫星在地固坐标系中坐标的计算方法。 2 卫星位置的计算 1. 计算卫星运行的平均角速度n 根据开普勒第三定律,卫星运行的平均角速度n0可以用下式计算: 式中μ为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 然后对观测时刻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 的计算 由于:

因此: 6.升交距角Φk 的计算 ω为卫星电文给出的近地点角距。 7. 摄动改正项δu,δr,δi 的计算 δu,δr,δi 分别为升交距角u 的摄动量,卫星矢径r 的摄动量和轨道 倾角i 的摄动量。 8. 计算经过摄动改正的升交距角u k 、卫星矢径r k 和轨道倾角i k 9. 计算卫星在轨道平面坐标系的坐标 卫星在轨道平面直角坐标系(X 轴指向升交点)中的坐标为 10. 观测时刻升交点经度Ωk 的计算 升交点经度Ωk 等于观测时刻升交点赤经Ω(春分点和升交点之间的角距)与 格林泥治视恒星时GAST (春分点和格林尼治起始子午线之间的角距)之差, Ωk =Ω-GAST (4-23) 又因为: tk oe Ω+Ω=Ω (4-24) 其中Ωoe 为参与时刻t oe 的升交点的赤经; Ω 是升交点赤经的变化率,卫星电文每小时更新一次Ω和t oe 。 此外,卫星电文中提供了一周的开始时刻t w 的格林尼治视恒星时GAST w 。由于 地球自转作用,GAST 不断增加,所以: GAST=GAST w +ωe t (4-25) 式中ωe ×10-5rad/s 为地球自转的速率;t 为观测时刻。 由式(4-24)和(4-25),得: 由(4-13)式,得: 其中0oe w GAST Ω=Ω-,o Ω、Ω、oe t 的值可从卫星电文中获取。 11. 计算卫星在地心固定坐标系中的直角坐标

卫星坐标计算实验

《卫星坐标计算实验》 实验报告 专业: 班级: 姓名: 学号: 成绩: 2017年3月20日

一、实验步骤: 1、将星历文件中需要的数据作为矩阵导入MATLAB 中的变量。 2、编写计算程序代码 1)计算平均角速度0n : 0n = 2)改正平角速度n : 0n n n =+? 3)计算平近点角t M : 0()t e M M n t t =+?- 4)通过迭代计算,计算偏近点角t E : sin t t t E M e E =+ 5)计算真近点角ν: =atan cos t t E E e ν- 6)计算升交距角0u : 0u νω=+ 7)计算卫星轨道摄动项改正数: 2cos sin cos sin cos sin u u Cuc Cus r Crc Crs i Cic Cis ????? ?? =??=+?=+?=+ 8)计算改正后的真近点角ν: 0t u u u =+? 9)计算改正后的向径t r : 0t r r r =+? 10)计算改正后的倾角t i : 0()t e i i i i t t =+?+?-

11)计算轨道平面内的坐标: cos sin 0t t t t t t t x r u y r u z ????????=???????????? 12)计算观测瞬间升交点的经度t l : 0()t e e e l l t t t ω=+Ω++ 13)计算旋转矩阵: 1000cos()sin()0sin()cos()x t t t t R i i i i ?? ??=-?????? cos()sin()0sin()cos() 000 1t t z t t l l R l l -????=? ????? 14)卫星坐标: t z x t t X x Y R R y Z z ???? ??? ?=???? ???????? 15)计算钟差: 2 012()()e e t a a t t a t t ?=+?-+?- 二、实现代码: function pos=SPOS(br,dt) GM=+14; we=; %a0 a1 a2 a0=br(1,2); a1=br(1,3); a2=br(1,4); % IODE Crs dn M0 Crs=br(2,2); dn=br(2,3); M0=br(2,4); % Cuc e Cus sqA Cuc=br(3,1); e=br(3,2); Cus=br(3,3); sqA=br(3,4); % toe Cic OM0 Cis toe =br(4,1); Cic =br(4,2); OM0 =br(4,3);

卫星位置计算程序

#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;

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<

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

计算与测定GNSS卫星位置 【任务概述】 利用GNSS卫星进行导航和定位,就是根据已知的卫星轨道参数计 算出卫星瞬时位置,通过观测和数据处理,确定接收机的位置和载体 的运动速度。所以,获取准确的卫星轨道参数,计算出卫星在观测瞬间的位置,是GNSS导航定位的基础。因为GNSS系统坐标系统采 用WGS-84坐标系统。为了计算卫星在WGS-84大地坐标系中的位置,首先需要计算卫星在其轨道平面内的位置。此时定义:原点与地 心M相重合,x轴指向升交点,y轴在轨道平面内垂直于x轴,我们 称其为轨道平面直角坐标系,它是一种过渡性的坐标系。再进行坐标系的转换,将卫星在其轨道的坐标转换到地面直角坐标系下。 【学习目标】 (1)知识目标:①星历文件的获取方法有哪些?②了解星历文件的构成?③明确卫星星历参数,及计算公式推导过程。 (2)技能目标:①如何打开星历文件;②如何读取星历文件,并将参数赋值到变量中;③如何计算卫星位置。 【教学内容】 一、GPS导航原理 GPS卫星导航,就是用GPS卫星发送的导航定位信号引导运载体从 一个地点航行到另一个地点的过程。航行的意思;也就是确定航行体运动到什么地方和向何方向运动的意思。要使飞机、舰船、车辆等运载工具成功地完成所预定的航行任务。除了起始点和目标的位置之外,

主要的就是必须知道航行体所处的即时位置。因为只有确定了即时位置才能考虑怎样到达下一目的地的问题;如果连自己已经到了什么地 方和以后该到什么地方也不知道的话,那就无从谈起完成预定航行任务的问题。由此可见,导航的首要问题就是确定航行体的即时位置。另外,为现代载体提供精确的导航信息,还需要测定载体的瞬时速度,精确的时间,运动裁体的姿态等状态参数,进而“导引”该运动载体准 确地驶向预定的后续位置。由此可见,导航是一种广义的动态定位。GPS卫星所发送的导航定位信号,是一种可供无数用户共享的空间 信息资源;陆地、海洋和空间的广大用户,只要持有一种能够接收、跟踪、变换和测量GPS信号的接收机,就可以全天候和全球性地测量运动栽体的七维状态参数(三维坐标、三维速度、时间)和三维姿态参数;其用途之广,影响之大,是任何其他接收设备望尘莫及的;上至航空 航天,下至渔业、导游、摄影和农业生产,均可利用GPS信号接收机。对于任何某一具体的导航过程,首先必须确定本次航行的起始点、目的点以及航行计划路径(总称之为一条航线)。路径的标定一般是用一系列均匀分布于路径上的坐标点来确定,这些坐标点就叫航路点。起始点、目的点、航路点的位置坐标可以是从地图上量取,也可以是直接测得,总之必须是已知的。 在航行过程中,GPS定位系统能够实时提供给航行体位置信息(坐标),结合计算机中存储的航行路径中各航路点位置信息,可以计算出各种可用来纠正航行偏差、指导正确航行方向的制导参数,如应航迹角、偏航距和待航距离(待航时间)等,图10-1以飞机导航为例,说明各制

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

创作编号: 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卫星导航定位技术与方法作业报告之卫星坐标计算

1 作业任务------------------------------------------------------------------------------------ 3 2 作业思想--------------------------------------------------------------------------------------- 3 3 作业条件及数据-------------------------------------------------------------------- 3 4 作业过程--------------------------------------------------------------------------- 4 5 源程序----------------------------------------------------------------------------- 5 6 计算结果--------------------------------------------------------------------------- 9 7心得体会与建议----------------------------------------------------------------------------- 9

1 作业任务 根据教材所给广播星历参数,编程计算UTC2004年1月30日8点0分00秒—20分00秒,每隔1分钟的卫星号为7的卫星坐标。 2作业思想 根据教材提供广播星历参数,按照卫星坐标计算步骤一步一步求解表示卫星位置的量,最后求出卫星在地固坐标系中的空间直角坐标。根据历元间隔,计算出共21个历元的卫星坐标。 此次作业的已知条件及计算步骤均为教材提供且思路清晰,简明易懂,只要在编程过程中注意个已知量、中间量和待求量的表示及数据对应正确,涉及角度的计算时小心避免错误即可。 3作业条件及数据 由GPS卫星导航文件(表3.1)提取出7号卫星的轨道参数及其摄动改正项 表3.1 提取及整理后的广播星历参数:

GPS卫星位置的计算

#include #include #include "rinex.h" #include "sv.h" void WriteSatPosFile(FILE *SatPosFile,int prn,XYZCoor *SVPos); void GetSVPos(SVText *Text,double t,double *X,double *Y,double *Z); double Get_atan(double z,double y); int GetGPSTime(int year,int month,int day, int hour,int minute,double second,double *gpstime); int read_RinexEPP( FILE *RinexEPP_file,SVText *snv, int *year, int *month,int *day,int *hour,int *minute, double *second,double *gpstime,int *wn); void main() { char RinexEPPName[20]; FILE *RinexEPP_file, *SatPosFile; double SVPosX,SVPosY,SVPosZ; int prn,i; SVText snv; char temp[200]; int wn,year,month,day,hour, minute; double second,gpstime; printf("Please Input Rinex Nav File Name: "); scanf("%s",RinexEPPName); if ((RinexEPP_file = fopen(RinexEPPName, "rt")) == NULL) { fprintf(stderr, "Cannot open input file.\n"); exit(1); } if ((SatPosFile = fopen("satpos.out", "w"))== NULL) { fprintf(stderr, "Cannot open outut file.\n"); exit(1); } rewind(RinexEPP_file); for(i=0;i<3;i++) { fgets(temp,200,RinexEPP_file); } do { if(read_RinexEPP(RinexEPP_file,&snv, &year,&month,&day,&hour,&minute,&second,&gpstime,&wn) ) break; /* compute satellite position */ GetSVPos(&snv,gpstime,&SVPosX,&SVPosY,&SVPosZ); /* write satellite position file */ fprintf(SatPosFile,"%3i%19.11e%19.11e%19.11e\n", snv.prn,SVPosX,SVPosY,SVPosZ);

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,这是卫星在地固坐标系中的坐标,如果还知道极移参数就可以计算出卫星在协议地球坐标系中的坐标了。 用户也可以选择清除计算的结果,点击即可完成,如下图所示:

相关主题
文本预览
相关文档 最新文档