@neilberkman/sidereon 0.23.0 → 0.25.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.
package/README.md CHANGED
@@ -99,9 +99,45 @@ console.log(solution.rxClockS); // receiver clock bias, seconds
99
99
  ```
100
100
 
101
101
  `solveRtkFloat` / `solveRtkFixed` and `solvePppFloat` / `solvePppFixed` follow
102
- the same shape: an options object in, a result object with `Float64Array`
102
+ the same pattern: an options object in, a result object with `Float64Array`
103
103
  positions and scalar attributes out.
104
104
 
105
+ ## Example: post-solve integrity
106
+
107
+ Use `raim` on per-satellite post-fit residuals after a solve. The direct result
108
+ has `faultDetected`, `testStatistic`, `threshold`, `worstSat`,
109
+ `reducedChiSquare`, `normalizedResiduals`, `rmsM`, and `dof`. RAIM residual
110
+ tests must use per-satellite residual variances; unit weights on metre-scale
111
+ residuals make `faultDetected` saturate near 100%. The JS API takes
112
+ inverse-variance weights, so compute them from your variance model.
113
+
114
+ ```js
115
+ import { RaimWeights, raim } from "@neilberkman/sidereon";
116
+
117
+ const usedSats = ["G01", "G02", "G03", "G04", "G05", "G06"];
118
+ const residualsM = [0.2, -0.1, 0.3, 0.2, 9.0, -0.2];
119
+ const elevationDeg = [72, 42, 35, 64, 50, 28];
120
+ const sigma0M = 0.8;
121
+ const weights = Float64Array.from(
122
+ elevationDeg.map((el) => {
123
+ const sinEl = Math.max(Math.sin((el * Math.PI) / 180), 0.2);
124
+ const varianceM2 = (sigma0M / sinEl) ** 2;
125
+ return 1 / varianceM2;
126
+ }),
127
+ );
128
+ const integrity = raim(
129
+ { usedSats, residualsM },
130
+ { pFa: 1e-3, weights: RaimWeights.bySatellite(usedSats, weights) },
131
+ );
132
+
133
+ console.log(integrity.faultDetected, integrity.testStatistic, integrity.worstSat);
134
+ ```
135
+
136
+ Use `araim(geometry, ism, allocation)` for protection levels from line-of-sight
137
+ geometry and an integrity support message. `araimLpv200Allocation()` provides the
138
+ default LPV-200 budget. The direct result has `hplM`, `vplM`, `sigmaAccHM`, and
139
+ `sigmaAccVM`, plus the detailed monitor fields.
140
+
105
141
  ## Capabilities
106
142
 
107
143
  The wasm surface mirrors the full breadth of the engine:
@@ -115,21 +151,32 @@ The wasm surface mirrors the full breadth of the engine:
115
151
  batch least-squares orbit fitting against precise ephemerides (including
116
152
  terrestrial-frame SP3 through the Earth-orientation chain) with a
117
153
  per-satellite residual ledger.
118
- - **GNSS positioning:** SPP, RTK (float/fixed), PPP (float/fixed), DGNSS,
119
- moving-baseline RTK, DOP, velocity, and a robust SPP driver that runs fault
120
- detection and exclusion (RAIM/FDE) with iterative reweighting.
121
- - **Integrity and error bounds:** multi-constellation ARAIM protection levels,
154
+ - **GNSS positioning:** SPP, public `solveStatic` multi-epoch static
155
+ positioning with covariance, leave-one-out redundancy diagnostics, and
156
+ robust weighting, RINEX observation to SPP helpers
157
+ (`sppInputsFromRinexObs` and `solveSppFromRinexObs`), RTK (float/fixed,
158
+ sequential/static arcs, wide-lane fixed), PPP (float/fixed, including
159
+ SPP-seeded auto-init), static PPP temporal-correlation covariance with
160
+ calibrated day-length bounds, optional elevation cutoff, optional
161
+ tropospheric-gradient estimation, DGNSS, moving-baseline RTK, DOP, velocity,
162
+ RAIM over existing SPP solutions, broadcast-ephemeris FDE, and a
163
+ Huber-reweighted SPP driver that runs fault detection and exclusion
164
+ (RAIM/FDE) with iterative reweighting.
165
+ - **Integrity and error bounds:** direct post-solve RAIM fault detection,
166
+ multi-constellation ARAIM protection levels,
122
167
  SBAS protection levels (DO-229), per-observation reliability (minimal
123
168
  detectable bias, internal/external), observability classification of every
124
169
  solution (rank, redundancy, conditioning), and covariance-derived error
125
170
  metrics (CEP, R95, SEP, error ellipse) that report wide or flagged bounds
126
171
  for weak geometry rather than fabricated confidence.
127
172
  - **GNSS corrections and biases:** SBAS message decoding with SBAS-corrected
128
- solves, RTCM SSR orbit and clock correction streams, Bias-SINEX code and
129
- phase biases (DCB/OSB).
173
+ solves, RTCM SSR orbit and clock correction streams, RTCM 3 broadcast
174
+ ephemeris decode for GPS (1019), GLONASS (1020), Galileo (1045/1046),
175
+ BeiDou (1042), and QZSS (1044), each real-data validated, Bias-SINEX code
176
+ and phase biases (DCB/OSB).
130
177
  - **Timing, estimation, and geodesy:** Allan-family clock stability with
131
178
  power-law noise identification (IEEE 1139), scalar Kalman and alpha-beta
132
- trackers, CFAR detection thresholds, source localization (ToA/TDOA), robust
179
+ trackers, CFAR detection thresholds, source localization (ToA/TDOA),
133
180
  station velocity (MIDAS) with trajectory fitting and step detection,
134
181
  repeating-geometry (sidereal) filtering, geodesic direct and inverse
135
182
  problems (Karney), an epoch-aware terrestrial frame catalog (ITRF/ETRF
@@ -154,11 +201,12 @@ The wasm surface mirrors the full breadth of the engine:
154
201
  conjunctions and oppositions, Sun/Moon/planet meridian transits.
155
202
  - **Atmosphere and Earth models:** Klobuchar and NeQuick-G ionosphere, IONEX
156
203
  slant delay, troposphere models, geoid undulation (EGM96), solid Earth and
157
- pole tides, ocean tide loading, DTED terrain elevation lookup.
204
+ pole tides, ocean tide loading, DTED terrain elevation lookup with batch
205
+ queries, and memory-mappable terrain stores.
158
206
  - **RF link budget:** free-space path loss, EIRP, C/N0, antenna gain, Doppler
159
207
  shift and range rate.
160
208
  - **GNSS/INS fusion:** strapdown mechanization with an error-state EKF (UKF
161
- option), loose and tight coupling, robust loose updates, an RTS smoother,
209
+ option), loose and tight coupling, IGG-III loose updates, an RTS smoother,
162
210
  a serializable filter state, and field mode (zero-velocity and
163
211
  zero-angular-rate updates, non-holonomic constraints, per-fix-status
164
212
  weighting, IMU-to-body mounting matrix), all off by default.
@@ -169,7 +217,7 @@ The wasm surface mirrors the full breadth of the engine:
169
217
  same scenario and seed.
170
218
  - **Signal analysis:** closed-form BPSK/BOC spectra, spectral separation
171
219
  coefficients, DLL jitter, and multipath error envelopes against published
172
- constants.
220
+ constants, plus GPS C/A correlation helpers.
173
221
  - **Format parsing and serialization:** TLE/OMM, CCSDS (OEM/OPM/CDM/TDM),
174
222
  RINEX observation/navigation/clock, CRINEX (Hatanaka), SP3, IONEX, ANTEX,
175
223
  Bias-SINEX, RTCM.
@@ -179,9 +227,10 @@ computes. Failures surface as the JS exception you would expect (`Error` for
179
227
  engine rejections such as parse failures, non-converging solves, and SGP4 error
180
228
  codes; `TypeError` for malformed input; `RangeError` for out-of-domain numbers).
181
229
  Full signatures live in the bundled TypeScript declarations (`sidereon.d.ts`),
182
- with the plain-object request shapes in `@neilberkman/sidereon/types`.
230
+ with the plain-object request types in `@neilberkman/sidereon/types`, including
231
+ typed ARAIM, RTK/PPP, fusion, signal-analysis, and terrain protocols.
183
232
 
184
- A few conventions worth knowing: positions and state arrays cross as
233
+ A few conventions to know: positions and state arrays cross as
185
234
  `Float64Array` (multi-epoch arrays are flat row-major, `3 * epochCount`); SGP4
186
235
  epoch grids are `BigInt64Array` of unix microseconds; SP3 query epochs are plain
187
236
  numbers in seconds since J2000.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neilberkman/sidereon",
3
- "version": "0.23.0",
3
+ "version": "0.25.0",
4
4
  "description": "WebAssembly / JavaScript interface over the sidereon GNSS + astrodynamics engine: SP3 loading and multi-product merge, SPP / RTK (float + fixed) / PPP (float + fixed) positioning, IONEX slant delay, SGP4 and numerical orbit propagation, RINEX observation/navigation/clock parsing, CRINEX (Hatanaka) decoding, observable-domain math (carrier combinations, cycle slips, Hatch smoothing, weighting, velocity, GPS C/A signal), and the astro domain (scale-tagged time, frame transforms, Sun/Moon ephemerides, eclipse / body angles, DOP, passes / visibility, conjunction + collision probability, CDM / OMM / ANTEX parsing, RF link budget)",
5
5
  "type": "module",
6
6
  "license": "MIT",