我们如何收到卫星信号?(导航电文,载波与测距码)

卫星信号

在介绍所有卫星信号之前,首先要明确一些概念:

所有的卫星信号,都是一段电磁波,用户接收的,也是一段电磁波。

但是我们认知中的电磁波,就是一段波,就像我们打出去的交一样,怎么通过这一段波来转换成有用的数据呢?

首先,卫星发射信号的是计算机,接收机也是计算机,卫星发出信号,我们接收信号,接收的都是一段二进制01码,然后把01码进行转换。因为卫星不可能直接发出一串文字,而计算机就算接收到了这串文字,也无法看懂,所以计算机之间的交互很默契地都采用二进制码来交互。

因此,我们接收信号,方法就是将电磁波转换为二进制序列。但是怎么转换?转换方法就多了,我们可以:

  • 电磁波高波峰表示1,低波峰表示0
  • 电磁波正波表示1,负波表示0,曼波out

具体的实现方案,我们就不需要深究,也不是我们需要管的事,我们只用知道:卫星发出和我们接收的信号都是电磁波,最终转换为的形式为二进制序列。

而因为电磁波可以转化成二进制码,我们可以重新用码的特性去定义卫星信号的一些特性:

  1. 码元:二进制序列中每一个二进制数称为一个码元
  2. 码元宽度:每个码元持续时间或其对应的距离成为码元宽度
  3. 码速率:码发生器每秒输出的码元个数

卫星信号分为三种:++载波,测距码与导航电文++。

测距码

测距码是用来测距的一串码序列,最终他的形式也是可以转换成01的。**测距码最大的特性,也就是他定位的原理,便是他采用的是一段伪随机码。**什么是伪随机?

就如同我们在编程语言中涉及到的获得伪随机数与设定种子一样:

伪随机数列是一个数组:

对每一个数组中的元素,都有一个固定的算法:

比如:第一空的算法为

我们在给定种子为x=2的时候,第一个空的数据就是f(2)=14

同理,一直填满所有的空

而当我们想取随机数的时候,就按顺序依次从这个数组里取,

比如我们在玩掷硬币,假设为奇数是正面,偶数是反面

那么第一次掷硬币,我们取第一个元素,14,为反面

第二次掷硬币,我们取第二个元素,g(2)

过了很长时间,我们再掷第三次硬币,只要我们不重新设置种子,还是从上一次的位置开始往下取,即取第三个元素h(2)

也就是说,只要种子确定了,我们就能把这个序列给推算出来。但是,因为随机数组对于不同种子是完全不同的,所以我们可以近似认为他是随机的,也便是可以预测的随机:伪随机。而用这个特性,我们可以得到两个结论:

  1. 知道卫星产生随机序列的种子,我们可以在接收机端产生一段一模一样的序列
  2. 因为序列是随机产生的,对不同种子,序列完全不同,而且就算一个相同的序列,如果没有对齐(即第一个数组以a[0]为起点,第二个数组以a[2]为起点),所以序列的自相关性极强
    (自相关性是指,两个序列的重合程度)

导航电文

导航电文,导航电文是一串比较特殊的序列,他又叫做数据码,作用是传递一些与定位有关的数据和卫星状态。导航电文搭载的信息就比较格式化,

  • 导航电文的传输速率为为50b/s,也就是每秒传输50个二进制码
  • 一个完整的导航电文信息为1500b,为一个主帧,所以发送完一个主帧需要1500/50=30秒
  • 一个主帧分为5个子帧,每个子帧含1500/5=300b
  • 一个子帧有10个字,每个字30b

也就是,一个导航电文被分为了很多很多小块,系统地来分便是5个子帧,50个字,每个字代表着一个信息。我们知道,一个int类型为4子节32个bit,而一个字30个bit,也就是一个字刚好能表示一个数,这也是导航电文的分块------分成了一块又一块的数字。

但是,导航电文的数据非常多,用50个字没有办法全部表示完。怎么办?所以我们不得不用两串完整的导航电文去表示一个定位数据,也就是用100个字来表示,还不够就150个,200个。

