2. GPS信号基础:L1/L2载波频率、C/A码与P码特性、导航电文帧结构

各位同学,咱们今天聊聊GPS信号的基础。说实话,搞了这么多年接收机,我越来越觉得这部分内容就像盖房子的地基。地基打不牢,后面捕获、跟踪、定位全得翻车。我自己带新人时,第一件事就是让他们把信号结构刻在脑子里。

2.1 载波频率:L1与L2

GPS卫星发射两个主要频段的信号,分别是L1和L2。你可能会问,为什么搞两个频率?嗯,这里有个关键原因——电离层延迟校正。

L1载波:频率为1575.42 MHz。这个频率承载了C/A码(粗捕获码)和P码(精码)。民用接收机主要靠它。

L2载波:频率为1227.60 MHz。它主要承载P码,早期用于军用。后来有了L2C信号,民用也能用了。

我个人习惯把这两个频率记成:L1 ≈ 1.575 GHz,L2 ≈ 1.227 GHz。差了个约348 MHz,正好用来做双频电离层校正。

核心公式:电离层延迟与频率的平方成反比。所以双频接收机可以通过L1和L2的伪距差,反推出电离层延迟量。我在做高精度测量型接收机时,这个原理帮了大忙。

参数 L1 L2
中心频率 1575.42 MHz 1227.60 MHz
波长 约19.0 cm 约24.4 cm
主要码 C/A码 + P码 P码
调制方式 BPSK BPSK

避坑指南:我曾经在设计射频前端时,忽略了L1和L2的谐波干扰。结果L2的二次谐波正好落在L1频段附近,导致灵敏度下降了好几个dB。后来我学乖了,滤波器设计时一定要留足余量。

2.2 C/A码与P码特性

GPS信号里最核心的就是扩频码。说白了,就是用一串伪随机序列把信号能量展宽到很宽的频带上。这样做的好处是抗干扰、抗多径,还能实现码分多址。

2.2.1 C/A码(粗捕获码)

C/A码是民用码,周期为1毫秒,码速率为1.023 Mbps。每个卫星分配一个唯一的C/A码,由两个10级Gold码发生器生成。

  • 码长:1023个码片(1 ms × 1.023 MHz)
  • 码速率:1.023 MHz
  • 周期:1 ms
  • 用途:民用定位、快速捕获

你想想看,1毫秒的周期意味着什么?意味着接收机只需要搜索1毫秒的数据,就能完成码相位对齐。这也是为什么C/A码捕获速度比较快的原因。

我建议:初学者在仿真C/A码生成时,先不要急着写代码。拿纸笔把Gold码的反馈多项式画出来,理解清楚G1和G2两个移位寄存器的结构。我当年就是这么干的,画了三遍才彻底搞明白。

2.2.2 P码(精码)

P码是军用码,码速率为10.23 MHz,是C/A码的10倍。它的周期长达7天,码长约为6.1871 × 1012个码片。说白了,P码的码速率更高,测距精度也更高。

  • 码速率:10.23 MHz
  • 周期:7天(每周日凌晨重置)
  • 码长:约6.1871 × 1012码片
  • 用途:军用高精度定位、抗干扰

为什么P码精度更高?因为码速率越高,码片宽度越窄,测距分辨率就越高。C/A码的码片宽度约293米,P码只有29.3米。你想想看,同样的码相位测量误差,P码带来的距离误差只有C/A码的十分之一。

注意:P码是加密的,民用接收机无法直接使用。但有一种技术叫codeless或semi-codeless,可以通过交叉相关的方式提取P码上的载波相位信息。我在做大地测量接收机时用过这种方法,精度确实高,但实现起来相当麻烦。

2.3 导航电文帧结构

导航电文是GPS卫星播发的数据,包含卫星星历、钟差、电离层参数等信息。接收机只有解调出导航电文,才能算出卫星位置和用户位置。

GPS导航电文的结构是分层的:子帧 → 页面 → 超帧。我刚开始学的时候,被这些概念绕得晕头转向。后来画了一张层级图,一下子就清楚了。

2.3.1 基本帧结构

一个完整的导航电文帧(也叫超帧)包含25个页面,每个页面包含5个子帧,每个子帧包含10个字,每个字包含30个比特。总比特数:25 × 5 × 10 × 30 = 37500比特。

数据速率为50 bps,所以一个超帧的播发时间为:37500 / 50 = 750秒 = 12.5分钟。

层级 组成 比特数 时间
30比特 30 0.6秒
子帧 10个字 300 6秒
页面 5个子帧 1500 30秒
超帧 25个页面 37500 12.5分钟

2.3.2 子帧内容

每个页面包含5个子帧,其中子帧1~3的内容是固定的,子帧4~5的内容在25个页面中轮播。

  • 子帧1:卫星钟差参数、时钟校正参数、卫星健康状态
  • 子帧2-3:卫星星历参数(开普勒轨道参数)
  • 子帧4-5:历书数据、电离层参数、UTC参数、卫星健康状态等(分页播发)

这里有个关键点:子帧1~3每30秒重复一次,所以接收机最多等30秒就能拿到星历。而子帧4~5要等12.5分钟才能收全。我在做快速定位接收机时,就利用了这个特性——先拿子帧1~3做单点定位,历书数据慢慢收。

实用技巧:导航电文中的每个字都包含6个奇偶校验比特(汉明码)。接收机在解调时一定要做校验,否则一个比特错误就能让定位结果偏出几公里。我曾经遇到过一颗卫星的星历校验一直失败,后来发现是射频前端有间歇性干扰。

2.3.3 页面与超帧

页面编号从1到25。每个页面包含5个子帧,其中子帧1~3的内容在所有页面中都是一样的,只有子帧4~5的内容不同。

说白了,子帧4~5就像一个轮播广告牌,25个页面轮流播放不同的数据块。接收机需要连续接收12.5分钟,才能拿到完整的历书和电离层参数。

我建议你在做接收机软件时,设计一个页面接收状态机。每收到一个页面,就标记该页面已接收。等25个页面全部收齐,再更新历书数据库。这样做的好处是,即使中间丢了几页,也不需要从头开始收。

避坑指南:我曾经在写导航电文解析代码时,忽略了子帧的遥测字(TLM)和交接字(HOW)。TLM字包含同步头(8个比特的10001011),HOW字包含Z计数(周内秒)。没有这两个字,你根本不知道当前子帧在时间轴上的位置。嗯,后来我老老实实把TLM和HOW的解析加上了。

2.4 小结

这一章我们聊了GPS信号的三个核心要素:载波频率、扩频码和导航电文。L1和L2两个频率各有用途,C/A码和P码的精度差异源于码速率,导航电文的帧结构决定了接收机的启动时间。

我个人觉得,理解这些基础概念最好的方法,就是动手写一个C/A码生成器,再写一个导航电文解析器。代码跑通了,概念自然就通了。下一章我们讲信号捕获,到时候你会看到,这些基础知识会反复用到。