摘要:rtklib_java 项目所有定位模式测试已全部完成。本文记录 PPP-RTK 接入 SSR 实时流联调期间发现的两处关键 Bug、修复方案以及 WUH20 实测对比结果。
一、测试背景
rtklib_java 是基于 RTKLIB 2.5.0 demo5 移植增强的 Java 版本 GNSS 解算库。当前全定位模式测试收尾阶段,接入 SSR 实时流开展 PPP-RTK 验证,测试中暴露两个和 BDS 适配相关的底层问题,直接影响模糊度固定率和解算稳定性。
原生 RTKLIB PPP 模块设计偏向 GPS、Galileo,对 BDS-2 信号槽位布局缺少适配,存在隐蔽缺陷。
移植的功能一直没有SSR陷入了等待,今天拿到了CAS账户的权限,接入SSR测试功能。没有预想的顺利,果然实践出真知。
二、Bug1:BDS-2 MW 宽巷组合无法生成【FIX-ALG-037】
根因
detslp_mw() 硬编码采用 code[0]+code[1] 构造 Melbourne-Wübbena 宽巷组合。
- GPS:L1 (0)+L2 (1)、GAL:E1 (0)+E5a (1),匹配;
- BDS-2:B1I 在槽 0,B3I 在槽 3,不在槽 1,配对失效。
后果:BDS-2 无法形成合法 MW 组合,宽巷模糊度不能累积,AR 模糊度固定失败,退化为浮点 PPP 解。
MW 公式:
\\(MW = \\frac{f_1 L_1 – f_2 L_2}{f_1-f_2} – \\frac{f_1 P_1 + f_2 P_2}{f_1+f_2}\\)
修复方案
新增 PppCore.mwFreqIdx() 自动选频函数:
- GPS/GAL:保留原有 code[0]+code[1] 逻辑,向下兼容;
- BDS 分支:遍历所有观测槽位,优先选取 B1I+B3I 信号对,优先频差最大的有效频率组合。
优化效果
BDS 可用宽巷卫星:14 颗 → 17 颗 MW 组合失败跳过历元:10/119 → 5/119
三、Bug2:异常卫星导致 PPP-RTK 初始化死循环【FIX-ALG-038】
根因
BDS sat=107 出现粗差,初始伪距 – 载波偏差高达 372m(正常 ±20m 以内),卡尔曼滤波持续无法收敛,每历元重复触发卫星初始化,形成死循环,消耗算力、压低固定解数量。
修复:三层熔断防护
优化效果
异常持续影响历元:119 → 7 AR 固定解数量:78 → 92
四、实测数据
测试条件:WUH20 SSR 实时流,119 历元,BDS+GPS+GAL 三系统 PPP-RTK
表格
| BDS 可用宽巷卫星 | 14 颗 | 17 颗 |
| sat=107 异常历元 | 119 | 7 |
| AR 固定解总数 | 78 | 92 |
| ENU 精度 | E=2.1cm, N=2.8cm, U=5.1cm | E=1.9cm, N=2.6cm, U=4.8cm |

