gnss-js 2.10.1 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +16 -1
  2. package/dist/analysis.cjs +24 -25
  3. package/dist/analysis.js +2 -2
  4. package/dist/{clk-DGVBGRzA.d.cts → bias-sinex-OGMw9xEZ.d.cts} +66 -1
  5. package/dist/{clk-DGVBGRzA.d.ts → bias-sinex-OGMw9xEZ.d.ts} +66 -1
  6. package/dist/binex.d.cts +1 -1
  7. package/dist/binex.d.ts +1 -1
  8. package/dist/{chunk-56HM5B6T.js → chunk-2DJ4XENO.js} +177 -9
  9. package/dist/{chunk-GH7MYXON.js → chunk-2KQMCJ5Z.js} +7 -5
  10. package/dist/chunk-E3Y6YKQM.js +65 -0
  11. package/dist/{chunk-3U5AX7PY.js → chunk-FEABDV5P.js} +24 -25
  12. package/dist/{chunk-WQX354KD.js → chunk-H3AKFD25.js} +1 -1
  13. package/dist/{chunk-YUW33VXK.js → chunk-HUXQABJI.js} +2 -0
  14. package/dist/{chunk-74IVYOQV.js → chunk-HWHD5E6V.js} +128 -78
  15. package/dist/{chunk-KUSUN7DP.js → chunk-MFCPYUEI.js} +1 -1
  16. package/dist/{chunk-3KSDL3CO.js → chunk-NIJ6WFQJ.js} +6 -321
  17. package/dist/chunk-NL2ORX75.js +319 -0
  18. package/dist/{chunk-K3GLUWZI.js → chunk-RWFJEVLJ.js} +590 -296
  19. package/dist/{chunk-SEYH4BEN.js → chunk-SZP4TLYR.js} +2 -2
  20. package/dist/chunk-TWGZTRBL.js +323 -0
  21. package/dist/index.cjs +1315 -460
  22. package/dist/index.d.cts +5 -5
  23. package/dist/index.d.ts +5 -5
  24. package/dist/index.js +20 -12
  25. package/dist/{nav-DImXUdbp.d.cts → nav-COp0Vmlw.d.cts} +83 -2
  26. package/dist/{nav-DImXUdbp.d.ts → nav-COp0Vmlw.d.ts} +83 -2
  27. package/dist/{nav-BYmYoh9A.d.cts → nav-CvZXmumD.d.cts} +1 -1
  28. package/dist/{nav-CN8rxL4h.d.ts → nav-D2DFlVpa.d.ts} +1 -1
  29. package/dist/novatel.d.cts +1 -1
  30. package/dist/novatel.d.ts +1 -1
  31. package/dist/novatel.js +3 -3
  32. package/dist/orbit.d.cts +2 -2
  33. package/dist/orbit.d.ts +2 -2
  34. package/dist/osnma.cjs +1336 -0
  35. package/dist/osnma.d.cts +273 -0
  36. package/dist/osnma.d.ts +273 -0
  37. package/dist/osnma.js +1216 -0
  38. package/dist/positioning.cjs +585 -291
  39. package/dist/positioning.d.cts +116 -6
  40. package/dist/positioning.d.ts +116 -6
  41. package/dist/positioning.js +3 -3
  42. package/dist/rinex.cjs +210 -36
  43. package/dist/rinex.d.cts +10 -55
  44. package/dist/rinex.d.ts +10 -55
  45. package/dist/rinex.js +6 -3
  46. package/dist/sbf.cjs +420 -24
  47. package/dist/sbf.d.cts +46 -5
  48. package/dist/sbf.d.ts +46 -5
  49. package/dist/sbf.js +12 -6
  50. package/dist/trimble.d.cts +1 -1
  51. package/dist/trimble.d.ts +1 -1
  52. package/dist/ubx.d.cts +1 -1
  53. package/dist/ubx.d.ts +1 -1
  54. package/dist/ubx.js +5 -4
  55. package/package.json +6 -1
