![46a06ca02d966fcd1b6fdcf31c06cdb3.png](https://i-blog.csdnimg.cn/blog_migrate/d9bbe2ea149129f4a3bb2e65ce1b7ce7.jpeg)
写在前面
本篇博文用于充实个人分类专栏“GNSS课程”,同时希望能够对有需要的朋友有所帮助。 教材采用《GPS测量原理及应用 第3版》徐绍铨等。 另有疏漏之处,还请评论指出。
更多请见:
卫星位置计算基础讲解_越来越废的SB的博客-CSDN博客blog.csdn.net![7f3ecc4d0867096c8535d7d9d2131ade.png](https://i-blog.csdnimg.cn/blog_migrate/24c68653ac59492f4957dcc5d39257df.png)
广播星历解读
![84941d50a4e488c2e75e9826f355be84.png](https://i-blog.csdnimg.cn/blog_migrate/3e742909e03f677078a2d9ee7b3539b8.jpeg)
头文件:导航文件的前八行一般为头文件部分,包括文件的一些基本信息,有电离层参数,数据类型,跳秒引起的时间增量,用来计算UTC时间的历书参数等。 卫星的相关参数:导航文件的第9行起,每8行为一个数据块,每一块具有相同的格式。每块的第一行在开头多出来的三位用来存放卫星号PRN。紧接着每19位存放一个数据。因此可将每个数据块视为一个8行5列的表格。
![98e46b3564127b8bcb90f96fedebc3ba.png](https://i-blog.csdnimg.cn/blog_migrate/e2eb8c459d55bc2fcc86971691bba77e.jpeg)
第一列只在第一行存放PRN,后面全空。 第一行第二列往后依次是toc(时钟时间,对应年月日时分秒)、a0(卫星钟差)、a1(卫星钟数)、a2(卫星钟数变化率)。 第二行第二列往后依次是IODE(数据龄期)、Crs、Delta_n(由精密星历计算得到的卫星平均角速度与按给定参数计算所得的平均角度速度之差)、M0(参考时刻的平近点角)。 第三行第二列往后依次是Cuc、e(轨道偏心率)、Cus、sqrt(A)(轨道长半轴的平方根)。 第四行第二列往后依次是toe(星历参考时刻)、Cic、OMEGA(参考时刻的升交点赤经)、Cis。 第五行第二列往后依次是i0(参考时刻的轨道倾角)、Crc、omega(近地点角距)、OMEGA_DOT(升交点赤经变化率)。 本次计算只取到第六行第二列IDOT(轨道倾角变化率)。 至此,本次计算所需的参数就全部读入。
计算基本原理
(1)计算卫星运动的平均角速度
![51f9d856a9d1e67e16e2e32f35ad4261.png](https://i-blog.csdnimg.cn/blog_migrate/c0ca86990e47dc8c43d73ac8d664d653.jpeg)
(2)计算信号发射时卫星的平近点角
![800d7609e6fa5584bda87c295bab6fa1.png](https://i-blog.csdnimg.cn/blog_migrate/7e08aa01b96ce91b644206b97f17353b.jpeg)
(3)计算偏近点角 (4)计算真近点角
![48f05684c3a181a5898f06e84ac8e881.png](https://i-blog.csdnimg.cn/blog_migrate/79376b3c938a72966c5321a043886d83.jpeg)
(5)计算升交距角 (6)计算摄动改正项
![93b5c22d66831d46912168556003ae54.png](https://i-blog.csdnimg.cn/blog_migrate/a3964ecf0d4f3499b9355d6057cf8855.png)
![eb554526a972e56ab048b00eef192838.png](https://i-blog.csdnimg.cn/blog_migrate/b5c287f97075138a5492e86923b81834.png)
![a64c730325b26ee8a5e11e1a9899f88b.png](https://i-blog.csdnimg.cn/blog_migrate/ea332a54c5a8a86cc6b4eaad2cd2157a.png)
(7)计算摄动改正后的升交距角、卫星矢径和轨道倾角 (8)计算卫星在轨道面坐标系中的坐标
![ea09440c3e014f520b30f79c06b4a4b1.png](https://i-blog.csdnimg.cn/blog_migrate/3a143afb24fa224dfb4eca62bbb9035e.jpeg)
(9)计算发射时刻升交点的经度 (10)计算卫星在地固坐标系下的坐标
![74cfd9d6112765cfb39073c9f33ed847.png](https://i-blog.csdnimg.cn/blog_migrate/ed63e9b10a90b917a1c1d76d82b7f0bc.jpeg)
![251379e6c88d104f4de2178d262f6b30.png](https://i-blog.csdnimg.cn/blog_migrate/b509621a172640853b460d0766d72b51.png)
源代码及计算结果
代码以文件夹打包的形式展示。代码主体有三个部分。主要的部分为卫星位置计算的函数代码comsatpos.m。该函数实现了,通过传入16参数,观测时间对应的GPS周内秒,toc对应的GPS周内秒,a0,a1,a2即可解算出卫星在地固坐标系中的位置坐标。实际操作时对函数readatandcomp.m进行相应的参数输入即可。readatandcomp.m分两层实现了comsatpos.m函数参数的自动录入。readatandcomp.m先筛选出与用户想要的卫星号相匹配的数据块,再从中选择与用户观测时间相差不到一小时的数据块,用于函数comsatpos.m的计算。此过程会产生n_selected.txt文件,用户可自行查看。再调用函数comsatpos.m,实现卫星位置的计算。还需要注意的是,readatandcomp.m函数要求用户事先去除卫星导航文件中的头部分,使卫星号PRN顶行,数据呈现规律性,并在readatandcomp.m函数中正确读入处理过的文件。
![46e032eaa7a01d29a39b9dd47f2cadec.png](https://i-blog.csdnimg.cn/blog_migrate/5d43915273de3157cc8325149ea31fb2.jpeg)
![99f254141a05cbf0c6f1833abd983545.png](https://i-blog.csdnimg.cn/blog_migrate/d804b3158fced62883cc823dc1a4920a.jpeg)
![f4115732e766072c01a39b5b08feda57.png](https://i-blog.csdnimg.cn/blog_migrate/d0bb9f35f0126da2e0a28ed7cd07267f.jpeg)
![c50ec98bd3e3441a8617229f9e7ebfee.png](https://i-blog.csdnimg.cn/blog_migrate/0602552402173027b6be4c2afe6ee6dd.jpeg)
![af9f4b7d9c936411d557f753a5eef22b.png](https://i-blog.csdnimg.cn/blog_migrate/fe5779cb2a5dc2e536628d2b7ac24fa0.jpeg)
![170febc24083c4188178bda4dbbbe8ff.png](https://i-blog.csdnimg.cn/blog_migrate/9528107922ab8f0b55686dac209b5c52.jpeg)
![1dafeb60455a26e2d3b2989ef3223719.png](https://i-blog.csdnimg.cn/blog_migrate/5f70f8df347c6db4e9c6167c264e7dc9.jpeg)
![57f463149675225927b2e523dfebf999.png](https://i-blog.csdnimg.cn/blog_migrate/04297ff96ae6ba04d3b8eb0e781607c7.jpeg)
![c304647204699760f90f844d88ec2b28.png](https://i-blog.csdnimg.cn/blog_migrate/51b4a927a9cc123aa88db910f1adb20c.jpeg)
![c9165da72976e8f5a0c5d4281132eeea.png](https://i-blog.csdnimg.cn/blog_migrate/75a33c5985c88a1c73376ec22e0ad893.jpeg)
总结
这里只是最基础的卫星位置计算方法,并提供了一种提取RINEX文件的方法,虽然略显笨拙,但行之有效,如果有更好的文件读取方法,欢迎评论区交流。 文中采用的编程语言是MATLAB,将来有需求的话会尝试用C++来编写。 相关的数据及代码已放在下面链接里。
卫星位置计算(包含示例文件和.mlapp).zip_卫星位置计算工具-专业指导代码类资源-CSDN下载download.csdn.net![7f3ecc4d0867096c8535d7d9d2131ade.png](https://i-blog.csdnimg.cn/blog_migrate/24c68653ac59492f4957dcc5d39257df.png)
另外,采用MATLAB的Appdesigner,编写了一个UI,详见这个资源。
卫星位置计算器(实验材料).zip-专业指导资源-CSDN下载download.csdn.net![7f3ecc4d0867096c8535d7d9d2131ade.png](https://i-blog.csdnimg.cn/blog_migrate/24c68653ac59492f4957dcc5d39257df.png)
软件也会按需更新。
最后,希望这篇博文对你有帮助。