kshana 0.7.0 → 0.8.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 +66 -32
- package/kshana_bg.wasm +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
</h1>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
+
<a href="https://ashfordeou.github.io/kshana/"><img src="https://img.shields.io/badge/playground-try%20in%20browser-2dd4bf" alt="Live playground — run in your browser, no install"></a>
|
|
7
|
+
<a href="tests/sgp4_verification.rs"><img src="https://img.shields.io/badge/SGP4-666%2F666%20AIAA%20vectors%20%C2%B7%204.12mm-3fb950" alt="SGP4 validated against all 666 AIAA 2006-6753 vectors, worst 4.12 mm"></a>
|
|
6
8
|
<a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
7
9
|
<a href="https://github.com/ashfordeOU/kshana/releases"><img src="https://img.shields.io/github/v/release/ashfordeOU/kshana?sort=semver" alt="Release"></a>
|
|
8
10
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache-2.0"></a>
|
|
@@ -11,7 +13,10 @@
|
|
|
11
13
|
|
|
12
14
|
<p align="center">
|
|
13
15
|
<strong>Kshana</strong> (क्षण, Sanskrit: <em>"the precise instant"</em>) is an open, reproducible
|
|
14
|
-
|
|
16
|
+
<strong>PNT-resilience simulator with quantum-sensor performance models</strong> —
|
|
17
|
+
positioning, navigation, and timing. It compares quantum and classical sensors using
|
|
18
|
+
published Allan/noise-budget coefficients; it is not a first-principles quantum-physics
|
|
19
|
+
simulator (see <a href="docs/QUANTUM-MODELS.md">docs/QUANTUM-MODELS.md</a>).
|
|
15
20
|
</p>
|
|
16
21
|
|
|
17
22
|
It quantifies, in hard and reproducible numbers, what quantum clocks, quantum
|
|
@@ -23,20 +28,26 @@ and every sensor parameter is traceable to a published source.
|
|
|
23
28
|
*Free and open source under Apache-2.0, professionally developed and maintained by
|
|
24
29
|
Ashforde OÜ — commercial support, integration, and proprietary extensions available.*
|
|
25
30
|
|
|
26
|
-
> **Status:
|
|
27
|
-
> operational figures of merit (including a clock-
|
|
28
|
-
>
|
|
29
|
-
>
|
|
30
|
-
>
|
|
31
|
-
>
|
|
32
|
-
>
|
|
33
|
-
>
|
|
34
|
-
>
|
|
35
|
-
>
|
|
36
|
-
>
|
|
31
|
+
> **Status: v0.8.0 — a simulation substrate, not yet a product.** Four sensor packs
|
|
32
|
+
> that each report all six operational figures of merit (including a clock-stability-based
|
|
33
|
+
> spoof-*detectability* bound — analytic, meaningful only with a configured attack —
|
|
34
|
+
> demonstrated by an active spoofing-attack scenario), two independent Kalman error
|
|
35
|
+
> budgets (clock and position) reported as a combined FoM, and a filter
|
|
36
|
+
> self-consistency bound, multi-constellation geometry-derived GNSS availability *and*
|
|
37
|
+
> dilution of precision from orbits — synthetic Walker, Keplerian mean elements, or
|
|
38
|
+
> full two-line element sets propagated with **SGP4/SDP4** (validated against the AIAA
|
|
39
|
+
> 2006-6753 vectors) — a single-axis (1-DOF) IMU error budget (velocity/angle random
|
|
40
|
+
> walk and bias-instability), Monte Carlo confidence bands, trade-study parameter
|
|
41
|
+
> sweeps, and a shareable HTML scorecard — all calibrated to published data and
|
|
42
|
+
> validated against the standard relations, with optional Python and WebAssembly
|
|
43
|
+
> bindings and a browser playground. Read [`docs/VALIDATION.md`](docs/VALIDATION.md)
|
|
37
44
|
> before citing any number — each noise term is labelled `validated` or `not modeled`,
|
|
38
45
|
> and optical-clock figures are *space goals on ground hardware* (no strontium optical
|
|
39
|
-
> clock has flown).
|
|
46
|
+
> clock has flown). What it is **not**: a 3-axis IMU triad, a coupled GNSS/INS filter, a
|
|
47
|
+
> first-principles quantum simulator, or aviation-grade RAIM/HPL/VPL integrity. The full
|
|
48
|
+
> honest scope map is in [`docs/CAPABILITY.md`](docs/CAPABILITY.md); see also
|
|
49
|
+
> [`docs/INTEGRITY.md`](docs/INTEGRITY.md) and the claims table in
|
|
50
|
+
> [`docs/VALIDATION.md`](docs/VALIDATION.md).
|
|
40
51
|
|
|
41
52
|
> **Try it in your browser:** the [playground](web/) runs the engine client-side as
|
|
42
53
|
> WebAssembly — pick a scenario, edit the parameters, and see the result, with nothing
|
|
@@ -163,6 +174,13 @@ spoof-detection margin (`security 0.000`). The orbit scenario additionally repor
|
|
|
163
174
|
geometry block — fraction of samples with a fix, and best/median PDOP and position
|
|
164
175
|
accuracy — alongside the clock result.
|
|
165
176
|
|
|
177
|
+
> **Read these two numbers carefully.** `security` is an *analytic spoof-detectability
|
|
178
|
+
> bound* derived from each clock's stability — it is meaningful only against a
|
|
179
|
+
> configured spoofing scenario and is **not** a multi-satellite RAIM detector. `integrity`
|
|
180
|
+
> is the filter's *self-consistency* (fraction of outage samples inside its own k-sigma
|
|
181
|
+
> bound), **not** an aviation HPL/VPL integrity figure. See
|
|
182
|
+
> [`docs/INTEGRITY.md`](docs/INTEGRITY.md).
|
|
183
|
+
|
|
166
184
|
### Python
|
|
167
185
|
|
|
168
186
|
An optional Python extension (PyO3, abi3) wraps the same engine. Build and install
|
|
@@ -240,15 +258,19 @@ drift = 0.0
|
|
|
240
258
|
Optional fields (off when absent): a clock may add `flicker_floor` (1/f FM Allan
|
|
241
259
|
floor); an inertial sensor may add `gyro_bias` and `q_arw` (gyro bias and angular
|
|
242
260
|
random walk), and `bias_instability` and `q_aa` (the Allan bias-instability floor and
|
|
243
|
-
acceleration random walk)
|
|
261
|
+
acceleration random walk) — together a **single-axis (1-DOF) accelerometer error
|
|
262
|
+
budget** (VRW/ARW and bias-instability), *not* a 3-axis IMU triad: scale-factor,
|
|
263
|
+
misalignment, g-sensitivity, and cross-axis coupling are not modelled. A
|
|
244
264
|
clock-holdover scenario may add `runs` (> 1) to run a **Monte Carlo ensemble** — each
|
|
245
265
|
figure of merit is then reported as a mean with a 5th–95th-percentile spread and the
|
|
246
266
|
chart shades the error confidence band (see `scenarios/clock-ensemble.toml`).
|
|
247
267
|
|
|
248
|
-
A `fusion` scenario (same blocks as `hybrid`) runs
|
|
249
|
-
|
|
250
|
-
optical time transfer
|
|
251
|
-
|
|
268
|
+
A `fusion` scenario (same blocks as `hybrid`) runs **two independent Kalman estimators**
|
|
269
|
+
— one for the clock state, one for the position state — disciplined by GNSS and aided by
|
|
270
|
+
optical time transfer, and reports a combined holdover FoM. The two blocks share no
|
|
271
|
+
cross-covariance: this is a stacked pair of error budgets, **not** a true coupled
|
|
272
|
+
clock+position joint filter (cross-block covariance is a roadmap item). See
|
|
273
|
+
`scenarios/fusion-pnt.toml`.
|
|
252
274
|
|
|
253
275
|
A `spoof` scenario injects a ramping false-time spoof (an `[attack]` block with
|
|
254
276
|
`start_s` and `rate_ns_per_s`) and runs each clock's integrity monitor, reporting
|
|
@@ -300,18 +322,24 @@ See `scenarios/` for one example of every kind.
|
|
|
300
322
|
## Output
|
|
301
323
|
|
|
302
324
|
The result artifact is versioned, self-describing JSON: per-step time series, the
|
|
303
|
-
scored figures of merit, the active model specs (with provenance), the seed,
|
|
304
|
-
**scenario hash** — so any chart can be reproduced from the file
|
|
325
|
+
scored figures of merit, the active model specs (with provenance), the seed, a
|
|
326
|
+
**scenario hash** — so any chart can be reproduced from the file — and, for each clock,
|
|
327
|
+
an `adev_curve` (`[{tau_s, adev, n_samples}]`): the overlapping Allan deviation across
|
|
328
|
+
octave-spaced averaging times, the standard way to read a clock's stability. The
|
|
329
|
+
browser playground renders it as a log-log "Clock stability (ADEV)" chart. (MDEV/TDEV/HDEV
|
|
330
|
+
and confidence intervals are not yet computed — roadmap.) Every field, with units and a
|
|
331
|
+
source pointer, is documented in [`docs/SCHEMA.md`](docs/SCHEMA.md). The figures of
|
|
305
332
|
merit follow the standard operational PNT figures of merit:
|
|
306
333
|
|
|
307
334
|
| Figure of merit | How Kshana computes it |
|
|
308
335
|
|-----------------|------------------------|
|
|
309
|
-
|
|
|
310
|
-
|
|
|
336
|
+
| Timing Performance (clock/orbit packs) | clock-phase error RMS + 95th-percentile over the outage, in **nanoseconds** (`timing_rms_ns`) — a timing metric, not position |
|
|
337
|
+
| Positioning Performance (inertial/hybrid packs) | 1-DOF position-error RMS + 95th-percentile over the outage, in **metres** (`pos_rms_m`); single-axis. A single run is flagged `monte_carlo: false`; set `runs = N` for a Monte Carlo ensemble that reports each metric's mean, spread, and bootstrap 95% CI. Still **not** a 2-D CEP/2DRMS or DOP-weighted accuracy (those need the 3-axis model — roadmap) |
|
|
338
|
+
| Autonomy | holdover duration — time in-spec after GNSS loss (grid-quantised: a lower bound) |
|
|
311
339
|
| Resilience | error-growth slope during the outage |
|
|
312
340
|
| Availability | fraction of the run with an in-spec solution |
|
|
313
|
-
| Integrity |
|
|
314
|
-
| Security |
|
|
341
|
+
| Integrity | filter **self-consistency** — fraction of outage samples whose error stays inside the Kalman filter's own k-sigma bound. **Not** an aviation HPL/VPL/RAIM integrity figure (see [`docs/INTEGRITY.md`](docs/INTEGRITY.md)) |
|
|
342
|
+
| Security | **analytic spoof-*detectability* bound** from clock stability — how small/slow a time-spoof a single-clock consistency monitor could flag. Meaningful only with a configured attack; **not** a multi-satellite RAIM detector |
|
|
315
343
|
|
|
316
344
|
New to these terms? Each is defined in plain language in the [glossary](docs/GLOSSARY.md).
|
|
317
345
|
|
|
@@ -343,7 +371,7 @@ flowchart TD
|
|
|
343
371
|
models["models — ClockModel (+ flicker)"]
|
|
344
372
|
estimator["estimator — holdover"]
|
|
345
373
|
kalman["kalman — Integrity bound"]
|
|
346
|
-
security["security — spoof-
|
|
374
|
+
security["security — analytic spoof-detectability bound"]
|
|
347
375
|
fom["fom · report · run"]
|
|
348
376
|
end
|
|
349
377
|
p2["Pack 2 · inertial — accel + gyro"]
|
|
@@ -403,6 +431,9 @@ kshana/
|
|
|
403
431
|
| [Glossary](docs/GLOSSARY.md) | everyone | plain-language definitions of every term |
|
|
404
432
|
| [Architecture](docs/ARCHITECTURE.md) | developers / reviewers | module map, engine pipeline, dispatch, and diagrams |
|
|
405
433
|
| [Validation status](docs/VALIDATION.md) | reviewers / citers | what is `validated` vs `not modeled`, with evidence |
|
|
434
|
+
| [Reproducibility & provenance](docs/REPRODUCIBILITY.md) | reviewers / packagers | determinism guarantees, golden-pinning, SBOM, build provenance |
|
|
435
|
+
| [Positioning](docs/POSITIONING.md) | evaluators | where Kshana sits vs RTKLIB/gLAB (complementary), and the zero-install browser tier |
|
|
436
|
+
| [SGP4 validation](docs/SGP4-VALIDATION.md) | reviewers / citers | agreement with the AIAA 2006-6753 reference (666 states, ~4 mm) |
|
|
406
437
|
| [Changelog](CHANGELOG.md) | everyone | released history (Keep a Changelog + SemVer) |
|
|
407
438
|
| [Contributing](CONTRIBUTING.md) | contributors | build, guards, test/citation discipline, DCO |
|
|
408
439
|
| [Code of Conduct](CODE_OF_CONDUCT.md) | community | expected conduct (Contributor Covenant) |
|
|
@@ -476,12 +507,15 @@ CPython versions).
|
|
|
476
507
|
## Roadmap
|
|
477
508
|
|
|
478
509
|
See [`CHANGELOG.md`](CHANGELOG.md) for released history and the `[Unreleased]`
|
|
479
|
-
section for what's next (
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
510
|
+
section for what's next (Earth-fixed frame reduction — TEME→ECEF/ITRF — and
|
|
511
|
+
explicit time systems: UTC/UT1/TAI/TT with leap seconds). SGP4/SDP4 orbit
|
|
512
|
+
propagation has **shipped** (v0.7.0, validated against the AIAA 2006-6753 vectors),
|
|
513
|
+
and its inertial velocity is now exposed downstream. An active
|
|
514
|
+
spoofing-attack demonstrator, multi-constellation availability, a single-axis (1-DOF)
|
|
515
|
+
IMU error budget, two independent (clock + position) Kalman estimators reported as a
|
|
516
|
+
combined FoM, real constellation geometry from TLEs, an HTML scorecard report, a
|
|
517
|
+
clock-stability-based spoof-detectability bound, geometry-derived GNSS availability
|
|
518
|
+
*and* dilution of precision from Keplerian orbits with eccentricity and J2 drift,
|
|
485
519
|
Monte Carlo confidence bands, trade-study parameter sweeps, an in-browser WebAssembly
|
|
486
520
|
playground, and optional Python (PyO3) and WebAssembly (wasm-bindgen) bindings have
|
|
487
521
|
landed on `main`.
|
|
@@ -498,7 +532,7 @@ entry for every user-visible change. Participation is governed by our
|
|
|
498
532
|
|
|
499
533
|
If you use Kshana in academic or technical work, please cite it. Machine-readable
|
|
500
534
|
metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
|
|
501
|
-
button from it); cite the version you used (e.g. `v0.
|
|
535
|
+
button from it); cite the version you used (e.g. `v0.7.0`).
|
|
502
536
|
|
|
503
537
|
## License
|
|
504
538
|
|
package/kshana_bg.wasm
CHANGED
|
Binary file
|