@@ -1,12 +1,12 @@
1
- import { E as Ephemeris } from './nav-DImXUdbp.cjs';
1
+ import { E as Ephemeris } from './nav-COp0Vmlw.cjs';
2
2
  import { DopValues } from './orbit.cjs';
3
- import { I as IonexGrid, C as ClkFile, S as Sp3File } from './clk-DGVBGRzA.cjs';
3
+ import { I as IonexGrid, C as ClkFile, S as SatOsbTable, b as Sp3File } from './bias-sinex-OGMw9xEZ.cjs';
4
4
  import { AntexFile } from './antex.cjs';
5
5
  import { a as ObsEpoch } from './msm-DWtoTvx2.cjs';
6
6
  import { a as HasOrbitCorrection, b as HasClockCorrection } from './has-BaXnQarR.cjs';
7
7
  import './ephemeris-BAnBLLB9.cjs';
8
8
  import './ecef-CF0uAysr.cjs';
9
- import './nav-BYmYoh9A.cjs';
9
+ import './nav-CvZXmumD.cjs';
10
10
 
11
11
  /**
12
12
  * Klobuchar broadcast ionospheric model (IS-GPS-200, 20.3.3.5.2.5).
@@ -690,6 +690,14 @@ interface LambdaResult {
690
690
  * typically cap it (RTKLIB uses 999.9) before thresholding.
691
691
  */
692
692
  ratio: number;
693
+ /**
694
+ * Bootstrapped success rate of the decorrelated ambiguities,
695
+ * Π (2Φ(1/(2σᵢ)) − 1) over the conditional standard deviations σᵢ —
696
+ * a lower bound on the probability that the integer solution is right
697
+ * (Teunissen 1998). Unlike the ratio, it depends only on the model's
698
+ * precision, so it refuses fixes the float solution can't yet support.
699
+ */
700
+ successRate: number;
693
701
  }
694
702
  /**
695
703
  * LAMBDA/MLAMBDA integer least-squares estimation (RTKLIB `lambda`):
@@ -1068,6 +1076,11 @@ interface PppSatObs {
1068
1076
  * up satellite code (OSB) biases from an SSR/HAS source; optional. */
1069
1077
  code1?: string;
1070
1078
  code2?: string;
1079
+ /** RINEX-3 tracking codes of the two *carriers* (e.g. '1C','2W'), for
1080
+ * satellite phase-bias (OSB) lookup when they differ from the code's
1081
+ * (GPS: C1W code with L1C phase). Default: `code1` / `code2`. */
1082
+ phase1?: string;
1083
+ phase2?: string;
1071
1084
  /** True if a cycle slip is flagged on either band (LLI or detected). */
1072
1085
  slip: boolean;
1073
1086
  }
@@ -1110,6 +1123,37 @@ interface PppOptions {
1110
1123
  * instead of the SP3 5-minute clocks — the dominant PPP accuracy term.
1111
1124
  * Satellites/epochs absent from the CLK fall back to the SP3 clock. */
1112
1125
  clk?: ClkFile;
1126
+ /** Satellite observable-specific biases (code + phase OSB) consistent with
1127
+ * the orbit/clock product — e.g. the CNES "ABS" biases that accompany GFZ
1128
+ * rapid products. With phase OSBs the float ambiguities keep their integer
1129
+ * nature (between satellites), which is what PPP-AR (`fixPppPosition`)
1130
+ * needs. Used with an Sp3File; a custom source supplies its own biases. */
1131
+ osb?: SatOsbTable;
1132
+ /**
1133
+ * Integer ambiguity resolution (PPP-AR). Needs satellite phase biases
1134
+ * (`osb`, or a source with `phaseBias`) — without them the ambiguities
1135
+ * aren't integers and this is ignored. Every `everyS` seconds the
1136
+ * converged ambiguities are resolved (wide-lane by rounding, narrow-lane
1137
+ * by LAMBDA, between satellites of a constellation) and, if the fix is
1138
+ * accepted, the epoch gets an ambiguity-fixed position next to the float
1139
+ * one. `true` uses the defaults.
1140
+ */
1141
+ ar?: boolean | {
1142
+ /** LAMBDA ratio test threshold. Default 3. */
1143
+ ratio?: number;
1144
+ /** Max wide-lane fractional part (cycles). Default 0.15. */
1145
+ wlThreshold?: number;
1146
+ /** Min arc age before an ambiguity is a candidate (s). Default 600. */
1147
+ minArcS?: number;
1148
+ /** Attempt interval (s). Default 120. */
1149
+ everyS?: number;
1150
+ /** Min bootstrapped success rate. Default 0.999. */
1151
+ successRate?: number;
1152
+ /** Min between-satellite ambiguities in a fix. Default 5. */
1153
+ minFixed?: number;
1154
+ /** Max χ²/dof of the float ambiguities vs the integers. Default 20. */
1155
+ maxChi2?: number;
1156
+ };
1113
1157
  }
