CLAS DD PPP-RTK Filter A4 Retry¶
A4 retry starts from the failed A4 attempt 1 and keeps the default CLAS/MADOCA
paths outside the gated GNSS_PPP_CLAS_DD_FILTER=1 scaffold. The retry result
is a passing partial revert: keep the A4 diagnostics, revert the harmful GPS L2C
group split and CLASLIB f2 remap, and do not auto-enable QZSS S120..S122
remapping under the DD filter until QZSS residual parity is fixed.
CLASLIB Row Audit¶
The CLASLIB comparison was re-run from the patched disposable build at
/tmp/s22_claslib_build:
CLASLIB_S24_DD_DUMP=/tmp/a4_claslib_dd_rows_codes.csv \
bash -lc 'cd /tmp/s22_claslib_build/util/rnx2rtkp && \
./rnx2rtkp -k /tmp/a4_static_linux.conf \
-ts 2019/08/27 16:00:20 -te 2019/08/27 16:01:40 \
-o /tmp/a4_claslib_short_codes.pos \
../../data/0627239Q.obs ../../data/sept_2019239.nav \
../../data/2019239Q.l6'
At GPST 2068/230425 CLASLIB admits:
| Block | Reference | Targets | Rows |
|---|---|---|---|
| GPS L1 phase/code | G14 | G25 G26 G29 G31 G32 | 10 |
| GPS L2W phase/code | G14 | G25 G26 G29 G31 G32 | 10 |
| Galileo E1 phase/code | E27 | E07 | 2 |
| Galileo E5 phase/code | E27 | E07 | 2 |
| QZSS L1 phase/code | J02 | J01 J03 | 4 |
| QZSS L2 phase/code | J02 | J01 J03 | 4 |
Attempt 1's native sample admitted GPS as a separate m5/f1 L2C group and
mapped Galileo E5 to f2. The retry found that both are unsafe in the native
model:
- CLASLIB's GPS f1 row is L2W (
CODE_L2W), while native RINEX selection keeps GPSC2X/L2XunderSignalType::GPS_L2C. Splitting that asm5/f1was not CLASLIB parity and dominated fixed postfit rejects. - The CLASLIB
f2Galileo remap accepted bad fixed states in the current native ambiguity layout. Reverting Galileo E5 to the native secondary slot restores the A3-stable ambiguity conditioning. - CLASLIB does admit QZSS J01-J03 rows, but the native QZSS residual model is
not yet parity-safe. Enabling the
S120..S122remap under the DD filter regressed oracle error even when QZSS phase rows were suppressed.
The final A4 retry row sample at GPST 2068/230425 is:
m0f0C=5;m0f0P=5;m0f1C=5;m0f1P=5;m2f0C=2;m2f0P=2;m2f1C=2;m2f1P=2
m0f0*=G14, m0f1*=G14, m2f0/f1*=E27
That is intentionally the passing partial-revert surface, not full CLASLIB row parity. The unresolved QZSS and Galileo admission deltas are listed below as A5 entry points.
A4 Retry Changes¶
- Reverted attempt 1's GPS L2C
m5grouping. GPS rows stay in CLASLIB/native groupm0; this removes the worst A4#1 postfit reject source. - Reverted attempt 1's Galileo E5
f2slot back toward the A3-stable native secondary-frequency layout. Kept the richer per-frequency subset fallback; after the row-surface revert it improves fixed count and oracle error. - Stopped auto-enabling
GNSS_PPP_CLAS_QZSS_S_PRN_FIXfromGNSS_PPP_CLAS_DD_FILTER=1. The explicit QZSS remap knob remains available, and the focused QZSS row-builder unit test remains green, but default A4 retry gate-on does not consume the harmful QZSS rows. - Kept the A4 diagnostics:
GNSS_PPP_CLAS_DD_DIAGrecords row/ref summaries and the worst fixed-postfit phase row group/frequency/pair.
No ratio gate, postfit gate, static anchor, seed coordinate, or pseudo-measurement was added.
Oracle Result¶
2019-08-27 CLAS, same-epoch
/tmp/s31_ref/claslib_oracle_xyz_full.pos, --ar-ratio-threshold 2.0,
3599 matched epochs. Fixed status uses native FixedAmbiguities column 13 > 0.
| Path | Fixed epochs | Fixed 3D mean | Fixed Up mean | All-epoch 3D mean |
|---|---|---|---|---|
| A3 | 768 | 1.246752 m | 0.378185 m | 1.050019 m |
| A4#1 | 736 | 2.001001 m | 1.357775 m | 2.025515 m |
| A4#2 retry | 1067 | 1.122978 m | 0.353088 m | 1.007274 m |
A4#2 beats A3 on fixed count, fixed-only 3D, fixed Up, and all-epoch 3D. It is still about 0.188 m above the native parity target of about 0.935 m fixed-only 3D.
Reject Counts¶
Final gate-on diagnostics from /tmp/a4b_check_clas_dd_diag.csv:
| Gate/result | Epochs |
|---|---|
| Fixed accepted | 1067 |
| DD float postfit fallback | 969 |
| Ratio reject | 932 |
| Insufficient ambiguities | 553 |
| Fixed postfit RMS reject | 70 |
| Fixed postfit max reject | 8 |
Postfit reject split by worst phase row:
| Reason | Group/frequency | Epochs |
|---|---|---|
| postfit_rms | m0 f1 GPS/native L2 | 69 |
| postfit_max | m0 f1 GPS/native L2 | 8 |
| postfit_rms | m0 f0 GPS L1 | 1 |
Row participation over 3599 epochs:
| Group/frequency | Rows total | Mean rows/epoch |
|---|---|---|
| m0 f0 GPS L1 phase/code | 41250 | 11.462 |
| m0 f1 GPS/native L2 phase/code | 41250 | 11.462 |
| m2 f0 Galileo E1 phase/code | 15184 | 4.218 |
| m2 f1 Galileo E5 native slot phase/code | 15184 | 4.218 |
Verification¶
cmake --build build-madoca-parity --parallel --target gnss_ppp run_testspassed.- CLAS default gate off:
/tmp/a0_ref/clas_default.posand/tmp/a4b_check_clas.posmatched bycmp, md592479fffdeb0010cd940aa997a482358. - MADOCA 1h gate off:
/tmp/a0_ref/madoca_1h.posand/tmp/a4b_check_madoca_1h.posmatched bycmp, md51c67d6415ce92d317a392111a2d78471. ./build-madoca-parity/tests/run_tests: 323 passed, 43 skipped.
A5 Entry Points¶
- QZSS is the largest unresolved parity blocker. The CLASLIB row dump admits
J01-J03, but native
S120..S122remap rows worsen oracle error, including in a QZSS-code-only trial. Compare native QZSS PRC/CPC residuals against CLASLIBddres()before re-enabling automatic remap. - GPS L2W parity requires preserving RINEX GPS
C2W/L2Widentity and applying SSR bias id 9. Native currently collapses GPS band 2 toGPS_L2C, so L2W cannot be modeled faithfully insideppp_clas_dd.cppalone. - Galileo exact admission remains open. A broad broadcast-clock guard removes the extra E30 target at 230425, but it misses the all-epoch A3 bar. Add a targeted CLASLIB-valid-ZD admission source rather than a broad clock heuristic.
- After QZSS and L2W identity are fixed, revisit CLASLIB
f2frequency-slot parity. The subset fallback is useful on the corrected native row surface, but should be rechecked when true CLASLIB f2 rows are restored.