kshana 0.8.0 → 0.9.1
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 +80 -36
- package/kshana_bg.wasm +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
<
|
|
2
|
-
<img src="docs/assets/kshana-
|
|
3
|
-
</
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/kshana-mark.svg" alt="Kshana mark — a precision reticle hung from the Devanagari shirorekha" width="96" height="96">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Kshana</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>क्षण</strong> — Sanskrit for <em>the precise instant</em>, the smallest measure of time.<br>
|
|
9
|
+
Open, reproducible hybrid quantum / classical PNT performance simulation.
|
|
10
|
+
</p>
|
|
4
11
|
|
|
5
12
|
<p align="center">
|
|
6
13
|
<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>
|
|
@@ -28,26 +35,14 @@ and every sensor parameter is traceable to a published source.
|
|
|
28
35
|
*Free and open source under Apache-2.0, professionally developed and maintained by
|
|
29
36
|
Ashforde OÜ — commercial support, integration, and proprietary extensions available.*
|
|
30
37
|
|
|
31
|
-
> **Status: v0.
|
|
32
|
-
>
|
|
33
|
-
>
|
|
34
|
-
>
|
|
35
|
-
>
|
|
36
|
-
>
|
|
37
|
-
>
|
|
38
|
-
>
|
|
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)
|
|
44
|
-
> before citing any number — each noise term is labelled `validated` or `not modeled`,
|
|
45
|
-
> and optical-clock figures are *space goals on ground hardware* (no strontium optical
|
|
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).
|
|
38
|
+
> **Status: v0.9.1 · a simulation substrate, not yet a product.** A validated,
|
|
39
|
+
> fully reproducible engine spanning the PNT stack — orbit geometry, inertial
|
|
40
|
+
> navigation, GNSS/INS fusion, integrity, clocks, and timing. Honest by design:
|
|
41
|
+
> every figure of merit is labelled *validated* or *not-modeled*, and optical-clock
|
|
42
|
+
> figures are space goals on ground hardware (no strontium optical clock has flown).
|
|
43
|
+
> See **[Capabilities](#capabilities)** for what it does, **[What it is / is not](#what-it-is--is-not)**
|
|
44
|
+
> for scope, and [`docs/CAPABILITY.md`](docs/CAPABILITY.md) / [`docs/VALIDATION.md`](docs/VALIDATION.md)
|
|
45
|
+
> for per-capability maturity and the claims table.
|
|
51
46
|
|
|
52
47
|
> **Try it in your browser:** the [playground](web/) runs the engine client-side as
|
|
53
48
|
> WebAssembly — pick a scenario, edit the parameters, and see the result, with nothing
|
|
@@ -66,12 +61,12 @@ Ashforde OÜ — commercial support, integration, and proprietary extensions ava
|
|
|
66
61
|
|
|
67
62
|
## Contents
|
|
68
63
|
|
|
69
|
-
- [Why](#why) · [What it is / is not](#what-it-is--is-not) · [Results](#results)
|
|
64
|
+
- [Why](#why) · [What it is / is not](#what-it-is--is-not) · [Capabilities](#capabilities) · [Results](#results)
|
|
70
65
|
- [Install & build](#install--build) · [Usage](#usage) ([Python](#python), [WebAssembly](#webassembly))
|
|
71
66
|
- [Scenario format](#scenario-format) · [Output](#output) · [Architecture](#architecture)
|
|
72
67
|
- [Repository layout](#repository-layout) · [Validation & honesty](#validation-reproducibility--honesty)
|
|
73
68
|
- [Documentation](#documentation) · [FAQ](#faq) · [Troubleshooting](#troubleshooting)
|
|
74
|
-
- [Roadmap](#roadmap) · [Contributing](#contributing) · [Citing](#citing) · [License](#license)
|
|
69
|
+
- [Roadmap](#roadmap) · [Contributing](#contributing) · [Citing](#citing) · [Versioning & releases](#versioning--releases) · [License](#license)
|
|
75
70
|
- [Support & professional services](#support--professional-services) · [References](#key-references)
|
|
76
71
|
|
|
77
72
|
## Why
|
|
@@ -89,13 +84,33 @@ noise realizations.
|
|
|
89
84
|
|
|
90
85
|
## What it is / is not
|
|
91
86
|
|
|
92
|
-
**It is:** a deterministic engine
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
87
|
+
**It is:** a deterministic, dependency-light engine spanning the PNT stack — orbit
|
|
88
|
+
geometry, inertial navigation, GNSS/INS fusion, integrity, clocks, and timing. It
|
|
89
|
+
runs a scenario (often a GNSS outage), evolves calibrated sensor error models
|
|
90
|
+
through the appropriate estimator, and scores the result against the operational
|
|
91
|
+
figures of merit — emitting a reproducible JSON result and an SVG chart, from a
|
|
92
|
+
Rust library, CLI, Python extension, or in-browser WebAssembly module.
|
|
93
|
+
|
|
94
|
+
**It is not:** flight hardware, a quantum-payload design, a full GNSS signal
|
|
95
|
+
receiver, or a certified avionics product. Quantum-hardware fidelity comes from
|
|
96
|
+
published error models, not from this tool. The granular maturity of each
|
|
97
|
+
capability is documented in [`docs/CAPABILITY.md`](docs/CAPABILITY.md).
|
|
98
|
+
|
|
99
|
+
## Capabilities
|
|
100
|
+
|
|
101
|
+
| Domain | Capability |
|
|
102
|
+
|--------|------------|
|
|
103
|
+
| **Orbit & geometry** | SGP4/SDP4 propagation (validated to 4.12 mm against all 666 AIAA 2006-6753 vectors), real-TLE or synthetic Walker constellations, multi-constellation visibility, dilution of precision, and GNSS availability. |
|
|
104
|
+
| **Inertial** | Three-axis strapdown INS — quaternion attitude, WGS-84 NED mechanization, coning/sculling compensation, and a deterministic IMU error model (scale-factor, misalignment, g-sensitivity, quantization, drift). |
|
|
105
|
+
| **Fusion** | Loosely-coupled GNSS/INS error-state EKF (15-state) with closed-loop feedback that coasts through GNSS outages on a calibrated inertial solution. |
|
|
106
|
+
| **Integrity** | Snapshot and solution-separation (ARAIM-style) RAIM with horizontal/vertical protection levels (HPL/VPL), fault detection and identification, and Stanford integrity diagrams. |
|
|
107
|
+
| **Clock & timing** | Two-state Kalman holdover, Allan-family stability (ADEV/MDEV/TDEV/HDEV) with confidence intervals, and optical/RF two-way time transfer. |
|
|
108
|
+
| **Interoperability** | RINEX-3 GPS broadcast-ephemeris ingestion with IS-GPS-200 satellite position and clock evaluation. |
|
|
109
|
+
| **Resilience** | Clock-aided spoof-detectability analysis against a configurable time-spoof attack. |
|
|
110
|
+
|
|
111
|
+
Each capability is reachable as a Rust API, a runnable scenario `kind`, or both.
|
|
112
|
+
Maturity per capability — *validated*, *runnable*, or *library* — is tracked in
|
|
113
|
+
[`docs/CAPABILITY.md`](docs/CAPABILITY.md).
|
|
99
114
|
|
|
100
115
|
## Results
|
|
101
116
|
|
|
@@ -159,6 +174,7 @@ cargo run -- scenarios/timetransfer.toml
|
|
|
159
174
|
cargo run -- scenarios/hybrid-pnt.toml
|
|
160
175
|
cargo run -- scenarios/orbit-gnss-challenged.toml
|
|
161
176
|
cargo run -- scenarios/orbit-sgp4-gps.toml
|
|
177
|
+
cargo run -- scenarios/integrity-raim.toml
|
|
162
178
|
```
|
|
163
179
|
|
|
164
180
|
Example output (clock holdover — note the Integrity and Security figures of merit):
|
|
@@ -177,9 +193,16 @@ accuracy — alongside the clock result.
|
|
|
177
193
|
> **Read these two numbers carefully.** `security` is an *analytic spoof-detectability
|
|
178
194
|
> bound* derived from each clock's stability — it is meaningful only against a
|
|
179
195
|
> 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
|
|
196
|
+
> here is the filter's *self-consistency* (fraction of outage samples inside its own k-sigma
|
|
181
197
|
> bound), **not** an aviation HPL/VPL integrity figure. See
|
|
182
198
|
> [`docs/INTEGRITY.md`](docs/INTEGRITY.md).
|
|
199
|
+
>
|
|
200
|
+
> For genuine receiver-autonomous integrity, the **`integrity` scenario kind**
|
|
201
|
+
> (`scenarios/integrity-raim.toml`) runs real snapshot and solution-separation
|
|
202
|
+
> (ARAIM-style) RAIM over the propagated constellation geometry: it computes
|
|
203
|
+
> horizontal/vertical **protection levels (HPL/VPL)** per epoch and reports the
|
|
204
|
+
> fraction of epochs that meet the configured alert limits, with a Stanford
|
|
205
|
+
> integrity diagram for error-vs-PL classification.
|
|
183
206
|
|
|
184
207
|
### Python
|
|
185
208
|
|
|
@@ -259,8 +282,16 @@ Optional fields (off when absent): a clock may add `flicker_floor` (1/f FM Allan
|
|
|
259
282
|
floor); an inertial sensor may add `gyro_bias` and `q_arw` (gyro bias and angular
|
|
260
283
|
random walk), and `bias_instability` and `q_aa` (the Allan bias-instability floor and
|
|
261
284
|
acceleration random walk) — together a **single-axis (1-DOF) accelerometer error
|
|
262
|
-
budget** (VRW/ARW and bias-instability)
|
|
263
|
-
|
|
285
|
+
budget** (VRW/ARW and bias-instability). This is the error budget the shipped
|
|
286
|
+
`inertial` scenario *pack* runs. Separately, the library now carries a verified
|
|
287
|
+
**3-axis strapdown navigator** (`src/inertial/{attitude,mechanization,imu_errors}.rs`):
|
|
288
|
+
quaternion attitude with coning/sculling compensation, a full NED mechanization
|
|
289
|
+
(Earth-rate and transport-rate terms, WGS-84 Somigliana gravity), and a
|
|
290
|
+
deterministic IMU error model in which **scale-factor, misalignment,
|
|
291
|
+
g-sensitivity, quantization, and rate-ramp are modelled** (IEEE Std 952-1997
|
|
292
|
+
§A.2; Groves 2013 §4.3). That 3-axis path is **not yet wired into the scenario
|
|
293
|
+
pack/FoM** — switching the pack over, with a loosely-coupled GNSS/INS filter, is
|
|
294
|
+
the next inertial milestone. A
|
|
264
295
|
clock-holdover scenario may add `runs` (> 1) to run a **Monte Carlo ensemble** — each
|
|
265
296
|
figure of merit is then reported as a mean with a 5th–95th-percentile spread and the
|
|
266
297
|
chart shades the error confidence band (see `scenarios/clock-ensemble.toml`).
|
|
@@ -532,7 +563,20 @@ entry for every user-visible change. Participation is governed by our
|
|
|
532
563
|
|
|
533
564
|
If you use Kshana in academic or technical work, please cite it. Machine-readable
|
|
534
565
|
metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
|
|
535
|
-
button from it); cite the version you used (e.g. `v0.
|
|
566
|
+
button from it); cite the version you used (e.g. `v0.9.1`) together with the
|
|
567
|
+
scenario and seed for full reproducibility. An archival DOI (Zenodo) is planned.
|
|
568
|
+
|
|
569
|
+
> Baweja, C. (2026). *Kshana — hybrid quantum/classical PNT performance simulator*. Ashforde OÜ. https://github.com/AshfordeOU/kshana
|
|
570
|
+
|
|
571
|
+
## Versioning & releases
|
|
572
|
+
|
|
573
|
+
Kshana follows [Semantic Versioning](https://semver.org). While pre-1.0 the public
|
|
574
|
+
scenario/result schema may still change; breaking changes are called out explicitly
|
|
575
|
+
in the [`CHANGELOG.md`](CHANGELOG.md). Tagged releases are published to
|
|
576
|
+
[crates.io](https://crates.io/crates/kshana), [PyPI](https://pypi.org/project/kshana/),
|
|
577
|
+
and [npm](https://www.npmjs.com/package/kshana), and listed under
|
|
578
|
+
[GitHub Releases](https://github.com/AshfordeOU/kshana/releases). Every result is
|
|
579
|
+
reproducible from `scenario + seed + engine version`.
|
|
536
580
|
|
|
537
581
|
## License
|
|
538
582
|
|
package/kshana_bg.wasm
CHANGED
|
Binary file
|