1114
1158
  interface PppEpochResult {
1115
1159
  timeMs: number;
@@ -1125,6 +1169,10 @@ interface PppEpochResult {
1125
1169
  ztdHydrostatic: number;
1126
1170
  /** RMS of post-fit phase residuals this epoch (m). */
1127
1171
  phaseResRms: number;
1172
+ /** PPP-AR: between-satellite ambiguities fixed (0 = float only). */
1173
+ nFixed: number;
1174
+ /** PPP-AR: the ambiguity-fixed position, when the latest attempt fixed. */
1175
+ fixedPosition: [number, number, number] | null;
1128
1176
  }
1129
1177
  interface PppSolution {
1130
1178
  /** Final estimated ECEF position (m). */
@@ -1144,6 +1192,17 @@ interface PppSolution {
1144
1192
  convergenceSec: number | null;
1145
1193
  /** Final 3D error vs ground truth (m), if given. */
1146
1194
  finalError3d: number | null;
1195
+ /** PPP-AR summary, when `ar` was requested with a phase-bias product. */
1196
+ ar?: {
1197
+ /** Seconds from the first epoch to the first accepted fix (null: none). */
1198
+ firstFixSec: number | null;
1199
+ /** Ambiguities fixed at the end (0: the session ends float). */
1200
+ nFixedEnd: number;
1201
+ /** The ambiguity-fixed position at the end, or null. */
1202
+ position: [number, number, number] | null;
1203
+ /** Share of epochs with at least one ambiguity fixed. */
1204
+ fixedEpochShare: number;
1205
+ };
1147
1206
  /** Per-arc converged float ambiguities — one per continuous satellite
1148
1207
  * tracking arc — the raw material for ambiguity resolution (PPP-AR). */
1149
1208
  arcs: PppArc[];
@@ -1212,6 +1271,10 @@ interface PppEphemerisSource {
1212
1271
  * corrected code is `observed − codeBias`. SP3/CLK sources omit this (the
1213
1272
  * float ambiguity + broadcast clock reference absorb it). */
1214
1273
  codeBias?(prn: string, signalCode: string, tEmitMs: number): number | null;
1274
+ /** Optional satellite *phase* bias (m) for a carrier tracking code
1275
+ * ('1C','2W'…): the corrected carrier is `observed − phaseBias`. Only
1276
+ * integer-clock products (for PPP-AR) provide these. */
1277
+ phaseBias?(prn: string, signalCode: string, tEmitMs: number): number | null;
1215
1278
  }
1216
1279
  /** Default source: SP3 orbits + clocks, with optional high-rate CLK. Velocity
1217
1280
  * is a central finite difference (±0.5 s); the clock prefers the high-rate CLK
@@ -1219,7 +1282,10 @@ interface PppEphemerisSource {
1219
1282
  declare class Sp3EphemerisSource implements PppEphemerisSource {
1220
1283
  private readonly sp3;
1221
1284
  private readonly clk?;
1222
- constructor(sp3: Sp3File, clk?: ClkFile | undefined);
1285
+ private readonly osb?;
1286
+ constructor(sp3: Sp3File, clk?: ClkFile | undefined, osb?: SatOsbTable | undefined);
1287
+ codeBias?: PppEphemerisSource['codeBias'];
1288
+ phaseBias?: PppEphemerisSource['phaseBias'];
1223
1289
  satState(prn: string, tEmitMs: number): SatSample | null;
1224
1290
  }
1225
1291
  /**
@@ -1248,6 +1314,16 @@ declare class PppEngine {
1248
1314
  private arcs;
1249
1315
  private arcSnap;
1250
1316
  private mwState;
1317
+ /** Previous epoch's phase terms per satellite, for the time-differenced
1318
+ * (clock-free) cycle-slip test. */
1319
+ private tdPrev;
1320
+ /** Consecutive gated-out phase updates per satellite. */
1321
+ private phaseRejects;
1322
+ /** PPP-AR: the latest accepted fix (null: float). */
1323
+ private lastFix;
1324
+ private lastArMs;
1325
+ private firstFixMs;
1326
+ private fixedEpochs;
1251
1327
  private series;
1252
1328
  private ei;
1253
1329
  private t0;
@@ -1265,6 +1341,16 @@ declare class PppEngine {
1265
1341
  private clockOf;
1266
1342
  /** Process one epoch, carrying the filter forward; returns its result. */
1267
1343
  process(epoch: PppEpoch): PppEpochResult;
1344
+ /**
1345
+ * PPP-AR. Every `everyS`, resolve the converged ambiguities of the
1346
+ * satellites in view (between satellites of one constellation) and, when
1347
+ * the fix passes the ratio, success-rate and χ² tests, condition the
1348
+ * float position on it ({@link fixPppPosition}). The float filter itself
1349
+ * is never constrained — a wrong fix can't contaminate later epochs, and
1350
+ * the next attempt starts clean. Between attempts the last fix carries
1351
+ * over (static) or is dropped (kinematic).
1352
+ */
1353
+ private tryFix;
1268
1354
  /** Finalise the session: capture the AR state, flush open arcs, assemble. */
1269
1355
  solution(): PppSolution;
1270
1356
  }
@@ -1371,6 +1457,18 @@ interface ArOptions {
1371
1457
  wlThreshold?: number;
1372
1458
  /** Min LAMBDA ratio to accept the narrow-lane fix. Default 3. */
1373
1459
  ratioThreshold?: number;
1460
+ /** Partial fixing: when the full set fails the ratio test, drop the
1461
+ * lowest-elevation satellite and retry while more than this many
1462
+ * between-satellite ambiguities remain. Default 4. */
1463
+ minPartial?: number;
1464
+ /** Min bootstrapped success rate (0–1) to accept a fix, besides the
1465
+ * ratio test. Default 0 (ratio test only). */
1466
+ minSuccessRate?: number;
1467
+ /** `fixPppPosition`: min between-satellite ambiguities to accept. Default 1. */
1468
+ minFixed?: number;
1469
+ /** `fixPppPosition`: max χ²/dof of the float ambiguities against the fixed
1470
+ * integers (a wrong fix sits many σ away). Default Infinity. */
1471
+ maxChi2?: number;
1374
1472
  }
1375
1473
  interface ArFixedSat {
1376
1474
  prn: string;
@@ -1378,15 +1476,22 @@ interface ArFixedSat {
1378
1476
  n1: number;
1379
1477
  /** Fixed IF ambiguity (m). */
1380
1478
  aIF: number;
1479
+ /** PRN of this satellite's single-difference reference (itself for a
1480
+ * reference satellite). */
1481
+ ref: string;
1381
1482
  }
1382
1483
  interface ArResult {
1383
1484
  /** Whether the narrow-lane fix passed the ratio test. */
1384
1485
  fixed: boolean;
1385
1486
  /** LAMBDA ratio statistic (second-best / best). */
1386
1487
  ratio: number;
1387
- /** Reference PRN whose absolute N1 stays float (SD datum). */
1488
+ /** Reference PRN of the first constellation (whose absolute N1 stays
1489
+ * float); see `refPrns` for all. */
1388
1490
  refPrn: string | null;
1389
- /** Fixed satellites (includes the reference with its float-rounded N1). */
1491
+ /** One reference per constellation — differences are taken within a
1492
+ * constellation, where the receiver phase bias is common. */
1493
+ refPrns: string[];
1494
+ /** Satellites in the fix (references included, with a float-rounded N1). */
1390
1495
  sats: ArFixedSat[];
1391
1496
  /** PRNs whose wide-lane did not round confidently (excluded). */
1392
1497
  rejectedWl: string[];
@@ -1397,6 +1502,11 @@ interface ArResult {
1397
1502
  * `sats`. Returns the fixed narrow-lane / wide-lane integers and the ratio
1398
1503
  * test result. A `fixed: false` result means the data did not support a
1399
1504
  * confident fix (keep the float solution).
1505
+ *
1506
+ * Everything is differenced between satellites of the same constellation
1507
+ * (one reference each, the highest), which removes the receiver's
1508
+ * wide-lane and narrow-lane phase biases — those differ per constellation
1509
+ * and per receiver, so an undifferenced ambiguity is never an integer.
1400
1510
  */
1401
1511
  declare function resolvePppAmbiguities(sats: ArSat[], Qaif: Float64Array, opts?: ArOptions): ArResult;
1402
1512
  interface FixedPositionResult {
@@ -1,12 +1,12 @@
1
- import { E as Ephemeris } from './nav-DImXUdbp.js';
1
+ import { E as Ephemeris } from './nav-COp0Vmlw.js';
2
2
  import { DopValues } from './orbit.js';
3
- import { I as IonexGrid, C as ClkFile, S as Sp3File } from './clk-DGVBGRzA.js';
3
+ import { I as IonexGrid, C as ClkFile, S as SatOsbTable, b as Sp3File } from './bias-sinex-OGMw9xEZ.js';
4
4
  import { AntexFile } from './antex.js';
5
5
  import { a as ObsEpoch } from './msm-CcQJV3PC.js';
6
6
  import { a as HasOrbitCorrection, b as HasClockCorrection } from './has-BaXnQarR.js';
7
7
  import './ephemeris-BAnBLLB9.js';
8
8
  import './ecef-CF0uAysr.js';
9
- import './nav-CN8rxL4h.js';
9
+ import './nav-D2DFlVpa.js';
10
10
 
11
11
  /**
12
12
  * Klobuchar broadcast ionospheric model (IS-GPS-200, 20.3.3.5.2.5).
@@ -690,6 +690,14 @@ interface LambdaResult {
690
690
  * typically cap it (RTKLIB uses 999.9) before thresholding.
691
691
  */
692
692
  ratio: number;
693
+ /**
694
+ * Bootstrapped success rate of the decorrelated ambiguities,
695
+ * Π (2Φ(1/(2σᵢ)) − 1) over the conditional standard deviations σᵢ —
696
+ * a lower bound on the probability that the integer solution is right
697
+ * (Teunissen 1998). Unlike the ratio, it depends only on the model's
698
+ * precision, so it refuses fixes the float solution can't yet support.
699
+ */
700
+ successRate: number;
693
701
  }
694
702
  /**
695
703
  * LAMBDA/MLAMBDA integer least-squares estimation (RTKLIB `lambda`):
@@ -1068,6 +1076,11 @@ interface PppSatObs {
1068
1076
  * up satellite code (OSB) biases from an SSR/HAS source; optional. */
1069
1077
  code1?: string;
1070
1078
  code2?: string;
1079
+ /** RINEX-3 tracking codes of the two *carriers* (e.g. '1C','2W'), for
1080
+ * satellite phase-bias (OSB) lookup when they differ from the code's
1081
+ * (GPS: C1W code with L1C phase). Default: `code1` / `code2`. */
1082
+ phase1?: string;
1083
+ phase2?: string;
1071
1084
  /** True if a cycle slip is flagged on either band (LLI or detected). */
1072
1085
  slip: boolean;
1073
1086
  }
@@ -1110,6 +1123,37 @@ interface PppOptions {
1110
1123
  * instead of the SP3 5-minute clocks — the dominant PPP accuracy term.
1111
1124
  * Satellites/epochs absent from the CLK fall back to the SP3 clock. */
1112
1125
  clk?: ClkFile;
1126
+ /** Satellite observable-specific biases (code + phase OSB) consistent with
1127
+ * the orbit/clock product — e.g. the CNES "ABS" biases that accompany GFZ
1128
+ * rapid products. With phase OSBs the float ambiguities keep their integer
1129
+ * nature (between satellites), which is what PPP-AR (`fixPppPosition`)
1130
+ * needs. Used with an Sp3File; a custom source supplies its own biases. */
1131
+ osb?: SatOsbTable;
1132
+ /**
1133
+ * Integer ambiguity resolution (PPP-AR). Needs satellite phase biases
1134
+ * (`osb`, or a source with `phaseBias`) — without them the ambiguities
1135
+ * aren't integers and this is ignored. Every `everyS` seconds the
1136
+ * converged ambiguities are resolved (wide-lane by rounding, narrow-lane
1137
+ * by LAMBDA, between satellites of a constellation) and, if the fix is
1138
+ * accepted, the epoch gets an ambiguity-fixed position next to the float
1139
+ * one. `true` uses the defaults.
1140
+ */
1141
+ ar?: boolean | {
1142
+ /** LAMBDA ratio test threshold. Default 3. */
1143
+ ratio?: number;
1144
+ /** Max wide-lane fractional part (cycles). Default 0.15. */
1145
+ wlThreshold?: number;
1146
+ /** Min arc age before an ambiguity is a candidate (s). Default 600. */
1147
+ minArcS?: number;
1148
+ /** Attempt interval (s). Default 120. */
1149
+ everyS?: number;
1150
+ /** Min bootstrapped success rate. Default 0.999. */
1151
+ successRate?: number;
1152
+ /** Min between-satellite ambiguities in a fix. Default 5. */
1153
+ minFixed?: number;
1154
+ /** Max χ²/dof of the float ambiguities vs the integers. Default 20. */
1155
+ maxChi2?: number;
1156
+ };
1113
1157
  }
1114
1158
  interface PppEpochResult {
1115
1159
  timeMs: number;
@@ -1125,6 +1169,10 @@ interface PppEpochResult {
1125
1169
  ztdHydrostatic: number;
1126
1170
  /** RMS of post-fit phase residuals this epoch (m). */
1127
1171
  phaseResRms: number;
1172
+ /** PPP-AR: between-satellite ambiguities fixed (0 = float only). */
1173
+ nFixed: number;
1174
+ /** PPP-AR: the ambiguity-fixed position, when the latest attempt fixed. */
1175
+ fixedPosition: [number, number, number] | null;
1128
1176
  }
1129
1177
  interface PppSolution {
1130
1178
  /** Final estimated ECEF position (m). */
@@ -1144,6 +1192,17 @@ interface PppSolution {
1144
1192
  convergenceSec: number | null;
1145
1193
  /** Final 3D error vs ground truth (m), if given. */
1146
1194
  finalError3d: number | null;
1195
+ /** PPP-AR summary, when `ar` was requested with a phase-bias product. */
1196
+ ar?: {
1197
+ /** Seconds from the first epoch to the first accepted fix (null: none). */
1198
+ firstFixSec: number | null;
1199
+ /** Ambiguities fixed at the end (0: the session ends float). */
1200
+ nFixedEnd: number;
1201
+ /** The ambiguity-fixed position at the end, or null. */
1202
+ position: [number, number, number] | null;
1203
+ /** Share of epochs with at least one ambiguity fixed. */
1204
+ fixedEpochShare: number;
1205
+ };
1147
1206
  /** Per-arc converged float ambiguities — one per continuous satellite
1148
1207
  * tracking arc — the raw material for ambiguity resolution (PPP-AR). */
1149
1208
  arcs: PppArc[];
@@ -1212,6 +1271,10 @@ interface PppEphemerisSource {
1212
1271
  * corrected code is `observed − codeBias`. SP3/CLK sources omit this (the
1213
1272
  * float ambiguity + broadcast clock reference absorb it). */
1214
1273
  codeBias?(prn: string, signalCode: string, tEmitMs: number): number | null;
1274
+ /** Optional satellite *phase* bias (m) for a carrier tracking code
1275
+ * ('1C','2W'…): the corrected carrier is `observed − phaseBias`. Only
1276
+ * integer-clock products (for PPP-AR) provide these. */
1277
+ phaseBias?(prn: string, signalCode: string, tEmitMs: number): number | null;
1215
1278
  }
1216
1279
  /** Default source: SP3 orbits + clocks, with optional high-rate CLK. Velocity
1217
1280
  * is a central finite difference (±0.5 s); the clock prefers the high-rate CLK
@@ -1219,7 +1282,10 @@ interface PppEphemerisSource {
1219
1282
  declare class Sp3EphemerisSource implements PppEphemerisSource {
1220
1283
  private readonly sp3;
1221
1284
  private readonly clk?;
1222
- constructor(sp3: Sp3File, clk?: ClkFile | undefined);
1285
+ private readonly osb?;
1286
+ constructor(sp3: Sp3File, clk?: ClkFile | undefined, osb?: SatOsbTable | undefined);
1287
+ codeBias?: PppEphemerisSource['codeBias'];
1288
+ phaseBias?: PppEphemerisSource['phaseBias'];
1223
1289
  satState(prn: string, tEmitMs: number): SatSample | null;
1224
1290
  }
1225
1291
  /**
@@ -1248,6 +1314,16 @@ declare class PppEngine {
1248
1314
  private arcs;
1249
1315
  private arcSnap;
1250
1316
  private mwState;
1317
+ /** Previous epoch's phase terms per satellite, for the time-differenced
1318
+ * (clock-free) cycle-slip test. */
1319
+ private tdPrev;
1320
+ /** Consecutive gated-out phase updates per satellite. */
1321
+ private phaseRejects;
1322
+ /** PPP-AR: the latest accepted fix (null: float). */
1323
+ private lastFix;
1324
+ private lastArMs;
1325
+ private firstFixMs;
1326
+ private fixedEpochs;
1251
1327
  private series;
1252
1328
  private ei;
1253
1329
  private t0;
@@ -1265,6 +1341,16 @@ declare class PppEngine {
1265
1341
  private clockOf;
1266
1342
  /** Process one epoch, carrying the filter forward; returns its result. */
1267
1343
  process(epoch: PppEpoch): PppEpochResult;
1344
+ /**
1345
+ * PPP-AR. Every `everyS`, resolve the converged ambiguities of the
1346
+ * satellites in view (between satellites of one constellation) and, when
1347
+ * the fix passes the ratio, success-rate and χ² tests, condition the
1348
+ * float position on it ({@link fixPppPosition}). The float filter itself
1349
+ * is never constrained — a wrong fix can't contaminate later epochs, and
1350
+ * the next attempt starts clean. Between attempts the last fix carries
1351
+ * over (static) or is dropped (kinematic).
1352
+ */
1353
+ private tryFix;
1268
1354
  /** Finalise the session: capture the AR state, flush open arcs, assemble. */
1269
1355
  solution(): PppSolution;
1270
1356
  }
@@ -1371,6 +1457,18 @@ interface ArOptions {
1371
1457
  wlThreshold?: number;
1372
1458
  /** Min LAMBDA ratio to accept the narrow-lane fix. Default 3. */
1373
1459
  ratioThreshold?: number;
1460
+ /** Partial fixing: when the full set fails the ratio test, drop the
1461
+ * lowest-elevation satellite and retry while more than this many
1462
+ * between-satellite ambiguities remain. Default 4. */
1463
+ minPartial?: number;
1464
+ /** Min bootstrapped success rate (0–1) to accept a fix, besides the
1465
+ * ratio test. Default 0 (ratio test only). */
1466
+ minSuccessRate?: number;
1467
+ /** `fixPppPosition`: min between-satellite ambiguities to accept. Default 1. */
1468
+ minFixed?: number;
1469
+ /** `fixPppPosition`: max χ²/dof of the float ambiguities against the fixed
1470
+ * integers (a wrong fix sits many σ away). Default Infinity. */
1471
+ maxChi2?: number;
1374
1472
  }
1375
1473
  interface ArFixedSat {
1376
1474
  prn: string;
@@ -1378,15 +1476,22 @@ interface ArFixedSat {
1378
1476
  n1: number;
1379
1477
  /** Fixed IF ambiguity (m). */
1380
1478
  aIF: number;
1479
+ /** PRN of this satellite's single-difference reference (itself for a
1480
+ * reference satellite). */
1481
+ ref: string;
1381
1482
  }
1382
1483
  interface ArResult {
1383
1484
  /** Whether the narrow-lane fix passed the ratio test. */
1384
1485
  fixed: boolean;
1385
1486
  /** LAMBDA ratio statistic (second-best / best). */
1386
1487
  ratio: number;
1387
- /** Reference PRN whose absolute N1 stays float (SD datum). */
1488
+ /** Reference PRN of the first constellation (whose absolute N1 stays
1489
+ * float); see `refPrns` for all. */
1388
1490
  refPrn: string | null;
1389
- /** Fixed satellites (includes the reference with its float-rounded N1). */
1491
+ /** One reference per constellation — differences are taken within a
1492
+ * constellation, where the receiver phase bias is common. */
1493
+ refPrns: string[];
1494
+ /** Satellites in the fix (references included, with a float-rounded N1). */
1390
1495
  sats: ArFixedSat[];
1391
1496
  /** PRNs whose wide-lane did not round confidently (excluded). */
1392
1497
  rejectedWl: string[];
@@ -1397,6 +1502,11 @@ interface ArResult {
1397
1502
  * `sats`. Returns the fixed narrow-lane / wide-lane integers and the ratio
1398
1503
  * test result. A `fixed: false` result means the data did not support a
1399
1504
  * confident fix (keep the float solution).
1505
+ *
1506
+ * Everything is differenced between satellites of the same constellation
1507
+ * (one reference each, the highest), which removes the receiver's
1508
+ * wide-lane and narrow-lane phase biases — those differ per constellation
1509
+ * and per receiver, so an undifferenced ambiguity is never an integer.
1400
1510
  */
1401
1511
  declare function resolvePppAmbiguities(sats: ArSat[], Qaif: Float64Array, opts?: ArOptions): ArResult;
1402
1512
  interface FixedPositionResult {
@@ -41,8 +41,8 @@ import {
41
41
  sunEcef,
42
42
  toRtkEpoch,
43
43
  wlWavelength
44
- } from "./chunk-K3GLUWZI.js";
45
- import "./chunk-WQX354KD.js";
44
+ } from "./chunk-RWFJEVLJ.js";
45
+ import "./chunk-H3AKFD25.js";
46
46
  import "./chunk-7T5DLVZL.js";
47
47
  import "./chunk-HVXYFUCB.js";
48
48
  import "./chunk-CVCTRIWU.js";
@@ -50,7 +50,7 @@ import "./chunk-37QNKGTC.js";
50
50
  import "./chunk-LEEU5OIO.js";
51
51
  import "./chunk-6FAL6P4G.js";
52
52
  import "./chunk-GPEP67TG.js";
53
- import "./chunk-YUW33VXK.js";
53
+ import "./chunk-HUXQABJI.js";
54
54
  import "./chunk-V2D5KUKH.js";
55
55
  import "./chunk-FIEWO4J4.js";
56
56
  export {