使用广播星历进行 GPS 卫星位置的计算

news2024/10/6 6:52:44

目录

1.计算卫星运动的平均角速度 n

2.计算观测瞬间卫星的近地点角

3.计算偏近点角

4.计算真近点角 f

5.计算升交角距 

6.计算摄动改正项

7.进行摄动改正 

8.计算卫星在轨道面坐标系中的位置

9.计算观测瞬间升交点的经度 L

10.计算卫星在瞬时地球坐标系中的位置

11.计算卫星在协议地球坐标系中的位置


使用广播星历进行GPS卫星位置的计算的详细步骤如下:

关于在广播星历中各参数的分布情况可以参考下图:

1.计算卫星运动的平均角速度 n

首先根据广播星历中给出的参数 \sqrt{A} 计算参考时刻(TOE) t_{oe} 的平均角速度 n_{0}

n_{0} = \frac{\sqrt{GM}}{(\sqrt{A})^{3}}

式中,GM为万有引力常数 G 与地球总质量 M 之乘积,其值为 GM = 3.986005 \times 10^{14} m^{3} / s^{2}然后根据广播星历中给定的摄动参数 \Delta n 计算观测时刻卫星的平均角速度 n

n = n_{0} + \Delta n 

注:观测时刻:地面站观测的时间;参考时刻:卫星发出信号的时间

2.计算观测瞬间卫星的近地点角

式中,M_{0} 为参考时刻 t_{oe} 时的平近点角,由广播星历给出。

问:为什么要用参考时刻 t_{oe} 来替代卫星过近地点时刻 t_{0} 来计算呢?

答:因为广播星历每 2h  更新一次,将参考时刻设在中央时刻时,外推间隔小于等于 1h。而卫星的运行周期为 12h 左右,采用卫星过近地点时刻 t_{0} 来计算时,外推间隔最大有可能达 6h 。用 t_{oe} 来取代卫星过近地点时刻 t_{0} 后,外推间隔将大大减小,用较简单的模型也能获得精度较高的结果

3.计算偏近点角

弧度表示的开普勒方程为:

角度表示的开普勒方程为:

        

解上述方程可用迭代法或微分改正法。

4.计算真近点角 f

式中,e 为卫星轨道的偏心率,由广播星历给出。

所以,真近点角 f 可以表示为:

