文号
945269
阅读
2054
回复
0
收藏
0
本文在AI协助下创作,作者声明AI的作用仅限于局部修饰性、辅助性工作,文章内容的严肃性由作者负责。
以二维空间下的定位问题浅析卫星时空定位理论
2025/07/03
原创
IP:海南
关键词:GNSS,卫星导航

引言


当前,全球卫星导航系统(GNSS)普遍采用基于时空测量的定位方式。本文将从二维空间下的定位问题入手,浅析对卫星时空定位的基本原理。

为便于理解,本文将简化为二维空间下的模型,忽略地球曲率、大气延迟、多路径等误差源,从而以更直观的方式剖析卫星定位的基本原理。

前置知识


导航卫星会定期广播电文,电文中包含:

· 电文发送时刻的空间坐标 (Xs, Ys, Zs);

· 电文发送时刻的标准时间 Ts。


本文以二维定位入手,故不再考虑高度参数Zs,将空间坐标简化为(Xs, Ys)。

原理推导


首先,我们设立一个平面直角坐标系,并假定接收机在该坐标系中的位置为 (X, Y)。


设在某次定位过程中,接收机在 Tr₁、Tr₂、Tr₃(本地时间)分别接收到来自三颗卫星的信号。

经过解析,接收机获取到以下信息:

· 卫星1:位于(Xs₁, Ys₁),播发时间为Ts₁

· 卫星2:位于(Xs₂, Ys₂),播发时间为Ts₂

· 卫星3:位于(Xs₃, Ys₃),播发时间为Ts₃

理论上,将接收时间与其相应的播发时间相减,可以得知信号的真实传播时间,接收机通过信号传播时间乘以光速 C 来估算与卫星之间的真实距离(实距)D。


从卫星到接收机的几何距离可以这样表示:

D₁ = √( (X - Xs₁)²+ (Y - Ys₁)²)

D₂ = √( (X - Xs₂)²+ (Y - Ys₂)²)

D₃ = √( (X - Xs₃)²+ (Y - Ys₃)²)


到这里,定位看起来似乎只是一个二元的解算问题,好像两颗卫星就能确定接收机的位置了?理论上,如果没有时钟偏差,这一结论是正确,两个几何距离确实足以确定二维位置(两圆交点),但——

时钟的偏差

实际上,由于接收机在冷启动时通常没有精确的时间信息,或者长时间没有进行同步导致时钟产生误差,接收机自身的时间与标准时间之间一般会存在一个未知的偏差 ΔT。

正是这个 ΔT 的存在,导致接收机计算出的信号传播时间也存在相同的偏差。接收机只能根据其本地时间和卫星播发时间计算出一个传播时间(Tr - Ts),再乘以光速 C 得到一个带有误差的距离,我们称之为伪距(Pseudorange, PR)。

因此,实际测得的伪距与卫星到接收机的真实距离 D 之间存在以下关系:


PR = D + C × ΔT

其中,C × ΔT就是由接收机时钟偏差引入的距离误差。

如果直接将这些带有误差的伪距代入上述几何关系式,显然是无法解算出正确位置的。为了解决这个问题,我们必须将 ΔT 作为一个新的未知数引入到方程组中,组成一个三元非线性方程组,但一旦引入ΔT作为第三个未知量,便需增加第三颗卫星以形成闭合解。

因此,至少需要三颗卫星才能在基于时空关系下的卫星导航系统中进行位置的完整解算。


从伪距到实距

对于每一颗卫星,其伪距 PR 、接收机位置坐标 (X, Y) 、卫星已知坐标 (Xs, Ys) 和待求的 Δt 满足以下三个非线性方程组:


upload_downloader_1751545138063_16283740.webp

在这个方程组中,PR₁, PR₂, PR₃是接收机实际测量得到的伪距(已知量),而X,Y,ΔT是我们需要求解的三个未知数。

求解过程常采用迭代非线性最小二乘法(如高斯-牛顿或卡尔曼滤波),实际 GNSS 芯片内部均有内建算法完成该流程。

因此,在二维定位中,我们至少需要三颗卫星的伪距来解算出接收机的平面位置 (X, Y) 以及接收机的时钟偏差 ΔT。

一旦 ΔT 被解算出来,便可用于校准接收机时间,并消除伪距中因时间误差造成的偏差,从而得到精确的定位结果。这就是伪距定位。

从二维到三维

在现实世界中,卫星在三维空间中运行,接收机也存在高度方向 Z。因此,实际的卫星定位是一个四元问题,需要解算接收机的三维坐标 (X, Y, Z) 以及时间偏差 ΔT。

这意味着,我们至少需要接收到四颗卫星的信号才能解算出准确的三维位置和时间信息。

[ 修改于1年4个月前 - 2025/07/03 20:42:26 ]
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的