C语言计算GPS卫星位置Word文档格式.docx
- 文档编号:15357784
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:9
- 大小:84.20KB
C语言计算GPS卫星位置Word文档格式.docx
《C语言计算GPS卫星位置Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言计算GPS卫星位置Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
上述方程可用迭代法进行解算,即先令Ek=Mk,代入上式,求出Ek再代入上式计算,因为GPS卫星轨道的偏心率e很小,因此收敛快,只需迭代计算两次便可求得偏近点角Ek。
5、真近点角Vk的计算
由于:
因此:
6.升交距角Φk的计算
ω为卫星电文给出的近地点角距。
7、摄动改正项δu,δr,δi的计算
δu,δr,δi分别为升交距角u的摄动量,卫星矢径r的摄动量与轨道倾角i的摄动量。
8、计算经过摄动改正的升交距角uk、卫星矢径rk与轨道倾角ik
9、计算卫星在轨道平面坐标系的坐标
卫星在轨道平面直角坐标系(X轴指向升交点)中的坐标为
10、观测时刻升交点经度Ωk的计算
升交点经度Ωk等于观测时刻升交点赤经Ω(春分点与升交点之间的角距)与格林泥治视恒星时GAST(春分点与格林尼治起始子午线之间的角距)之差,
Ωk=Ω-GAST(4-23)
又因为:
(4-24)
其中Ωoe为参与时刻toe的升交点的赤经;
就是升交点赤经的变化率,卫星电文每小时更新一次Ω与toe。
此外,卫星电文中提供了一周的开始时刻tw的格林尼治视恒星时GASTw。
由于地球自转作用,GAST不断增加,所以:
GAST=GASTw+ωet(4-25)
式中ωe=7、29211567×
10-5rad/s为地球自转的速率;
t为观测时刻。
由式(4-24)与(4-25),得:
由(4-13)式,得:
其中,、、的值可从卫星电文中获取。
11、计算卫星在地心固定坐标系中的直角坐标
把卫星在轨道平面直角坐标系中的坐标进行旋转变换,可得出卫星在地心固定坐标系中的三维坐标:
12、卫星在协议地球坐标系中的坐标计算
考虑极移的影响,卫星在协议地球坐标系中的坐标为
利用C语言程序实现
#include<
stdio、h>
string、h>
stdlib、h>
math、h>
#defineu3、986004418e+14
#defineWE7、292115e-6
structcanshu
{
intprn,nian,yue,ri,shi,fen;
//卫星PRN号,年,月,日,时,分
doublemiao;
//秒
longdoubleadoe,a0,a1,a2,mo,dn,e,ga,pio,io,w,pid,ii,cuc,cus,cue,crs,crc,cis,cic,toe,aodc,wn;
/*参数说明:
ADOE值,a0卫星钟偏差,a1卫星钟漂移,a2卫星钟频率漂移,M0平近点角,Δn平运动差,e偏心率,a1/2半长轴的平方根,Ω0轨道平面升交点经度,
i0倾角,ω近地点角距,*Ω升交点速率,IDot倾角速率,CucCus升交角距的摄动改正项,CrcCrs地心距的摄动改正项,CicCis倾角的摄动改正项,
toe参考历元*/
};
voidwxzbjx(structcanshu*pt)
longdoublea,n0,n,t,tk,toc,mk,ek,vk,fik,uk,rk,ik;
longdoublexk,yk,zk,lk;
longdoubleXK,YK,ZK;
inttemp;
pt->
nian=pt->
nian+2000;
t=(longdouble)(((pt->
nian)-1980)*365*24*3600+(pt->
yue-1)*30*24*3600+pt->
ri
*24*3600+pt->
shi*3600+pt->
miao);
a=pt->
ga*pt->
ga;
n0=sqrt(WE/(a*a*a));
//平均角速度n0
n=n0+pt->
dn;
tk=t-pt->
toe;
toc=pt->
a0+pt->
a1*(t-pt->
toe)+pt->
a2*(t-pt->
toe)*(t-pt->
toe);
tk=tk-pt->
mk=pt->
mo+n*tk;
ek=mk;
for(temp=0;
temp<
10;
temp++)
{
ek=mk+pt->
e*sin(ek);
//利用迭代法求偏近点角ek
}
vk=2*atan(sqrt((1+pt->
e)/(1-pt->
e))*(tan(ek))/2);
fik=vk+pt->
w;
uk=fik+pt->
cuc*cos(2*fik)+pt->
cus*sin(2*fik);
rk=pt->
ga*(1-pt->
e*ek)+pt->
crc*cos(2*fik)+pt->
crs*sin(2*fik);
ik=pt->
io+pt->
cic*cos(2*fik)+pt->
cis*sin(2*fik)+pt->
ii*tk;
xk=rk*cos(uk);
yk=rk*sin(uk);
zk=0;
lk=pt->
pio+(pt->
pid-WE)*tk-WE*pt->
XK=xk*cos(lk)-yk*cos(ik)*sin(lk);
YK=xk*sin(lk)+yk*cos(ik)*cos(lk);
ZK=yk*sin(ik);
printf("
\n%d年%d月%d号%d时%、2f秒%d号卫星的坐标:
"
pt->
nian,pt->
yue,pt->
ri,pt->
shi,pt->
miao,pt->
prn);
\nXk=%、9f\nYk=%、9f\nZK=%、9f\n\n"
XK,YK,ZK);
}
intmain(void)
FILE*fp,*fp1,*fp2;
structcanshua;
inti=0,hanhao=1;
longdoubletemp1,temp2,temp3,temp5,temp4,temp6,temp7;
charch,ch1;
if((fp1=fopen("
E:
\\星历文件\\guangboxingli2、txt"
"
r"
))==NULL)//请自定义星历文件位置及名称
printf("
文件无法打开!
);
exit(0);
else
if((fp2=fopen("
\\星历文件\\guangboxingli2fu、txt"
w"
))==NULL)
{
printf("
exit(0);
}
else
while((ch1=fgetc(fp1))!
=EOF)
{
if(ch1=='
\n'
)
{
i++;
}
putchar(ch1);
if(i==15)
break;
}
}
while(!
feof(fp1))
ch1=fgetc(fp1);
D'
ch1='
e'
;
fputc(ch1,fp2);
fclose(fp1);
fclose(fp2);
以上就是星历文件的头文件!
\n"
system("
pause"
读取文件参数数据\n!
if((fp=fopen("
))==NULL)//创建计算结果文档
while(!
feof(fp))
switch(hanhao)
case1:
{
fscanf(fp,"
\n%d%d%d%d%d%d%lf%le%le%le"
&
a、prn,&
a、nian,&
a、yue,&
a、ri,&
a、shi,
&
a、fen,&
a、miao,&
a、a0,&
a、a1,&
a、a2);
printf("
%d%d%d%d%d%d%lf%le%le%le"
a、prn,a、nian,a、yue,a、ri,a、shi,
a、fen,a、miao,a、a0,a、a1,a、a2);
hanhao++;
case2:
%le%le%le%le"
a、adoe,&
a、crs,&
a、dn,&
a、mo);
\n%le%le%le%le"
a、adoe,a、crs,a、dn,a、mo);
case3:
a、cue,&
a、e,&
a、cus,&
a、ga);
a、cue,a、e,a、cus,a、ga);
case4:
a、toe,&
a、cic,&
a、pio,&
a、cis);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 计算 GPS 卫星 位置