5.计算升交角距 u^{'}

式中,\omega 为近地点角距,由广播星历给出。

6.计算摄动改正项 \delta _{u} 、\delta _{r} 、\delta _{i}

广播星历中给出了下列6个摄动参数

据此可以求出引起的升交角距 u 的摄动改正项 \delta _{u}卫星矢径 r 的摄动改正项 \delta _{r}卫星轨道倾角 i 的摄动改正项 \delta _{i}

卫星矢径 r :接收机与卫星之间的绝对距离(直线距离),以米为单位。

计算公式如下: 

7.对 u^{'} 、r^{'} 、i_{0}^{'} 进行摄动改正 

式中,a 为卫星轨道的长半径,a = (\sqrt{A})^{2}\sqrt{A} 由广播星历给出;

          i_{0} 为 t_{oe} 时刻的轨道倾角,由广播星历中的开普勒六参数给出;

          \frac{di}{dt} 为轨道倾角 i 的变化率,由广播星历中的摄动九参数给出。

8.计算卫星在轨道面坐标系中的位置

轨道平面直角坐标系中(坐标原点位于地心, 轴指向升交点),

卫星的平面直角坐标为:

卫星矢径 r 、升交角距 u

9.计算观测瞬间升交点的经度 L

参考时刻 t_{oe} 时升交点的赤经为 \Omega _{t_{oe}} , 升交点对时间的变化率为 \dot{\Omega } ,

那么观测瞬间 t 升交点赤经 \Omega 应为:

\dot{\Omega }  可从广播星历的摄动参数中给出。

本周开始时刻(星期日 0 时)格林尼治恒星时为 GAST_{week} ,则观测瞬间的格林尼治恒星时为:

其中,\omega _{e} 为地球自转角速度,其值为 \omega _{e} = 7.292115 \times 10^{-5} rad/s

t 为本周内的时间(s),从本周开始时刻起算至本周观测时刻瞬间的秒数

显然,上述算法中把地球自转看成是完全匀速的,未顾及地球自转的不均匀性。

这样就可以求得观测瞬间升交点的经度值 L 

令:

则有:

注意:广播星历中给出的并不是参考时刻 t_{oe} 的升交点赤经 \Omega _{t_{oe}} ,而是该值与本周起始时刻的格林尼治恒星时 GAST_{week} 之差(即上述的 \Omega _{0} )。

10.计算卫星在瞬时地球坐标系中的位置

已知升交点的大地经度 L 以及轨道平面的倾角 i 后,

就可通过两次旋转方便地求得卫星在地固坐标系中的位置:

11.计算卫星在协议地球坐标系中的位置

观测瞬间卫星在协议地球坐标系中的位置为:

在GPS定位中,常常需要多次计算卫星的位置和速度如用上述方法计算需占用较多的内存和计算时间。为此,常将卫星星历用一个时间多项式来表示,在内存中仅保存该多项式的系数,供计算时调用。

在各种多项式中,切比雪夫多项式的拟合效果最佳,即使在该时间段的两端近似性也很好。用 n 阶切比雪夫多项式来逼近时间段 \left [t_{0} , t_{0} + \Delta t \right ] 中的卫星星历时,先将变量 t \epsilon \left [t_{0} , t_{0} + \Delta t \right ] 变换为变量 \tau \epsilon \left [-1,1\right ] :

于是卫星坐标就可以表示为:

式中,n 为多项式的阶数,C_{x_{i}} 为切比雪夫多项式的系数。
根据已知的卫星坐标,用最小二乘法拟合出多项式系数 C_{x_{i}} ,就可用上式计算出该时段中任一时刻的卫星位置。

切比雪夫多项式 T_{i} 的递推公式如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最大子数组和java实现【动态规划基础练习】

12.15 最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4]…

笔记本电脑如何安装爱快软路由

环境: dell3490 笔记本 装机U盘 问题描述: 笔记本电脑如何安装爱快软路由 解决方案: 1.电脑bios关闭 安全启动 2.下载官网镜像 3.UEFI引导 在PE下面 新建esp分区300M 把系统镜像里面全部文件,提取到这个分区 最后&…

数据结构(7.5)-- 树扩展之字典树

一、字典树 1、字典树介绍 字典树,也称为“前缀树”,是一种特殊的树状数据结构,对于解决字符串相关问题非常有效。典型 用于统计、排序、和保存大量字符串。所以经常被搜索引擎系统用于文本词频统计。它的优点是: 利用字符串的…

【Qt问题记录】使用QDebug类输出不带转义或双引号

问题 使用Qt进行编程时,需要借助输出信息验证编码的正确性。 默认情况下,如果输出的是字符串,qDebug() 会在字符串的两侧加上引号,有时还会转义。 如下所示: QString strInfo QStringLiteral("helloworld"…

[原创][R语言]股票分析实战:周级别涨幅趋势的相关性

[简介]常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、De…

网络安全Web学习记录———CTF---Web---SQL注入(GET和POST传参)例题

小白初见,若有问题,希望各位大哥多多指正~ 我的第一道web类CTF题——一起来撸猫o(•ェ•)m-CSDN博客 最开始学习CTF里的web方向时,每次做了题遇到类似的老是忘记之前的解法,所以写点东西记录一下。听大哥的话,就从最…

架构设计系列之常见架构(二)

五、DDD(领域驱动设计) 领域驱动设计(Domain-Driven Design,DDD)是一种开发思想,强调将软件系统的注意力集中在业务领域上,将领域视为应用的核心。在架构设计中,DDD 提供了一种不同…

cgal教程 3D Alpha Wrapping

文章目录 3D Alpha Wrapping (3D alpha 包裹)1 介绍2 方法2.1 算法2.2 保证 3 接口4 选择参数4.1 alpha4.2 Offset4.3 关于“双面”包裹的注意事项 5 性能6 例子 3D Alpha Wrapping (3D alpha 包裹) 原文地址: https://doc.cgal.org/latest/Alpha_wrap_3/index.html#Chapter_3D…

Linux unzip解压多个文件

前情介绍 最近下载了imagenet1k数据集,令人难受的是这里边有很多的zip包,我总不能一个一个解压吧,这就太费时了,有点程序员思维很重要:批量解压。 解决办法 假设当前目录下有多个zip文件 需要 unzip *.zip …

【FunASR】Paraformer语音识别-中文-通用-16k-离线-large-onnx

模型亮点 模型文件: damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorchParaformer-large长音频模型集成VAD、ASR、标点与时间戳功能,可直接对时长为数小时音频进行识别,并输出带标点文字与时间戳: ASR模型…

apt-mark工具介绍(标记或取消标记软件包,防止特定软件包被自动更新或删除)

文章目录 apt-mark工具深度解析1. apt-mark概述1.1 apt-mark定义1.2 apt-mark作用 2. apt-mark常用命令2.1 标记软件包为手动安装2.2 标记软件包为自动安装2.3 阻止软件包更新2.4 允许软件包更新 3. 疑难技术点解析3.1 如何查看软件包的标记状态3.2 如何解决软件包依赖性问题 4…

IDEA新建jdk8 spring boot项目

今天新建spring boot项目发现JDK版本最低可选17。 但是目前用的最多的还是JDK8啊。 解决办法 Server URL中设置: https://start.aliyun.com/设置完成后,又可以愉快的用jdk8创建项目了。 参考 https://blog.csdn.net/imbzz/article/details/13469117…

【C++】POCO学习总结(十七):日志系统(级别、通道、格式化、记录流)

【C】郭老二博文之:C目录 1、Poco::Message 日志消息 1.1 说明 所有日志消息都在Poco::Message对象中存储和传输。 头文件:#include “Poco/Message.h” 一条消息包含如下内容:优先级、来源、一个文本、一个时间戳、进程和线程标识符、可选…

每天五分钟计算机视觉:Inception网络是由多个Inception模块构成

本文重点 inception从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。可以简单的理解为Inception 网络是由一个一个的Inception模块构建成的,我们来看一下。 Inception模块 如上就是Inception模块的 通过一个1…

【Android逆向】记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed,发现XPosed真的好强,只要技术强,什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

【MYSQL】事务隔离级别、脏读、不可重复读、幻读

文章目录 介绍演示脏读不可重复读可重复读幻读 不可重复读和幻读的区别 参考 作者 Guide: 事务隔离级别 美团技术团队: Innodb中的事务隔离级别和锁的关系 介绍 SQL 标准定义了四个隔离级别: READ-UNCOMMITTED(读取未提交) :最低的隔离级别…

虚拟机启动 I/O error in “xfs_read_agi+0x95“

1.在选择系统界面按e 进入维护模式 2.找到ro把ro改成 rw init/sysroot/bin/sh 然后按Ctrlx 3.找到坏掉的分区,以nvme0n1p3为例进行修复 xfs_repair -d /dev/nvme0n1p3 4.init 6 重新启动 以下情况 先umount 再修复 则修复成功

SaaS行业分析

文章目录 什么是SaaS ?SaaS的标准定义什么是软件即服务?SaaS与传统软件的区别 ? SaaS行业分析你知道最赚钱的行业是什么?互联网带给企业的变化 SaaS与PaaS、IaaS的区别?IaaS(Infrastructure as a Service)…

消除非受检警告

在Java中,有一些情况下编译器会生成非受检警告(Unchecked Warnings)。这些警告通常与泛型、类型转换或原始类型相关。消除这些警告可以提高代码的可读性和安全性。以下是一些常见的非受检警告以及如何消除它们的例子: 1. 泛型类型…

js传递json数据过大的解决方案

protobufjs 使用protobuf,定义如下结构 Person.protobuf syntax "proto3";message Person {string name 1;int32 age 2; }Person.thrift namespace java com.example.Personstruct Person {1: required string name,2: required i32 age }使用bench…