计算卫星位置的程序

合集下载

从广播星历计算卫星位置

从广播星历计算卫星位置

从广播星历计算卫星位置: 1. 计算卫星运动的平均角速度n首先根据广播星历中给出的参数A 计算出参考时刻TOE 的平均角速度0n :30)(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 Ee e Ef 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 irs rc r us uc u 2sin 2cos 2sin 2cos 2sin 2cos δδδ 7. 计算0,,i r u ''进行摄动改正⎪⎪⎩⎪⎪⎨⎧-++=+-=+'=+'=)()cos 1(0TOE t dt di i i E a r r u u i r r u δδδδ 式中:a 为卫星轨道的长半径,2)(A a =,0i 为TOE 时刻的轨道倾角,由广播星历中的开普勒六参数给出,dtdi为i 的变化率,由广播星历中的摄动九参数给出。

物联网中的物体定位技术使用教程

物联网中的物体定位技术使用教程

物联网中的物体定位技术使用教程随着物联网的快速发展,物体定位技术作为其重要组成部分之一,得到了广泛应用。

物体定位技术通过无线通信、传感器技术和定位算法,可以准确追踪和定位物体的位置,为用户提供实时的数据和信息。

本篇文章将为您介绍物联网中的物体定位技术使用教程。

一、全球卫星导航系统(GNSS)全球卫星导航系统(Global Navigation Satellite System,GNSS)是目前最常用的物体定位技术之一。

它利用一组卫星通过全球覆盖的系统,提供精准的时间和位置信息。

目前最著名的GNSS系统是美国的GPS、俄罗斯的GLONASS和欧洲的Galileo系统。

在物联网中,物体定位通常使用GPS技术。

为了使用GPS技术定位物体,您需要准备一台支持GPS功能的设备,如智能手机、GPS跟踪器或无人机等。

以下是使用GNSS技术定位物体的步骤:1. 启动设备并打开GPS功能。

2. 设备将自动搜索可用的卫星信号。

通常,GPS设备需要接收至少4颗卫星的信号才能确定准确的位置。

3. 等待设备获得足够的卫星信号后,它将计算出物体所在的位置并显示在屏幕上。

二、蓝牙定位技术蓝牙定位技术是另一种在物联网中常用的物体定位方式。

它基于蓝牙技术,通过检测和测量蓝牙信号强度来确定设备的位置。

以下是使用蓝牙定位技术的步骤:1. 检查设备是否支持蓝牙定位功能,并确保其开启。

2. 在物体需要被定位的区域内安装蓝牙信标(Beacon)。

蓝牙信标是一种小型设备,可发送蓝牙信号,供其他设备检测和测量。

3. 使用配备蓝牙定位功能的设备(如智能手机或电脑)扫描信标。

4. 设备将测量信标的信号强度,并根据信号强度与设备之间的距离推算出设备的位置。

蓝牙定位技术在室内定位和室外定位方面具有较高的精度,常用于大型商场、展览馆和医院等室内环境中。

三、无线传感器网络(WSN)无线传感器网络(Wireless Sensor Network,WSN)是一种由多个无线传感器节点组成的网络,每个节点都配有传感器和通信模块。

卫星导航定位算法与程序设计_第4课_伪距单点定位数学模型

卫星导航定位算法与程序设计_第4课_伪距单点定位数学模型

5% 50% 95% 分布
5cm 10cm 20cm 50cm 1m 2m 5m 10m 20m 50m 100m
引用
定位精度与用户需求的关系
精密 工程 监控
地壳 形变 工程 监控
精密 大地 定位
工程与大 地定位
地理 信息 更新
地理 信息 更新
精密 交通 监控
交通 近海 自引导 监控 交通 导航
控制
卫星导航定位算法与程序设计
主讲: 刘晖 副教授
武汉大学卫星导航定位技术研究中心
课程讲授次序中的位置
软件设计相关 编程语言相关 定位算法相关
•建立起软件设计的宏观概念(战略层次); •巩固软件设计方法的知识; •训练从设计到实现的工作流程;
•掌握软件编程平台的使用(战术层次); •培养良好的编程习惯 •编程技巧的训练
GDOP – Geometry Dilution of Precision
PDOP – Position Dilution of Precision
TDOP – Time Dilution of Precision
HDOP – Horizontal Dilution of Precision
内容
GNSS定位技术回顾
定位技术的分类及发展 定位技术及其精度 定位精度与用户需求的关系 当前技术热点
伪距单点定位数学模型 伪距差分定位数学模型
概述
GNSS可提供全天候、高精度、高可用性、 高时效的三维空间定位
GNSS:3G+1C
3G:GPS、GLONASS、Galileo 1C:COMPASS
P ( X s X )2 (Ys Y )2 (Zs Z )2 atmos dt dT

三星M8800实现GPS定位导航教程

三星M8800实现GPS定位导航教程

【大硕原创】谁说小八不能定位导航?三星M8800实现GPS定位导航教程【大硕原创】三星M8800实现GPS定位导航教程(追加edenpang大侠撰写的一些使用经验)入手三星m8800之初并没有太在意小八是否有GPS定位导航的功能,被他吸引完全是高质量的摄影功能和不算太高的价格(当然不是指行货)。

然而,当把小八其他功能都挖掘的差不多的时候,网上关于小八是否有GPS模块以及是否能定位导航之争不由不让人心里痒痒,不管怎么说有GPS总是件令人愉悦的事情。

M8800原机自带了一个像垃圾一样的Google地图,其并非GPS导航,而是通过测算手机周边信号发射基站的位置来推断手机大致处于什么位置,这种定位非常不准确,而且由于每次都要在线下载地图,使得流量大增,因此Google地图可谓鸡肋中的鸡肋。

那么,M8800是否真的只能实用这种垃圾地图呢?关键在于小八有没有真正意义上的GPS模块。

事实证明,小八是有GPS模块的,这个证明的过程繁杂,在此不叙。

那么接下来就是如何通过软件实现小八的导航功能。

市面上流行的手机导航软件基本上只支持智能手机,对小八这个非智能手机来说丝毫没有可能用的上。

然而,上帝是眷顾众生滴,于是“乐图”出现了。

乐图的定位是利用软件提供地图读取,然后通过手机蓝牙与外置GPS模块连接,使得原本不具备GPS功能的手机享受这一功能。

不过由于乐图支持java,使得M8800也分享了能够使用GPS定位导航的快感。

这里有必要插叙一段,由于三星手机系统封闭,在最初的时候M8800使用乐图软件时不能读取记忆卡里的离线地图包,使得实用性大打折扣。

乐图论坛的管理员alvin注意到这一情况,经过反复测试、修改终于使m8800能够完美运行乐图导航软件并顺利读取记忆卡里的离线地图,直接为大家省了很多流量钱啊,在此谢谢alvin和乐图团队!我会一直支持乐图的!好,继续正题,首先下载m8800专用版的乐图软件(附件里有),装入手机(小八如何安装软件不在此文叙述之列,如有疑问请上网上自搜)。

卫星位置,速度,钟差和钟漂计算

卫星位置,速度,钟差和钟漂计算
8
tk = tk + 604800, 当tk < −302400 t , 其它情况 k
根据广播星历计算卫星位置(2/5)
4. 对平均运动角速度进行改正
n = n0 + ∆n
5. 计算平近点角
M k = M 0 + ntk
6. 计算偏近点角(利用下面的开普勒方程, 迭代求解)
M k = Ek − e sin Ek
cos Ω k = sin Ω R k 0
− sin Ωk cos ik cos Ω k cos ik sin ik
− ( x 'k sin Ωk + y 'k cos Ω k cos ik ) ( x 'k cos Ωk − y 'k sin Ωk cos ik ) 0
y 'k sin Ω k sin ik y 'k cos Ω k sin ik y 'k cos ik
x 'k = rk cos uk y 'k = rk sin uk
'k = r k cos uk − rk u k sin uk x 'k = r k sin uk + rk u k cos uk y
17
卫星运动速度计算②
=Ω −ω Ω k
=i + 2 ( Cis cos 2uk − Cis sin 2uk ) uk I k
toe , A , e, M 0 , ω , i0 , Ω ( IDOT ) , Ω ∆n, i Cus , Cuc , Crs , Crc , Cis , Cic toc , ClkBias, ClkDrift , ClkDriftRate

卫星导航定位算法与程序设计_第13课_卫星位置钟差计算

卫星导航定位算法与程序设计_第13课_卫星位置钟差计算
24
卫星位置的计算(2)
• 任意时刻t卫星位置的计算
– 原理:插值法 – 方法:拉格朗日插值法、切比雪夫多项式、三次样 条内插、三角多项式内插等 已知函数y f ( x)的n个结点x0 , x1 ,..., xn 及其对应的
函数值y0 , y1 ,..., yn 对于插值区间内的任一点x,其函数 值为 x xi f ( x) ( ) yk k 0 i 0 xk xi ik
xk rk cos uk yk rk sin uk
18
计算卫星位置(5/5)
14 计算改正后的升交点经度
Lk 0 earth t toe
15计算在地固坐标系下的位置
xk X Y RZ ( k ) Rx (ik ) yk Z 0
GM
e 7.2921151467 105 rad s
地球自转角速度
卫星星历
toe , A , e, M 0 , , i0 , n, i IDOT , Cus , Cuc , Crs , Crc , Cis , Cic toc , ClkBias, ClkDrift , ClkDriftRate
星历计算中常用常量和参数 星历参数详解
广播星历参数
精密星历参数
根据广播星历计算卫星位置等参数 根据精密星历计算卫星位置等参数 上机实习
星历计算中常用常数和符合
3.1415926535898
c 2.99792458 108 m s
真空中的光速
2
3.9860047 1014 m3 s
9
广播星历
A , e, M 0 , , i0 , toe , 轨道根数 n, i IDOT , Cus , Cuc , Crs , Crc , Cis , Cic 轨道摄动量

安卓导航之Oruxmaps系列教程

安卓导航之Oruxmaps系列教程

安卓导航之Oruxmaps系列教程一、初识ORUXMAPS。

Ourxmaps是个比较好用的安卓导航程序。

对于使用卫星图进行越野,比较适用。

ORUXMAPS,可以使用自己的地图,DIY自己的路线。

软件在网上随便百度一下就能找到。

如果不想太麻烦,搞地图源神马的,就不要去下载神马最新版本的了。

推荐下载5.5.3版本,自带GOOGLE地图源。

之后的可能因为版权神马的原因不带了。

喜欢自己搞地图源就无所谓神马版本了。

安装好的程序,图标如下(版本不同,图标可能不同):点击上面那个图标,就是上面那个,对,就是这个,点击打开,进入软件主界面:界面简洁明了。

上部是导航、地图管理;这条的下面是状态栏,标识了目前开启的内容,状态栏右侧是指北标记;主界面左侧是缩放、移动、测距工具栏;右侧是开启GPS,开启航迹记录,移动工具,雷达面板(数据界面)和3D视图;底部的参数是比例尺、地图层级、缩放比例。

点击菜单按钮(就是你的实体键,菜单键),弹出的主菜单:基本不需要细讲吧,都点击看看,全是汉语,应该很容易理解的。

好了,初始Ourxmaps的任务完毕。

二、ourxmaps基本操作安装程序就是为了应用,应用就是操作么,所以我们开始对这个软件进行操作,好废话啊。

恩,大段的开篇,必须废。

2.1主界面功能介绍这个好像上面初识的时候讲过了,将就下,主界面就这些东西。

不明白的对照上面的初始和实际程序参考,了解就好。

恩,再稍微细化点。

这个工具栏,第一个用于记录航迹,统计信息;第二个关于路点的一切;第三个关于航线的一切;第四个关于地图的一切。

后面在应用的时候会说到,这就不赘述了。

2.2数据界面介绍数据界面是什么?就是那个雷达图标点击进入后的界面。

不过标准好像不是叫数据界面,而是仪表盘,不过我喜欢这么叫,凭什么?因为是我在写教程,嘎嘎嘎嘎。

这个里面详细列举了各种参数。

不过仪表盘不是死的,可以自己做属于自己的仪表盘。

TC-1到TC-5一共五个标签页,里面分别有不同的参数给予。

卫星位置计算程序

卫星位置计算程序

#include<iostream>#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.14159265357589int main(void){doubletoc,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<<"输º?入¨?秒?数ºy据Y参?数ºy toc\n";cin>>toc;cout<<"输º?入¨?秒?数ºy据Y幂Y数ºy\n";cin>>k;toc=toc*pow(10,k);cout<<"输º?入¨?时º¡À钟¨®修T正y2 a2\n";cin>>a2;cout<<"输º?入¨?时º¡À钟¨®修T正y1 a1\n";cin>>a1;cout<<"输º?入¨?时º¡À钟¨®修T正y0 a0\n";cin>>a0;cout<<"输º?入¨?摄¦?动¡¥改?正y数ºy dn\n";cin>>dotn;cout<<"输º?入¨?观?测a时º¡À间? t'\n";cin>>t1;cout<<"输º?入¨?反¤¡ä常¡ê m0\n";cin>>m0;cout<<"输º?入¨?偏?心?率¨º e\n";cin>>e;cout<<"输º?入¨?长¡è半ã?径?平?方¤?根¨´ roota\n";cin>>roota;cout<<"输º?入¨?星?历¤¨²基¨´准Á?时º¡À间?系¦Ì数ºy toe\n";cin>>toe;cout<<"输º?入¨?星?历¤¨²基¨´准Á?时º¡À间?幂Y数ºy\n";cin>>j;toe=toe*pow(10,j);cout<<"输º?入¨?对?倾?角?余®¨¤弦¨©校¡ê正y值¦Ì cic\n";cin>>cic;cout<<"输º?入¨?对?轨¨¬道̨¤半ã?径?余®¨¤弦¨©校¡ê正y值¦Ì crc\n";cin>>crc;cout<<"输º?入¨?对?倾?角?正y弦¨©校¡ê正y值¦Ì cis\n";cin>>cis;cout<<"输º?入¨?对?轨¨¬道̨¤半ã?径?正y弦¨©校¡ê正y值¦Ì crs\n";cin>>crs;cout<<"输º?入¨?对?纬3度¨¨幅¤¨´角?余®¨¤弦¨©校¡ê正y值¦Ì cuc\n";cin>>cuc;cout<<"输º?入¨?对?纬3度¨¨幅¤¨´角?正y弦¨©校¡ê正y值¦Ì cus\n";cin>>cus;cout<<"输º?入¨?升¦y交?点Ì?经-度¨¨ omega0\n";cin>>omega0;cout<<"输º?入¨?近¨¹地Ì?点Ì?幅¤¨´角? omega\n";cin>>omega;cout<<"输º?入¨?倾?角? i0\n";cin>>i0;cout<<"输º?入¨?升¦y交?点Ì?经-度¨¨变À?化¡¥率¨º omegadot\n";cin>>omegadot;cout<<"输º?入¨?倾?角?率¨º Idot\n";cin>>idot;//计?算?平?均¨´角?速¨´度¨¨n0=sqrt(3.986005)*pow(10,7)/pow(roota,3);n=n0+dotn;cout<<"平?均¨´角?速¨´度¨¨是º?n:êo"<<n<<endl;//计?算?归¨¦化¡¥时º¡À间?dott=a0+a1*(t1-toc)+a2*(t1-toc)*a2*(t1-toc);t=t1-dott;tk=t-toe;if(tk>302400){tk=tk-604800;}else if(tk<-302400){tk=tk+604800;}cout<<"归¨¦化¡¥时º¡À间?是º?tk:êo"<<tk<<endl;//计?算?平?近¨¹点Ì?角?mk=m0+n*tk;cout<<"平?近¨¹点Ì?角?是º?mk:êo"<<mk<<endl;//计?算?偏?近¨¹点Ì?角?ek=kpro(mk,e);cout<<"偏?近¨¹点Ì?角?是º?ek "<<ek<<endl;//计?算?真?近¨¹点Ì?角?vk=atan((sqrt(1-e*e)*sin(ek))/(cos(ek)-e));if(cos(vk)>0 && sin(vk)>0 )vk=atan(sin(vk)/cos(vk));else if(sin(vk)>0 && cos(vk)<0)vk=acos(cos(vk));else if(sin(vk)<0 &&cos(vk)<0)vk=PI-asin(sin(vk));elsevk=2*PI-acos(cos(vk));cout<<"真?近¨¹点Ì?角?是º?vk:êo"<<vk<<endl;//计?算?距¨¤角?ak=vk+omega;cout<<"距¨¤角?是º?ak:êo"<<ak<<endl;//计?算?摄¦?动¡¥改?正y项?u=cuc*cos(2*ak)+cus*sin(2*ak);r=crc*cos(2*ak)+crs*sin(2*ak);i=cic*cos(2*ak)+cis*sin(2*ak);cout<<"摄¦?动¡¥改?正y项?:"<<"u:"<<u<<",r:"<<r<<",i:"<<i<<endl;//计?算?摄¦?动¡¥改?正y的Ì?升¦y交?距¨¤角?,ê?卫¨¤星?矢º?量¢?,ê?轨¨¬道̨¤倾?角?uk=ak+u;rk=roota*roota*(1-e*cos(ek))+r;ik=i0+tk*idot+i;cout<<"摄¦?动¡¥改?正y的Ì?升¦y交?距¨¤角?uk:"<<uk<<",卫¨¤星?矢º?量¢?rk:"<<rk<<",轨¨¬道̨¤倾?角?ik:"<<ik<<endl;//计?算?卫¨¤星?在¨²轨¨¬平?面?坐Á?标À¨º系¦Ì的Ì?坐Á?标À¨ºxk=rk*cos(uk);yk=rk*sin(uk);cout<<"卫¨¤星?在¨²轨¨¬平?面?坐Á?标À¨º系¦Ì的Ì?坐Á?标À¨º:êo"<<"xk:"<<xk<<",yk:"<<yk<<endl;//计?算?观?测a时º¡À刻¨¬升¦y交?点Ì?经-度¨¨we=7.292115147*pow(10,-5);wk=omega0+(omegadot-we)*tk-we*toe;cout<<"观?测a时º¡À刻¨¬升¦y交?点Ì?经-度¨¨:êo"<<wk<<endl;//计?算?卫¨¤星?在¨²低̨ª固¨¬系¦Ì下?坐Á?标À¨ºx=xk*cos(wk)-yk*cos(ik)*sin(wk);y=xk*sin(wk)+yk*cos(ik)*cos(wk);z=yk*sin(ik);cout<<"卫¨¤星?在¨²地Ì?固¨¬系¦Ì下?坐Á?标À¨º是º?:êo"<<"x:"<<x<<",y:"<<y<<",z:"<<z<<endl;return 0;}///////固定值版#include<iostream>#include"math.h"using namespace std;//迭̨¹代䨲法¤¡§计?算?偏?近¨¹点Ì?角?double kpro(double mk,double e){double f,t,m,ek;f=mk;do{m=f;t=mk+e*sin(m);f=t;}while((f-m)>10e-12);ek=f;return ek;}#define PI 3.141592655358979323846int main(void){//设¦¨¨置?参?数ºydoubletoc,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;//参?数ºy赋3值¦Ìtoc=1.801672*pow(10,-38);a2=0;a1=1.7053025658199999e-012;a0=0.00028600683435800001;dotn=4.1115998360700002e-009;t1=11404800.0;m0=1.2263973009600000;e=0.0053100715158500003;roota=5153.7127704599998;toe=0.0;cic=-9.6857547759999998e-008;crc=175.34375000000000;cis=-7.8231096267699997e-008;crs=-105.43750000000000;cuc=-5.5264681577700003e-006;cus=1.1192634701700000e-005;omega0=-2.9080127721900002;omega=-1.6819446292500000;i0=0.97432927738800001;omegadot=-7.7124641122299999e-009;ido t=1.8643633724999999e-010;//计?算?平?均¨´角?速¨´度¨¨n0=sqrt(3.986005)*pow(10,7)/pow(roota,3);n=n0+dotn;cout<<"平?均¨´角?速¨´度¨¨是º?n:êo"<<n<<endl;//计?算?归¨¦化¡¥时º¡À间?dott=a0+a1*(t1-toc)+a2*(t1-toc)*a2*(t1-toc);t=t1-dott;tk=t-toe;if(tk>302400){tk=tk-604800;}else if(tk<-302400){tk=tk+604800;}cout<<"归¨¦化¡¥时º¡À间?是º?tk:êo"<<tk<<endl;//计?算?平?近¨¹点Ì?角?mk=m0+n*tk;cout<<"平?近¨¹点Ì?角?是º?mk:êo"<<mk<<endl;//计?算?偏?近¨¹点Ì?角?ek=kpro(mk,e);cout<<"偏?近¨¹点Ì?角?是º?ek "<<ek<<endl;//计?算?真?近¨¹点Ì?角?vk=atan((sqrt(1-e*e)*sin(ek))/(cos(ek)-e));if(cos(vk)>0 && sin(vk)>0 )vk=atan(sin(vk)/cos(vk));else if(sin(vk)>0 && cos(vk)<0)vk=acos(cos(vk));else if(sin(vk)<0 &&cos(vk)<0)vk=PI-asin(sin(vk));elsevk=2*PI-acos(cos(vk));cout<<"真?近¨¹点Ì?角?是º?vk:êo"<<vk<<endl;//计?算?距¨¤角?ak=vk+omega;cout<<"距¨¤角?是º?ak:êo"<<ak<<endl;//计?算?摄¦?动¡¥改?正y项?u=cuc*cos(2*ak)+cus*sin(2*ak);r=crc*cos(2*ak)+crs*sin(2*ak);i=cic*cos(2*ak)+cis*sin(2*ak);cout<<"摄¦?动¡¥改?正y项?:"<<"u:"<<u<<",r:"<<r<<",i:"<<i<<endl;//计?算?摄¦?动¡¥改?正y的Ì?升¦y交?距¨¤角?,ê?卫¨¤星?矢º?量¢?,ê?轨¨¬道̨¤倾?角?uk=ak+u;rk=roota*roota*(1-e*cos(ek))+r;ik=i0+tk*idot+i;cout<<"摄¦?动¡¥改?正y的Ì?升¦y交?距¨¤角?uk:"<<uk<<",卫¨¤星?矢º?量¢?rk:"<<rk<<",轨¨¬道̨¤倾?角?ik:"<<ik<<endl;//计?算?卫¨¤星?在¨²轨¨¬平?面?坐Á?标À¨º系¦Ì的Ì?坐Á?标À¨ºxk=rk*cos(uk);yk=rk*sin(uk);cout<<"卫¨¤星?在¨²轨¨¬平?面?坐Á?标À¨º系¦Ì的Ì?坐Á?标À¨º:êo"<<"xk:"<<xk<<",yk:"<<yk<<endl;//计?算?观?测a时º¡À刻¨¬升¦y交?点Ì?经-度¨¨we=7.292115147*pow(10,-5);wk=omega0+(omegadot-we)*tk-we*toe;cout<<"观?测a时º¡À刻¨¬升¦y交?点Ì?经-度¨¨:êo"<<wk<<endl;//计?算?卫¨¤星?在¨²低̨ª固¨¬系¦Ì下?坐Á?标À¨ºx=xk*cos(wk)-yk*cos(ik)*sin(wk);y=xk*sin(wk)+yk*cos(ik)*cos(wk);z=yk*sin(ik);cout<<"卫¨¤星?在¨²地Ì?固¨¬系¦Ì下?坐Á?标À¨º是º?:êo"<<"x:"<<x<<",y:"<<y<<",z:"<<z<<endl;return 0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算卫星位置
一、C语言程序
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#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("Crc=%e \n",crc);
printf("Crs=%e \n",crs);
printf("Cic=%e \n",cic);
printf("Cis=%e \n",cis);
printf("\n\n输出的结果为:\n",e);
A=roota*roota;
n0=sqrt(bGM84/(A*A*A));//平均角速度n0
printf("n0=%.10lf \n",n0);
tk=t-toe;//相对于参考时刻toe的归化时间tk
printf("tk=%.10lf \n",tk);
n=n0+delta_n;//加摄动改正后的卫星平均角速度
printf(" n=%.10lf \n",n);
mk=m0+n*tk;//卫星平近点角
printf("mk=%.10lf \n",mk);
ek=mk;
for(i=0;i<10;i++) ek=mk+e*sin(ek);//利用迭代法求偏近点角ek
printf("ek=%.10lf \n",ek);
tak=atan2(sqrt(1.0-e*e)*sin(ek),cos(ek)-e);//真近点角Vk的计算
printf("Vk=%.10lf \n",tak);
phik=tak+smallomega;//升交距角φk的计算
printf("φk=%.10lf \n",phik);
corr_u=cus*sin(2.0*phik)+cuc*cos(2.0*phik);//升交距角u的摄动改正δu printf("δu=%.10lf \n",corr_u);
corr_r=crs*sin(2.0*phik)+crc*cos(2.0*phik);//卫星矢量r的摄动改正δr printf("δr=%.10lf \n",corr_r);
corr_i=cis*sin(2.0*phik)+cic*cos(2.0*phik);//轨道倾角i的摄动改正δi printf("δi=%.10lf \n",corr_i);
uk=phik+corr_u;//升交距角u
printf("uk=%.10lf \n",uk);
rk=A*(1.0-e*cos(ek))+corr_r;//卫星矢量r
printf("rk=%.10lf \n",rk);
ik=i0+idot*tk+corr_i;//轨道倾角i
printf("ik=%.10lf \n",ik);
xpk=rk*cos(uk);//卫星在轨道平面坐标系的坐标
ypk=rk*sin(uk);
printf("ypk=%.10lf \n",ypk);
omegak=bigomega0+(bigomegadot-earthrate)*tk-earthrate*toe;//升交点经度Ωk的计算printf("Ωk=%.10lf \n\n",omegak);
xk=xpk*cos(omegak)-ypk*sin(omegak)*cos(ik);//地心固定坐标系的直角坐标
yk=xpk*sin(omegak)+ypk*cos(omegak)*cos(ik);
zk=ypk*sin(ik);
printf("Xk=%.4lf \n",xk);
printf("Yk=%.4lf \n",yk);
printf("Zk=%.4lf \n",zk);
}
二、计算结果
计算结果如截图所示:。

相关文档
最新文档