1、GPS卫星位置计算GPS卫星位置计算实验 学 校:合肥工业大学学 号: 20104168专业班级:测绘工程10-1班学 院:土木与水利工程学院指导教师:陶庭叶一、实验目的1、通过对GPS卫星位置的计算,增强我们对GPS测量原理及应用课程的理解,使我们牢固掌握GPS测量的基本原理和过程,熟悉GPS测量数据处理的基本技能和计算方法。2、提高运用计算机语言编程开发能力,运用测量平差知识、数学知识和计算机知识,通过给定的程序算法,编制程序实现GPS卫星位置的计算过程。二、实验内容及要求1、通过课堂对GPS测量原理的学习,在课后自主完成GPS卫星位置的计算过程并按照课本上的步骤设计程序完成GPS卫星位置
2、的计算过程;2、要求每位同学独立完成GPS卫星位置的计算过程,编写程序,调试程序,并编写程序设计文档。要求过程和算法正确、程序运行正确、设计文档完备;三、课程设计工具运用自己熟悉的编程开发语言(C、C#、C+、VC、VS、VB、FORTRAN等)。四、实验总结1、 实验简单介绍运行后的主界面比以前做的程序要漂亮些,给界面增加了一副图片,让界面看起来还是比较的漂亮,但由于起始的参数较多,因此,界面整体看起来比较的拥挤,但这个不影响程序的计算过程。整个程序的功能不是很多,但满足了基本的要求,能够进行卫星的位置计算,并且能够达到很好的精度,与课本上给出的结果相差很小,符合实验的要求。为了避免繁琐的数
3、据的输入,在本次程序中我增加了一个的功能按钮,点击后,程序自动给相关的起始数据赋值并显示在界面上,如图所示:这些数据是教材GPS测量原理与应用41页的卫星星历数据;用户也可以根据需要更改相应的数据,如上图所示,当点击按钮时,就可以在对话框相应的位置计算出卫星的坐标,如下图所示:其中,计算出的卫星的坐标为Xk = 4589210.3510074820,Yk = 25371005.6999580190,Zk = -5618292.2998269377,这是卫星在地固坐标系中的坐标,如果还知道极移参数就可以计算出卫星在协议地球坐标系中的坐标了。 用户也可以选择清除计算的结果,点击即可完成,如下图所示
4、: 用户也可以选择重新输入数据,点击就可以将输入的参数清零,如下图所示。每次的默认数据均相同,用户可以选择输入默认数据后再更改需要更改的地方,来完成计算过程。当用户选择了重新输入后,即所有的起始数据均清零后,此时不能参与计算,若用户点击了按钮,则系统会提示用户输入的数据有误!当运行程序显示主界面时,如果用户同样不小心点击了按钮,则会出现同样的提示信息,以此来提示用户没有输入起始数据,避免产生不必要的错误。当数据清零后点击会提示用户输入的数据有误!2、 实验心得GPS卫星位置的计算实验不是很难,因为实验过程在书上很详细,只要按照步骤进行,计算过程就不会出现问题。我起始是先把程序调试正确,在调试的
5、过程中,采取了简单的直接给参数赋值的方法,因此,很快就把程序调试正确了。在后期的修改工作中,我修改掉了直接赋值的地面观测时刻对应的标准GPS时间t,而是通过计算过程得出的。这样要不了多久就把整个程序调通了,调试过程没有花很多的时间。在查了一些资料后,我给对话框的界面增加了一幅位图,并在图片上打印出字体,调整界面的编辑框的分布后看上去整个程序就变得挺不错的,尽管界面看起来有点儿拥挤,但并不影响程序的计算过程的正确性。整体来说效果不错,但显然需要改进的地方很多,就像刚才说的,界面整体看起来比较拥挤,这个更改起来比较容易,如下图所示:这样看起来就比较的舒服,不会导致眼睛疲劳,但中间的计算过程均没有,
6、调试时我们可以选择前者,后期修改时我们就可以去掉中间的计算过程。这是做的比较好的方面。程序可能还曾在很多我没有发觉的问题,还请老师多多指教。3、 实验源代码(部分)void CGPSDlg:OnJisuan() UpdateData(); if(!(m_a0 | m_a1 | m_a2 | m_Cic | m_Cis | m_Crc | m_Crs | m_Cuc | m_Cus | m_dn | m_e & m_roota | m_I | m_i0 | m_M0 |m_Q | m_Q0 | m_toc | m_toe | m_tph | m_tpm | m_w) MessageBox(输入数
7、据有误,请重新输入!); SetFocus(); else /n0,n,tk,Mk,Ek,Vk,cosVk,sinVk,du,dr,di,uk,rk,ik,xk,yk,Xk,Yk,Zk均为课本上参数 /Ek1为趋近计算迭代参数,Fk为k,Qk为k, double n0,n,tk,Mk,Ek,Ek1,cosVk,sinVk,Vk,Fk,du,dr,di,uk,rk,ik; double xk,yk,Qk,Xk,Yk,Zk,t,t1,dn; char x40,y40,z40;/ char ch140,ch240,ch340,ch440,ch540,ch640,ch740,ch840,ch940,c
8、h1040,ch1140,ch1240,ch1340,ch1440,ch1540,ch1640; /计算卫星运行的平均角速度n0和n n0 = sqrt(u)/(m_roota * m_roota *m_roota); n = n0 + m_dn; /计算归化时间 t1 = m_tph * 3600 + m_tpm * 60; dn = m_a0 + m_a1 * (t1 - m_toc) + m_a2 * (t1 - m_toc)*(t1 - m_toc); t = t1 - dn; tk = t - m_toe; /观测时刻卫星平近点角Mk的计算 Mk = m_M0 + n * tk; /
9、计算偏近点角Ek,趋近计算 Ek1= Mk; do Ek = Ek1; Ek1 = Mk + m_e * sin(Ek); while(fabs(Ek1 - Ek) 1e-12); /真近点角Vk的计算 cosVk = (cos(Ek) - m_e)/(1 - m_e * cos(Ek); sinVk = (sqrt(1 - m_e*m_e)*sin(Ek)/(1 - m_e * cos(Ek); Vk = atan(sinVk/cosVk); /判断Vk的正负号 if(sinVk 0 & cosVk 0) Vk = fabs(Vk); else if(sinVk 0 & cosVk 0) V
10、k = PI + Vk; else if(sinVk 0) Vk = Vk; else Vk = PI + Vk; /升交距角k的计算,用Fk表示 Fk = Vk + m_w; /摄动改正项计算 du = m_Cuc * cos(2*Fk) + m_Cus * sin(2*Fk); dr = m_Crc * cos(2*Fk) + m_Crs * sin(2*Fk); di = m_Cic * cos(2*Fk) + m_Cis * sin(2*Fk); /经过摄动改正后的升交距角的Uk,卫星矢径的摄动量,轨道倾角 uk = Fk + du; rk = m_roota * m_roota *
11、(1 - m_e * cos(Ek) + dr; ik = m_i0 + di + m_I * tk; /计算卫星在轨道平面坐标系的坐标 xk = rk * cos(uk); yk = rk * sin(uk); /观测时刻升交点经度的计算 Qk = m_Q0 + (m_Q - we) * tk - we * m_toe; /计算卫星在地心固定坐标系中的直角坐标 Xk = xk * cos(Qk) - yk * cos(ik) * sin(Qk); Yk = xk * sin(Qk) + yk * cos(ik) * cos(Qk); Zk = yk * sin(ik); sprintf(x,
12、%.10lf,Xk); sprintf(y,%.10lf,Yk); sprintf(z,%.10lf,Zk); GetDlgItem(IDC_EDIT20)-SetWindowText(x); GetDlgItem(IDC_EDIT21)-SetWindowText(y); GetDlgItem(IDC_EDIT22)-SetWindowText(z); UpdateData(FALSE); void CGPSDlg:OnDefault() /设置默认数据,数据为课本p41页的广播星历数据,其中观测时刻为2时0秒 m_tph = 2.0; m_tpm = 0.0; m_toc = 7200.0
13、; m_a0 = -0.231899321079e-06; m_a1 = 0.0; m_a2 = 0.0; m_toe = 0.720000000000e+04; m_roota = 0.515365263176e+04; m_e = 0.678421219345e-02; m_i0 = 0.958512160302e+00; m_w = -0.258419417299e+01; m_Q0 = -0.137835982556e+01; m_M0 = -0.290282040486e+00; m_dn = 0.451411660250e-08; m_Q = -0.819426989566e-08; m_I = -0.253939149013e-09; m_Cus = 0.912137329578e-05; m_Cuc = 0.189989805222e-06; m_Cis = 0.949949026108e-07; m_Cic = 0.130385160446e-07; m_Crs = 0.406250000000e+01; m_Crc = 0.201875000000e+03; UpdateData(FALSE);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2