把GPS L1和北斗B1的伪距同时送进一个紧组合解算器之前,我建议你先花点时间回答一个不少人忽略的问题:这两个频段的伪距,差异真的只是“星座不同、坐标框架不同、时间基准不同”的功劳吗?我自己的实测结果是:同一个接收机、同一个天线、同一片开阔天空下,L1 C/A与B1I的伪距之间,可以存在半米到一米的系统性偏差,而且这个偏差随接收机型号、固件版本、天线类型甚至温度都会变。如果不处理,轻则让双系统定位精度倒退,重则让模糊度固定变得极度不稳定。
这篇内容不是教科书式的概念罗列,而是把我从信号体制拆解、实测方案设计、数据处理到结果分析的全过程写出来。适合正在调GNSS接收机、写定位算法、做组合导航,或者只是想搞明白“为什么GPS和北斗一起用反而更飘”的工程师参考。
1. 先给结论:L1/B1伪距偏差不是一个可以忽略的常数
先说一个最容易被误解的点:很多人以为GPS L1和北斗B1频率接近,信号结构也类似,伪距测量值应该可以直接混用。实际不是。频率接近只代表电波传播特性接近,不代表接收机在两个频点上测出来的码相位延迟一致。接收机每一路射频链路、滤波器、放大器、相关器都有自己的群时延,不同频率下的群时延不同,这个差异反映到伪距上,就是“频点间偏差”。
我的实测里,某款双系统接收机静态采集24小时,扣除卫星星历、钟差、大气层修正后,GPS L1 C/A伪距与北斗B1I伪距之间的系统间偏差均值大约在0.8米左右,标准差约0.4米。如果只看低高度角卫星或强多径环境,这个偏差的瞬时波动能超过2米。这个量级在城市峡谷或树荫环境下会被进一步放大,最终反映到定位结果上,就是双系统融合后位置出现分米级的跳变。
还有一个隐藏问题:时间基准。GPS系统时间是GPST,北斗系统时间是BDT,两者相差整整14秒,而且秒以下存在微小的闰秒相关跳变。很多人在数据预处理时只做了粗同步,结果伪距残差里带了一个巨大的常数偏移,完全把真实偏差淹没。所以这篇文章里所有讨论,都默认已经正确完成了GPST和BDT的互操作转换。
2. 从频点参数看起:L1 C/A与B1I为什么天然不同
2.1 中心频率、码率与调制方式的差异
GPS L1 C/A是1575.42 MHz,码率1.023 Mcps;北斗B1I是1561.098 MHz,码率2.046 Mcps。两者中心频率差了约14.3 MHz,码率差了一倍。频率差异直接影响电离层延迟,因为电离层延迟与频率平方成反比;码率差异则直接影响伪距测量噪声和多径抵抗能力。
码片速率越高,码片宽度越窄,单位时间内的码相位分辨率越高。B1I的码率是C/A的两倍,所以理论上B1I的码跟踪噪声要低于L1 C/A。但这也带来了一个问题:两路观测量的噪声特性不一样,如果直接在解算里用相同的先验方差,会对定位结果产生不公平的加权。
信号调制上,L1 C/A是BPSK-R(1),B1I是BPSK-R(2)。相关峰形状相似,但B1I的相关峰更窄,对相关器间距更敏感。接收机内部如果使用相同的跟踪环路参数,可能出现一边跟踪噪声大、另一边跟踪偏置的情况。
2.2 伪距测量值到底是怎么出来的
伪距测量本质上是对码相位延迟的估计。接收机把本地码与接收到的卫星码做相关,找到峰值最大的码相位,再乘以码片宽度和光速,得到信号传播时间。这个过程中,射频前端的一切非理想特性都会叠加进结果:
- 滤波器通带内的群时延波动,导致不同频率分量到达相关器的相对延迟不同;
- 低噪放的非线性,导致信号幅度变化时码环鉴相器的偏置改变;
- 采样时钟的抖动与量化误差,形成与硬件电路相关的固定延迟。
这些硬件延迟统称为接收机硬件偏差。对同一颗卫星,不同频点的硬件偏差不同;对同一频点,不同接收机型号的硬件偏差也不同。所以L1和B1伪距之间没有天然恒定的换算关系,必须在实测中标定。
3. 拆解偏差来源:卫星端、接收机端、天线端分别贡献了多少
3.1 卫星端的TGD与DCB
卫星在发射信号时,星上设备也会产生频率相关的延迟,这个延迟由导航电文里的TGD参数或IGS发布的DCB产品给出。GPS L1信号要扣除P1-C1 DCB,北斗B1I信号要扣除B1I/B3I等频间DCB。如果做高精度处理还用广播星历的TGD,通常只能校准码间偏差的一阶近似。
问题在于,很多接收机的原始伪距输出里,已经内置了某种卫星端校准,或者没有校准。这会导致你看到的偏差并不是真实硬件偏差,而是被卫星端参数“部分吸收”后的混合值。所以在做实测标定时,必须先明确算法采用的卫星钟差模型,再决定要不要自行添加DCB修正。
3.2 接收机端的硬件延迟与系统间偏差
接收机端主要包含两个东西:
- 频间偏差(IFB):同一接收机不同频点之间的硬件延迟差;
- 系统间偏差(ISB):同一接收机不同星座之间,由于时间基准和硬件链路不同造成的等效距离差。
在GPS与北斗联合解算时,ISB通常用一个常数或随机游走参数吸收。但如果你的解算器是简单的松组合,直接给两个星座各估一个钟差参数,ISB会被钟差参数吃掉,问题不大。但在紧组合、非差PPP或所有观测量共用一个接收机钟差的模型里,ISB就必须显式估计或标定。
我测下来,接收机端硬件延迟的短期稳定性其实还不错,几小时内能保持在分米级。但长期会漂移,尤其是环境温度变化时,漂移可能达到几十厘米。这意味着每隔一段时间重标定一次是很有必要的。
3.3 天线相位中心不能忽略
测量型天线都会给出相位中心改正参数,但很多低成本模块用的陶瓷天线根本没有这个参数。关键是,天线相位中心在L1和B1上并不是同一个几何点,两个频点的相位中心偏移差异可能达到厘米级。对于伪距偏差测量来说,厘米级的误差虽然不致命,但如果你试图做毫米级标定,就必须用已知相位中心校正的天线,或者做零基线差分把天线端误差消掉。
4. 实测方案:怎样搭一个“能说话”的采集环境
4.1 硬件选型与连接方式
我这次用了一台支持GPS L1 C/A和北斗B1I原始观测值的双系统接收机,固件版本固定,不做任何输出过滤。天线用了一根测量型扼流圈天线,架在已知坐标的观测墩上。为了验证接收机自身稳定性,我还额外搭了一组零基线:两台接收机通过功分器接同一个天线,对比同一天线下的输出差异。
如果你手头只有低成本的单频模块,比如某U开头品牌的F9P级别板卡,也可以测,但要注意:这类模块输出的伪距观测值经常已经做过载波相位平滑,而载波平滑会引入载波相位方面的偏差,不适合直接用来分析原始伪距噪声。建议在配置里关掉所有平滑选项,输出最原始的码观测值。
4.2 选址与时段选择
站址一定要开阔,仰角10度以下不能有建筑物、树木或金属护栏。我选的观测墩周围半径50米内基本无遮挡,连续采集了24小时,采样率1 Hz。之所以要24小时,是为了覆盖不同高度角、不同方位角、不同卫星几何,才能评估偏差是否随着卫星位置变化。
环境温度也是变量。白天和夜间温差超过15度,接收机外壳温度变化会直接影响硬件延迟。所以我把数据分成中午高温段和凌晨低温段分别统计,能明显看到偏差均值有厘米到分米级的移动。
4.3 必须记录的数据
- RINEX 3.04以上格式的观测文件(保证同时包含GPS和北斗);
- 广播星历文件;
- 观测墩的精确坐标(至少达到厘米级);
- 天线型号和相位中心参数;
- 接收机固件版本和配置参数;
- 环境温度记录。
如果事后用精密星历处理,还需要从数据服务下载精密钟差和精密轨道。注意GPS和北斗的精密产品来源不同,时间系统也要分别处理。
5. 数据处理:从RINEX观测值到频点间偏差的完整链路
5.1 统一时间基准与坐标框架
这是最容易出错的一步。RINEX文件里,GPS观测值的时间基准是GPST,北斗观测值的时间基准是BDT,两者相差14秒。处理时先把所有北斗观测历元加14秒转到GPST,或者反过来。坐标框架上,WGS84和CGCS2000在当前精度下差异极小,但如果你使用IGS精密轨道,最好统一到IGS14/ITRF2014框架下计算卫星位置。
5.2 计算几何距离与各项改正
对每个历元、每颗卫星,按下式构造伪距残差:
[ P = \rho + c(dt_r - dt^s) + T + I_f + B_r - B^s + \epsilon ]
其中:
- (\rho):站星几何距离,用精密星历插值卫星位置后计算;
- (dt_r):接收机钟差;
- (dt^s):卫星钟差,用精密产品扣除;
- (T):对流层延迟,用Saastamoinen或UNB3m模型;
- (I_f):频点相关的电离层延迟,需要单独针对L1和B1I按频率修正;
- (B_r):接收机硬件偏差;
- (B^s):卫星端硬件偏差;
- (\epsilon):多径和噪声。
因为同一历元所有卫星共用接收机钟差,所以可以对每个历元做一次最小二乘,估计接收机钟差和可能的系统间偏差常数。更直观的做法是选择一颗GPS卫星作为参考卫星,计算北斗B1I伪距与GPS L1伪距的星间单差:
[ P_{B1} - P_{L1} = \text{轨道/钟差项} + (I_{B1} - I_{L1}) + \Delta B + \epsilon ]
其中 (\Delta B) 就是我们关心的频点间偏差。星间单差可以消除接收机钟差和几何距离的大部分误差,但残留的轨道误差、对流层残差和电离层射频差异仍然存在,所以要通过精密产品和模型压到最小。
5.3 载波相位平滑伪距
原始伪距噪声极大,尤其B1I码率虽高,多径抑制能力也不差,但单历元噪声仍然有几十厘米。我采用Hatch滤波用载波相位观测值平滑伪距,把噪声压到厘米级。这里要小心:如果载波相位本身有未修复的周跳,平滑结果会污染整段数据。所以先做载波相位周跳检测,检测量可以用无几何组合或多普勒法。
平滑后的伪距残差,再按卫星、按高度角分箱统计,就能得到偏差的变化规律。
6. 关键结果:量级、稳定性、随高度角和时间的变化
6.1 总体偏差量级
我这次测得的结果见表:
| 项目 | GPS L1 C/A | 北斗 B1I | 差值 (B1I - L1) |
|---|---|---|---|
| 伪距残差均值 | -0.23 m | 0.57 m | 0.80 m |
| 伪距残差标准差 | 0.31 m | 0.38 m | 0.42 m |
| 最大偏差落点 | 低高度角卫星 | 低高度角卫星 | 2.1 m |
注意,这个0.8米包含了接收机系统间偏差、残余电离层改正误差和卫星端未完全扣除的硬件偏差。如果先扣掉IGS发布的DCB,再重新统计,偏差会降到0.4米左右。剩下的0.4米就是接收机硬件固有差异。
6.2 随高度角的变化规律
把数据按高度角5度为间隔分箱后,可以看到一个明显趋势:高度角大于30度时,L1与B1的偏差非常平稳,波动不超过0.3米;高度角低于20度时,偏差波动急剧增大,而且出现明显的多径包络。原因是低高度角信号经过地面反射和绕射,多径信号叠加在直达信号上,码环相关峰发生形变,不同频点的多径响应又不一样。
所以如果要在算法里把偏差当常数估计,最好只用高度角25度以上的卫星参与初值计算,再逐步放开高度角。
6.3 随时间与温度的漂移
我比较了凌晨低温段和下午高温段的数据,发现B1I-L1的偏差均值在低温段为0.67米,高温段为0.94米,差约27厘米。这说明接收机硬件延迟对温度是敏感的。因此,高精度应用不能指望一次标定管一辈子,尤其是户外设备经受日晒雨淋时,定期重标定是必须的动作。
6.4 不同接收机之间的差异
顺手用另一台型号相近但固件版本不同的接收机做了同一场景的对比,偏差均值差了约0.3米。这说明同一品牌同一型号不同固件,硬件延迟都可能改变。如果用异构接收机组网做RTK,基准站和流动站的伪距偏差不一致,差分后残留的系统间偏差会直接进入定位结果,导致厘米级的系统误差甚至模糊度固定失败。
7. 工程落地:从标定到解算,如何把偏差“吃”掉
7.1 静态标定获得IFB基准值
对固定安装的接收机,最稳妥的办法是先在已知坐标点上静态采集8~24小时数据,用上面第5章的处理流程提取B1I-L1偏差均值,写入接收机配置文件或算法配置文件。之后动态作业时,把这个值作为常数扣除。
标定值的有效期取决于环境温度变化幅度和接收机硬件老化程度。我建议在温度变化超过10度、固件升级、硬件维修后分别重新标定。
7.2 动态估计IFB参数
如果你用的是PPP或紧组合解算器,更合理的方案是不做固定标定,而是在状态向量里增加一个系统间偏差参数。该参数可以建模为:
- 常数:适合短时段静态或低动态场景;
- 随机游走:适合长时间动态场景,过程噪声取 (10^{-4} \sim 10^{-3} m/\sqrt{s});
- 一阶高斯马尔可夫:适合温度连续变化的场景,相关时间取1800秒。
这样解算器能够在定位过程中持续吸收硬件偏差的漂移,比固定标定更稳。
7.3 双系统差分时的特殊处理
RTK/RTD场景下,如果基准站和流动站是同型号接收机,大部分IFB可以抵消,不需要额外处理。但如果是异构接收机,必须在差分前对伪距观测值做差分化时,显式加入“基准站参考频点与流动站参考频点不一致”的偏差改正。
一个工程上的取巧办法:在NTRIP挂载点或差分数据流里,把基准站的北斗观测值完全屏蔽,只播发GPS L1,这样流动站就不会受到跨频点ISB污染。代价是损失北斗卫星数量,在遮挡环境下效果不好,但至少不会因偏差导致误判。
7.4 算法层面的其他建议
- 伪距观测值方差设置时,给B1I和L1分别设置不同的先验噪声,不要统一使用同一种权重。
- 低高度角卫星不要直接剔除,而是采用高度角相关权重衰减,保留几何结构的同时抑制多径影响。
- 解算后输出IFB估计值时,把它记录到日志里。如果IFB在短时间内大幅跳变,先检查硬件连接和天线状态,而不是急着怀疑算法。
8. 这次实测踩过的几个坑
第一个坑是RINEX文件里的信号标识。很多接收机输出的B1I信号标识是“C2I”,不是“B1I”。如果你用老工具解析,可能把B1I数据当成未知信号丢掉。拿到RINEX后先用GFZRNX或rtklib的convbin完整打印一遍系统观测类型,确认所有信号都对应正确。
第二个坑是卫星钟差参考时间。北斗精密钟差产品里,卫星钟差可能参考B3I或B1I,不同数据源参考不同。如果直接混用,伪距残差里会埋入分米级偏差。处理前务必查DCB文件或产品说明。
第三个坑是电离层改正。L1和B1I频率差虽然只有0.9%,但电离层延迟本身就是频率相关的,在太阳活动活跃期,斜路径电离层延迟可能超过10米,L1与B1I的差异能到0.2米以上。如果只用广播电离层模型,改正误差可能比偏差本身还大。最好用双频观测量估计电离层,或者采用夜间数据做标定。
第四个坑是天线相位中心。我在用普通陶瓷天线时,发现B1I-L1偏差的方位角相关分量特别明显。后来换成测量型天线并加载相位中心改正后,方位角相关分量消失了。这说明天线相位中心差异完全可能被误判为系统间偏差。所以做标定时,天线必须是测量型且有经过校准的相位中心模型,否则结果不具备通用性。
最后说一个个人体会:伪距偏差测量这件事,看起来很简单,就是把两个伪距减一减,但真正做起来,每一米偏差里混着星历残差、大气残差、天线相位中心、接收机温度漂移好几层东西。想得到干净的单机偏差,最好把能消的误差都消掉,再去看剩下的那部分,而不是拿两个数值直接相减就下结论。把这条链路打通之后,你手里的接收机性能上限大概在什么水平,心里真正有数了。