伪距单点定位基础讲解

写在前面

本篇博文用于充实个人分类专栏“GNSS课程”,同时希望能够对有需要的朋友有所帮助。
教材采用《GPS测量原理及应用 第3版》徐绍铨等。
另有疏漏之处,还请评论指出。

文件解读

观测(o)文件识读

头文件
数据

气象(m)文件识读

m文件

广播星历(n)文件识读

星历文件识读在上一篇里有介绍,这里不再赘述。

计算基本原理

选择一个历元中的某个卫星

1、在O文件中提取四颗以上卫星的C1观测值。2、在N文件中提取对应卫星的数据。3、程序初始化,置测站概略位置为X,,接收机钟差初值为dt。,第一 次迭代取:Xo=|4、选择epoch中一颗卫星S,设其伪距为p°。5、计算卫星钟差dt$。

计算站星近似几何距离

6、计算卫星-接收机的近似几何距离RS。(1)根据接收时间和伪距计算信号发射时间。Tems=trec(TR)-(C1+ dtsal)(2)计算发射时刻的卫星坐标,并对卫星坐标进行地球自转改正(3)计算近似几何距离其中,(.x0ny0.xra’ 为卫星在信号接收时刻的坐标,(xo, wevo, nec=o, re)为接收)为接收

误差改正

7、计算对流层延迟dropRS表示卫星S,到测站的几何距离;8、计算电离层延迟diomoc*atS表示以米为单位的卫星S;的钟差; 9、求卫星S;在观测方程中的余数项:drop表示对流层延迟改正量,单位米,用.diom表示电离层延迟改正量,单位米,采用无电离层伪距组合观测值时此项为0;Drcar表示对伪距的差分改正值,此处为0。

迭代求解测站位置

10、求卫星S;方向余弦11、选择Epoch中的下一颗卫星, 设其伪距为ρ°。12、重复5--11步,计算每颗卫星的系数和余数项。13、将所有卫星的系数组成误差方程,以(x;y,z,cdt,) 为未知数进行求解,形式为: AX=L

最小二乘求解及迭代终止条件

14、求解: x=(4"PA)"(A"PL),得出定位结果。需要说明的是,计算过程中没有考虑P权阵。15、与Xg进行比较,判断位置差值。(1)如果各分量差值>0.001m, 则另Xo=X;, 返回第5步继续迭代计算;(2)否则退出迭代。16、输出满足条件的Xi。

源代码及计算结果

自编的代码分为3个部分,在之前卫星星历计算卫星位置的基础上,增加了O文件、M文件的读取函数readfileo.m和readfilem.m,以及计算测站位置的主脚本Prange_Positioning.m。使用者在主脚本中的“配置参数”区域,正确配置相关的参数后,运行此脚本即可得到结果。这些参数包括观测时刻的UTC时,测站的大地高,导航电文中电离层的Alpha和Beta参数,去头的n、o、m文件。需要注意的是,程序对于时间的查找除了n文件外,都是严格查找,也就是说,受限于m文件的观测时间间隔,观测时刻的分位只能是5的整数倍,秒位只能是0。经过相应的调试后,可以接受小范围的变动。

o文件读取函数

1
2
3

m文件读取函数

4

计算用的脚本

1
2
3
4
4

总结

这里不再详细介绍卫星位置计算的方法了,这部分详见这里
本篇博文采用的编程语言是MATLAB,所使用的数据文件已放在链接资源里了,需要请自取。
另外,采用MATLAB的Appdesigner,编写了一个UI,同时改变了数据的存储结构,引入结构体来操作数据,减少与文件的交互,以减少计算时间,可以用来处理RINEX格式的文件。软件也会按需更新。资源请见这里
最后,希望这篇博文对你有帮助。

  • 45
    点赞
  • 325
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
单点登录(Single Sign-On,简称 SSO)是一种身份验证机制,允许用户使用一组凭据登录到多个相关但独立的应用程序,而不需要为每个应用程序输入凭据。下面是一个简单的示例,演示如何在Java中实现基于Cookie的单点登录。 首先,需要在用户登录成功时生成一个令牌,并将其存储在Cookie中。令牌可以是一个随机生成的字符串,用于标识用户的身份。 ```java import java.util.UUID; public class SsoUtil { public static String generateToken() { return UUID.randomUUID().toString(); } } ``` 在用户登录成功后,可以将生成的令牌保存到Cookie中,并设置Cookie的有效期: ```java import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; public class LoginController { public void login(String username, String password, HttpServletResponse response) { // 验证用户名和密码 if (authenticate(username, password)) { // 生成令牌 String token = SsoUtil.generateToken(); // 将令牌保存到Cookie中 Cookie cookie = new Cookie("token", token); cookie.setMaxAge(3600); // 设置有效期为1小时 response.addCookie(cookie); // 登录成功,跳转到主页或其他应用程序 // ... } else { // 登录失败 // ... } } } ``` 接下来,在其他应用程序中验证用户是否已经登录。可以通过检查请求中的Cookie来获取令牌,并与存储的令牌进行比较。如果令牌有效,则表示用户已经登录。 ```java import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; public class SsoFilter { public boolean isUserLoggedIn(HttpServletRequest request) { // 获取请求中的Cookie Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("token")) { String token = cookie.getValue(); // 根据令牌进行验证,判断用户是否已经登录 if (validateToken(token)) { return true; } } } } return false; } } ``` 以上是一个简单的基于Cookie的单点登录实现示例。实际应用中,可能需要更复杂的逻辑和安全性措施来保护用户身份信息。此外,还可以使用其他技术,如基于令牌的单点登录(如OAuth、OpenID Connect等)来实现更强大和灵活的单点登录解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kFkPkDkN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值