第一章:GNSS基础与信号结构

各位同学,今天咱们聊聊GNSS的基础。说白了,就是搞清楚天上那些卫星到底在干什么。

我刚开始接触这个领域时,总觉得信号结构这东西太抽象。后来在项目里被折腾了几次,才明白——不懂信号结构,你连接收机为什么锁不住星都搞不清楚。

1.1 四大系统概述

目前全球有四大卫星导航系统:美国的GPS、中国的北斗、俄罗斯的GLONASS、欧盟的Galileo。嗯,这里要注意,它们虽然都是导航系统,但脾气秉性各不相同。

系统 所属国家/地区 卫星数量(约) 轨道高度
GPS 美国 31颗 20200 km
北斗 中国 44颗 21500 km(MEO)
GLONASS 俄罗斯 24颗 19100 km
Galileo 欧盟 24颗(满配) 23222 km

我个人习惯把GPS当作"老大哥"。它资历最老,技术最成熟。北斗呢,后来居上,特色是有短报文通信功能。GLONASS的轨道倾角大,在高纬度地区表现更好。Galileo精度最高,但星座还没完全建好。

我的经验:做多星座接收机时,别想着"一碗水端平"。GPS和北斗的兼容性最好,GLONASS的频分多址处理起来最麻烦。我曾在项目里因为GLONASS的通道切换没处理好,导致整机灵敏度掉了3dB。

1.2 信号频率与调制方式

每个系统都有自己的"嗓门"——也就是工作频率。你想想看,如果所有卫星都在同一个频率上喊话,那接收机根本分不清谁是谁。

系统 主要频段 中心频率 调制方式
GPS L1 / L2 / L5 1575.42 / 1227.60 / 1176.45 MHz BPSK / BOC
北斗 B1 / B2 / B3 1561.098 / 1207.14 / 1268.52 MHz BPSK / QPSK / BOC
GLONASS L1 / L2 / L3 1602.00 + n×0.5625 / 1246.00 + n×0.4375 MHz BPSK / BOC
Galileo E1 / E5 / E6 1575.42 / 1191.795 / 1278.75 MHz CBOC / AltBOC / BPSK

这里有个坑,我必须提醒你。GLONASS用的是频分多址(FDMA),每颗卫星分配不同的频率。而GPS、北斗、Galileo都是码分多址(CDMA),所有卫星用同一个频率,靠不同的伪随机码来区分。

避坑指南:我曾经在设计多模接收机时,想当然地把GPS的射频前端直接套用到GLONASS上。结果GLONASS信号根本解不出来。后来才发现,GLONASS的L1频段跨度有14 MHz,普通带通滤波器根本盖不住。所以,做GLONASS接收机时,射频带宽至少要留够20 MHz。

1.3 测距码结构

测距码,说白了就是卫星的"身份证"。接收机通过比对本地复制的码和接收到的码,就能算出信号传播的时间。

GPS的C/A码(粗捕获码)长度是1023个码片,周期1毫秒。北斗的B1I码长度也是1023,但码速率略有不同。Galileo的E1信号用的CBOC调制,码结构更复杂。

// GPS C/A码生成示例(简化版)
// 两个10级移位寄存器,生成Gold码
// G1多项式: 1 + x^3 + x^10
// G2多项式: 1 + x^2 + x^3 + x^6 + x^8 + x^9 + x^10

int g1[1023], g2[1023], ca_code[1023];
// 初始化寄存器全为1
// 每个时钟周期移位一次
// 输出为 g1[10] XOR g2[10]

嗯,这里要注意,不同系统的码结构差异很大。GPS的C/A码是公开的,但军用P(Y)码是加密的。北斗的民用码也是公开的,但授权码需要申请。

关键点:测距码的自相关特性决定了接收机的多径抑制能力。码片速率越高,抗多径能力越强。GPS的C/A码码片速率1.023 MHz,理论上能分辨约300米的多径。而Galileo的E5信号码片速率10.23 MHz,能分辨30米以内的多径。这就是为什么高精度接收机都喜欢用宽带信号。

1.4 导航电文结构

导航电文,就是卫星告诉接收机"我在哪、几点了、天上还有谁"。每个系统的电文格式都不一样,但核心信息差不多。

系统 电文类型 帧长度 更新周期
GPS NAV / CNAV 1500 bits(NAV) 12.5分钟(完整)
北斗 D1 / D2 1500 bits(D1) 6分钟(D1)
GLONASS 字符串 100 bits/串 2.5分钟(完整)
Galileo F/NAV / I/NAV 250 bits/页 10分钟(完整)

我记得第一次解析北斗电文时,被它的"二次编码"搞晕了。GPS的电文结构相对简单,就是帧、子帧、字。北斗的D1电文多了个"二次编码"层,用来提高捕获灵敏度。

我的建议:做多星座接收机时,电文解析模块最好做成"插件式"。每个系统写一个独立的解析器,通过统一的接口输出星历、历书、时间信息。这样后期维护方便,加新系统也容易。我在一个项目里就是这么干的,后来加Galileo支持时,只花了三天。

导航电文里最重要的信息是星历参数。GPS用开普勒轨道参数,16个参数描述卫星轨道。北斗也类似,但多了几个"北斗特色"参数。GLONASS用的是地心地固坐标系下的位置、速度、加速度,共9个参数。Galileo的星历参数和GPS很像,但精度更高。

为什么会这样?说白了,GPS和Galileo都是中轨道卫星,轨道比较圆,用开普勒参数描述效率高。GLONASS的轨道稍微扁一点,用位置速度描述更直接。

好了,这一章的内容就到这里。信号结构是GNSS的根基,后面讲抗干扰、多星座融合时,都会用到这些知识。下一章咱们聊聊接收机的射频前端设计,那才是真正考验硬件功底的地方。