而在实际实现的过程中,采用的是25串完整的导航电文,去表示一个导航数据,其中:

  • 对一串完整的导航电文,前三个子帧播发卫星的基本数据,如时间等。这些是不会变的,25串导航电文一直重复播发
  • 而后两个子帧,需要播发卫星的状态和定位数据,在25串导航电文里,轮流去表示这些数据。

也就是,前三个子帧是不会变的,一直重复播发,而后两个子帧则在25串电文,一共2*25=50个子帧中,将数据播发完整。

导航电文的更新频率是2个小时,也就是在两个小时之内一直会重复播发这25个主帧。

假设在12:00的时候更新,那么一直到14:00,导航电文会重复播发25个子帧,这25个子帧表示的状态都是12:00时刻时,卫星的运动状态和轨道参数。

载波

载波,翻译成人话,就是搭载信号的波,再通俗地说,就是信号波的交通工具。信号从外太空发射过来,会经历大气层,而在传输的过程中会有个特点:

  1. 如果波的频率过高,则电离层的延迟很严重,导致电离层误差过高
  2. 如果波的频率过低,则会被大气层严重吸收,导致信号的强度大大降低

所以采用适中频率的波------L波段无线电信号最合适。载波就是一个交通工具,如果直接用导航电文和测距码,那么要么频率过高要么频率过低,所以就要把导航电文和测距码与载波相调制,把导航电文和测距码调制到L波段上,减少误差。

载波一共有三个频率,

  1. 第一个频率负责搭载信号,
  2. 第二个频率用来采用差分的方法消除电离层延迟,
  3. 第三个频率来实现更多用以提升定位精度的功能

卫星定位原理

测距码测量

原理:测距码是一串伪随机码,只有码序列相同并且对齐,其相关系数才为1

所以,我们可以利用这一特性,在接收机上输入相同的种子,产生一段与卫星相同的伪随机序列

比如:

卫星发出的伪随机码是:abcdefghijk...
(卫星当然发出的是二进制码,但是这里为了更直观比对结果,举例就采用更直观的码序列)

那我们就用相同的种子,在接收机上也构建一段相同的码序列:abcdefghijk...

但是,当接收机接收到信号的时候,不可能是从起点abcd开始的,有可能出现下面的情况:

因为没有对齐,他们的相关系数是极低的。于是,我们就固定住接收到的卫星码,然后向后挪动接收机自己产生的码:

他们之间的差距由两个字母到了一个字母,但是还是没有对齐,相关系数还是很低,我们再挪动一下:

这个时候,计算相关系数,发现相关系数为1了,而且再读取计数器,发现挪动了两个码,所以计算机就知道了:

在一个码序列周期内,他们之间相差了两个码的距离

所以,就可以计算出,在一个码序列周期内,他们相差的时间为:

但是除此之外,他们还相差了很多个整周期T,这个整周期T因为码序列的长度是固定的,所以T一般来说也是固定的一个数,可以直接采用。

所以,信号的传输时间为:

然后再用最基础的L=V*t,就可以求出卫星到接收机之间的距离:


载波测量

但是在高精度测量中,测距码的测量精度并不高。因为其精度求得的时间和码元的宽度强相关,如果码元过宽,对齐过于简单,那么最终的精度也会很低。但是,载波就像三角函数一样,是一段连续的波,我们可以采用这段连续的波,缩短他们的误差,来提高定位精度。

比如在途中,我们接收到的卫星信号是波峰的位置,我们就可以知道,卫星信号的相位是二分之Pi。但是,光知道这个二分之Pi,我们并无法进行定位,因为从卫星发出信号到接收机接收到信号,一定有以下几个部分:

用公式表示便是:

,前者为不满一整周期的相位,后者为整周期数,因为我们并不知道整周期数是多少,又叫他整周模糊度
但是,这个整周模糊度,我们怎么求出来?

我们在测距码定位的时候,就已经求出来了传播的时间,只不过,这个时间的精度不怎么高。

但是,就算再怎么不高,他也不可能相差一整个周期。所以,我们就采用这个测距码测量时得到的时间,逆推出整周模糊度的大小,然后就可以求出卫星到接收机的波长长度。

所以,可以认为,测距码测量的目的是确定整周的长度,而载波测量实际上是确定了不满一周的相位长度,提高了定位的精度。


导航电文测量

导航电文的测量,和前两个有着很大的不同。导航电文测量就不再用波进行测量,而是采用导航电文给出的数据进行解算。在导航电文的第二三子帧中,会给出GPS的轨道参数,而在卫星定位中,采用的卫星轨道描述方法为:开普勒轨道根数

在人工轨道理论中,用六个开普勒轨道根数来描述卫星椭圆轨道的形状,大小和在空间的指向,其包含以下六个参数:

  1. 升交点赤经
  2. 轨道倾角
  3. 长半径
  4. 偏心率
  5. 近地点角距
  6. 卫星过近地点的时刻

升交点赤经

一般来说,卫星轨道和赤道会有两个交点,东边一个西边一个。**卫星从赤道下也就是南半球,经过交点,进入赤道上北半球,这个交点叫做升交点,就像太阳升起;而另外一个叫做降交点,就像太阳落下。**升交点的赤经,也就是天球下的经度,叫做升交点赤经。

轨道倾角

在升交点处,轨道正方向(也就是卫星运动的方向)与赤道的正方向(赤经增加的方向) 的夹角。

长半径

轨道椭圆长轴的一半

偏心率

近地点角距

由地心(A),升交点(B),近地点(C)组成的角BAC就称为近地点角距

而除了给出这几个参数以外,还会给出几个摄动参数。因为导航电文是2个小时更新一次,在两个小时之间,卫星已经运动出了一段距离。我们需要通过这些摄动参数,来模拟卫星的运动状态,从而求出卫星在任意时刻的位置,而非两个小时之前的位置。

具体的公式,可以看看具体代码实现的文章:

卫星位置解算http://t.csdnimg.cn/iKBmL


最后,给自己叠个甲。因为自己才是导航工程大二的本科生,有些概念理解可能不到位,而又想用最容易理解的方式表达出来,所以可能正确性会稍微有些偏差。但是对初学者来说,应该不会存在太大的错误,如果可以帮到你,真的荣幸之极。还有,

相关推荐
Evand J5 天前
【MATLAB例程】二维平面中,基于MUSIC解算角度的DOA定位,对未知点确定XY坐标,传感器数量自适应。附代码下载链接
matlab·定位·导航·doa·到达角·测角定位
Evand J9 天前
【MATLAB代码介绍】基于累积概率的三维轨迹匹配与定位,由轨迹匹配和卡尔曼滤波形成算法,带测试结果演示
算法·matlab·滤波·定位·导航·轨迹匹配
深蓝学院12 天前
完全端到端闭环导航!仅需相机,LoGoPlanner实现感知定位规划一体化
机器人·导航·端到端·具身智能
杨浦老苏13 天前
轻量级自托管仪表盘Dashlet
docker·群晖·导航
zylyehuo17 天前
Ubuntu22.04(ROS2 humble)小车仿真环境搭建
ros2·导航
zylyehuo20 天前
规划中主要使用的地图类型
导航
zylyehuo23 天前
规划中主要使用的曲线类型
导航
深蓝学院23 天前
VLN 领域首个双系统基础模型,三大基准 SOTA,重新定义导航技术上限!
导航·具身智能·vln
点云SLAM24 天前
SLAM文献之-Embedding Manifold Structures into Kalman Filters(2)
机器人·slam·位姿估计·导航·imu·卡尔曼滤波算法·流行空间操作
Robot侠1 个月前
ROS1从入门到精通 12:导航与路径规划(让机器人自主导航)
人工智能·机器人·自动驾驶·ros·路径规划·gazebo·导航