Traduction automatique, non relue par un locuteur natif. L'anglais fait foi.

Premiers pasModifier sur GitHubSource : README.md

Kshana : la marque, un réticule de boussole marquant l'instant précis, à côté du logotype kshanaKshana : la marque, un réticule de boussole marquant l'instant précis, à côté du logotype kshana

Kshana · क्षण · l'instant précis
Un simulateur open source pour la résilience PNT (positionnement, navigation et synchronisation temporelle).

État de l'intégration continue sur main Couverture de lignes proche de 95 % de src/, mesurée dans docs/COVERAGE.md et contrôlée à 85 % en intégration continue 176 capacités sur 401 VALIDATED par rapport à une référence externe indépendante, d'après la matrice de vérification État du contrôle qualité SonarQube Cloud Version v0.40.0 Licence : AGPL-3.0-only
DOI 10.5281/zenodo.20528627, l'enregistrement conceptuel Zenodo de chaque version Une licence commerciale est disponible auprès d'Ashforde® OÜ, voir Éditions kshana sur crates.io, la version publiée actuelle kshana sur PyPI, la version publiée actuelle kshana sur npm, la version publiée actuelle

Ouvrir Kshana Studio · Installer · Capacités · Preuves · Recherche · Documentation · Citer

Répétez la minute où le GNSS s'éteint. La console de mission de Kshana, tracée à partir d'une exécution réelle du moteur v0.40.0 : la campagne enchaînée campaign-jam-spoof-holdover-integrity (graine 20260928, 6 phases, 18 exécutions membres sur T+01:16:10) et les 102 satellites de GPS, Galileo, BeiDou et GLONASS de constellation-multi-gnss-coverage, chacun tracé sur l'orbite circulaire à deux corps retrouvée à partir de la trace au sol du moteur, rayons comprimés pour l'affichage. L'erreur de temps de l'horloge culmine à 62,7 ns face à une garde de 50 ns, la densité porteuse sur bruit tombe à -12.2 dB-Hz face à un plancher de 25 dB-Hz, et le niveau de protection vertical atteint 135,4 m face à une limite d'alerte de 50 m.Répétez la minute où le GNSS s'éteint. La console de mission de Kshana, tracée à partir d'une exécution réelle du moteur v0.40.0 : la campagne enchaînée campaign-jam-spoof-holdover-integrity (graine 20260928, 6 phases, 18 exécutions membres sur T+01:16:10) et les 102 satellites de GPS, Galileo, BeiDou et GLONASS de constellation-multi-gnss-coverage, chacun tracé sur l'orbite circulaire à deux corps retrouvée à partir de la trace au sol du moteur, rayons comprimés pour l'affichage. L'erreur de temps de l'horloge culmine à 62,7 ns face à une garde de 50 ns, la densité porteuse sur bruit tombe à -12.2 dB-Hz face à un plancher de 25 dB-Hz, et le niveau de protection vertical atteint 135,4 m face à une limite d'alerte de 50 m.
Sommaire

Répétez la minute où le GNSS s'éteint#

Kshana rejoue le brouillage, le leurrage et le holdover d'horloge lorsque les signaux GNSS (système mondial de navigation par satellite) défaillent, et vous dit combien de temps un système garde l'heure et la position dans son budget, et quelle horloge ou quel capteur apporte le plus de marge. C'est un seul moteur Rust. Il s'exécute dans un terminal, un notebook, un IDE (environnement de développement intégré), un assistant d'IA (intelligence artificielle), ou dans votre navigateur.

Chaque exécution est reproductible bit à bit à partir du scénario, de la graine et de la version du moteur. Chaque capacité porte l'une de trois étiquettes dans un registre vérifié par machine : VALIDATED (une référence externe indépendante concorde), MODELLED (cohérent en interne, et dit à haute voix) ou PARTNER (un partenaire matériel en est responsable).

État : v0.40.0. Un substrat de simulation validé et reproductible pour la résilience PNT. La synchronisation temporelle et le holdover viennent en premier, parce que ce domaine est le mieux validé. Kshana est un instrument d'étude et d'arbitrage : pas un matériel générateur de signaux radiofréquence (RF) (il ne pilote aucune radio et n'émet rien ; sa sortie au niveau du signal est constituée de fichiers d'échantillons IQ en bande de base pour des récepteurs logiciels), pas un récepteur GNSS matériel ou certifié (son récepteur logiciel est un outil d'analyse) et pas un produit de vol. Nouveau dans le domaine ? Commencez par l'introduction en langage clair et le glossaire.

Nouveautés de la version 0,40#

0,40 ajoute un budget d'erreur au niveau de la mission, étiquette chaque figure et chaque tableau avec son niveau de preuve, lit des journaux d'horloge mesurés, vérifie les soumissions de partenaires de données, estime où peut se trouver un émetteur d'interférence, et parle dix-sept langues en plus de l'anglais. Le registre compte désormais 401 lignes : 176 VALIDATED, 221 MODELLED, 4 PARTNER. Aucune ligne n'a été promue à VALIDATED, et chaque échec ci-dessous est épinglé par un test.

  • Fil de mission. Le type mission-thread enchaîne des phases du lancement à l'entrée (launch-ascent, leo-rendezvous, tli-and-cruise, entry et quatre types lunaires) avec des règles de transfert déclarées, une marge par rapport à des exigences déclarées et le maillon le plus faible ; un exemple de bout en bout de classe Artemis sur 11 phases (segments terrestre et lunaire), 92 types de scénario au total. Chaque nombre est MODELLED. La propagation cislunaire par rapport à la trajectoire publique d'Artemis I n'atteint pas son seuil préenregistré (45,3 km et 0,25 m/s contre 5 km et 0,05 m/s ; la cause est de petites manœuvres que le modèle n'inclut pas), et le propagateur lunaire par rapport à l'orbite de CAPSTONE n'atteint pas le sien (136,8 km contre 25 km à la fin d'une révolution) ; la comparaison avec LRO est atteinte. Les lignes restent MODELLED (Fil de mission, segment lunaire). Dans le Studio, le fil se lit à /studio/mission-thread/.
  • Étiquettes de preuve. Chaque figure et chaque tableau qu'une exécution écrit porte le niveau et les identifiants de lignes du registre sur lesquels il repose, lus dans la matrice.
  • Horloges mesurées. Huit formats de journaux d'horloge sont lus (docs/CLOCK-LOG-FORMATS.md) et une série ajustée peut piloter le holdover. Par rapport à des seuils préenregistrés, l'ajustement n'atteint pas F1(a) sur cinq enregistrements sur six et F2 sur un ; les deux restent MODELLED (Journal des modifications).
  • Partenaires de données. kshana partner check vérifie le format d'une soumission et ne note rien (docs/PARTNER-DATA.md).
  • Région de l'émetteur. kshana interference-map locate donne une région et une ellipse, jamais un simple point, à partir de rapports ADS-B ou AIS. Comparé une fois avec les sites d'émetteurs de Jammertest 2025, le résultat est NOT ASSESSABLE pour les deux sources (trop peu de sessions programmées dans les données ouvertes), de sorte que la ligne reste MODELLED (Carte d'interférence).
  • Benchmark. La nouvelle campagne 0,40 atteint A3, D3 (tous deux EXPLORATORY), R3 et R4 ; A2, D1 et R1 restent NOT MET (Bench).
  • Langues. nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja et zh-Hans, sous forme de traductions automatiques qu'aucun locuteur natif n'a relues ; l'anglais fait foi, et les exécutions non anglaises prennent environ deux fois plus de temps (docs/i18n.md).

Nouveautés de la version 0,39#

La version 0,39 n'ajoute aucune fonctionnalité et ne change aucun résultat ; la sortie du moteur est celle de la version 0,38. Elle corrige un point en ligne de commande, met à jour des dépendances de l'outillage de validation croisée, et énonce en entier les verdicts du benchmark.

  • Ligne de commande. kshana kinds | head (toute sortie standard fermée) ne provoque plus de panique : le programme se termine silencieusement avec le code 141, comme d'autres outils pour un tube fermé. Les autres erreurs d'écriture se signalent toujours.
  • Dependencies. memmap2 0.9.11 dans les deux verrous de recoupement ANISE et pillow 13.0.0 et certifi 2026.10.19 dans les versions figées de l'environnement de référence, le tout sous xval/ : rien de ce qui est livré n'a changé.
  • kshana-bench, tous les verdicts. Par rapport aux seuils préenregistrés, trois sont NOT MET, chacun figé par un test : A2 (agc_k_sigma AUC 0,766 face à au moins 0,80), D1 (plus grand écart 0,0301) et la tâche (b) R1 (reportée, non réexécutée). Aucun seuil n'a été assoupli (Bench).

Nouveautés de la version 0,38#

La version 0,38 rend l'arbitre neutre mesurable : elle note des journaux de récepteur par rapport à un calendrier de test publié, lit davantage de récepteurs et de capteurs, teste des systèmes de synchronisation temporelle, et livre un benchmark et un observatoire des interférences. Elle reste indicative : rien ici n'est certifié, aucun résultat n'est une homologation, et rien n'émet. Chaque ligne énonce ce que détient le registre pour elle (comment une étiquette est obtenue) ; un état ne nomme que ce qui a été vérifié, et la ligne du registre et la page liée disent ce qui ne l'a pas été.

Nouveau dans la version 0,38 Ce que cela fait, et pourquoi État dans le registre Lu
Notation jammertest kshana jammertest import lit le catalogue de tests et le plan d'émission publiés de la NPRA comme vérité planifiée ; jammertest score note un journal de récepteur test par test (latence de détection, alarmes manquées, fausses alarmes, temps de récupération), sous forme de paquet de preuves signé si vous fournissez une clé MODELLED : une ligne du registre. Les seuils ont été préenregistrés avant toute exécution notée ; sur les données JammerTest 2024, la règle de données minimales a échoué dans les deux exécutions (4 et 7 fenêtres notables contre 10 requises), de sorte qu'aucun seuil n'est évaluable et que rien n'est affirmé Jammertest
Les indicateurs propres du récepteur UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG et NovAtel RXSTATUS lus dans un self_report par époque et comparés aux alarmes de Kshana (les deux, récepteur seul, Kshana seul, aucun) ; un lecteur Septentrio SBF et une entrée --serial en lecture seule MODELLED ; l'accord entre le détecteur d'un récepteur et celui de Kshana n'est pas une validation Confiance du récepteur
Davantage de récepteurs et de capteurs RTKLIB .pos, NovAtel OEM7, C/N0 RTCM 3 MSM4/MSM7 (tiré des tables pyrtcm sous licence BSD, non du texte RTCM), flux de moniteur GNSS-SDR, un journal d'IMU comme second capteur, un paquet ROS 2, un pont gnss_lib_py, et imu-fit pour les paramètres de capteur hybride MODELLED : six lignes du registre ; jeux d'essai écrits par nous seulement, aucune capture d'un récepteur réel, d'une IMU, d'une exécution GNSS-SDR ou d'un graphe ROS n'a été lue Entrées machine
Tests de synchronisation temporelle et de holdover le type de scénario holdover-test note un test de holdover (GNSS retiré par l'opérateur, holdover, récupération) à partir d'un relevé d'erreur de temps mesuré par rapport à des masques ITU-T, « mesuré par rapport au masque » ; lecteurs de journaux linuxptp et chrony ; les étapes matérielles et le champ lab-attestation MODELLED : deux lignes du registre ; les heures sont la déclaration de l'opérateur, non vérifiées HIL de synchronisation temporelle, Sécurité du matériel
Paquets de normes, LunaNet AFS, aller-retour de laboratoire paquets notés pour DHS RPCF, IMO MSC.1/Circ.1575 et ICAO Doc 9849 Appendix F par rapport à des seuils énoncés avant l'exécution, « apporte des éléments de preuve en faveur de » ; une table de correspondance NIST IR 8323r1 ; un générateur et vérificateur de codes LunaNet AFS ; un paquet signé qui relie le scénario d'une exécution de laboratoire, les conditions de test, le journal du récepteur et la note MODELLED pour les paquets et l'aller-retour ; la vérification des codes AFS est VALIDATED par rapport à ses colonnes de contrôle imprimées (voir les lignes du registre) Normes, LunaNet AFS
kshana-bench et l'observatoire tâches, partitions et métriques fixes pour la détection d'interférences, la détection IQ, la prédiction de holdover et l'écart d'optimisme, avec un jeu réservé scellé et un classement statique ; un produit quotidien d'interférences reproductible avec un délai de 24 h, des cellules grossières et aucune attribution pas de ligne de registre propre : il note des soumissions, et ses références de base sont étiquetées MODELLED dans les fichiers de résultats ; par rapport aux seuils préenregistrés, le scoreur, C1 à C3 et D2 sont atteints et trois seuils sont NOT MET (figés par des tests) : A2 (agc_k_sigma AUC 0,766 face à au moins 0,80 sur la partition de test), D1 (plus grand écart 0,0301) et la tâche (b) R1 (reportée, non réexécutée) ; voir xval/bench/RESULTS-v2.md Bench, Observatoire
Exportateurs la télémétrie de confiance sous forme de messages de découverte et d'état MQTT pour Home Assistant (publication seulement, sans identifiants) à côté de Prometheus, CEF, LEEF et OTLP MODELLED : une ligne du registre Télémétrie de confiance
Marge de liaison optique en fonction du temps le type de scénario optical-atmosphere peut écrire une réalisation à graine fixe de la météo d'un site sous forme de série de marges de liaison MODELLED : une ligne du registre ; un tirage du modèle, non le climat Atmosphère optique

Points forts de la version 0,37 : journal des modifications. La liste complète de la version 0,38 figure dans le journal des modifications.

La version 0,38 en détail#

Chaque capacité du tableau ci-dessus, en quelques lignes : ce qu'elle fait, une commande pour l'exécuter, une image tracée à partir d'une exécution réelle du moteur, et ce que le registre détient pour elle. Les images sont écrites par tools/gen_figures_038.py dans docs/figures/0.38/ (jamais dessinées à la main) : python3 tools/gen_figures_038.py les réécrit à partir d'un moteur compilé, et --check échoue si l'une est périmée ou si sa légende ici diffère. Lorsqu'une entrée est un journal, il s'agit d'un journal fictif que le script écrit, parce que les vrais journaux de tiers ne sont jamais intégrés au dépôt, et la légende le dit. Tout ce qui suit est indicatif : non certifié, non une homologation, et rien n'émet. Un état nomme ce qui a été vérifié et rien de plus ; comment une étiquette est obtenue.

Notation jammertest#

kshana jammertest import transforme le catalogue de tests et le plan d'émission publiés de la NPRA en vérité planifiée, et kshana jammertest score note un journal de récepteur par rapport à elle : pour chaque test planifié, s'il a été détecté, avec quel retard, et combien de temps le récepteur a mis à récupérer, ainsi que les fausses alarmes en dehors de chaque créneau. Le catalogue est téléchargé, jamais intégré au dépôt.

xval/jammertest-plan/fetch.sh ../jammertest-plan
kshana jammertest score session.toml --catalog ../jammertest-plan/testcatalog2025.json \
    --plan ../jammertest-plan/plan-tuesday-2025-09-16.json --location 1 --json
Notation d'un journal de récepteur synthétique par rapport à un calendrier de trois essais, issue d'une véritable exécution du moteur v0.40.0 (`kshana jammertest score`). Le journal est inventé : 1800 s de NMEA avec une baisse de C/N0 de 20 dB sur deux intervalles. Le calendrier liste trois créneaux ; le créneau du milieu n'a aucun brouilleur dans le journal. La notation marque 2 essais détectés sur 3 (latence médiane 0 s) et 1 manqué, avec 0 exécution de fausse alarme sur 0,25 h de temps sans brouillage. Rien ici ne dit quoi que ce soit d'un récepteur réel. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire.Notation d'un journal de récepteur synthétique par rapport à un calendrier de trois essais, issue d'une véritable exécution du moteur v0.40.0 (`kshana jammertest score`). Le journal est inventé : 1800 s de NMEA avec une baisse de C/N0 de 20 dB sur deux intervalles. Le calendrier liste trois créneaux ; le créneau du milieu n'a aucun brouilleur dans le journal. La notation marque 2 essais détectés sur 3 (latence médiane 0 s) et 1 manqué, avec 0 exécution de fausse alarme sur 0,25 h de temps sans brouillage. Rien ici ne dit quoi que ce soit d'un récepteur réel. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire.

État dans le registre : MODELLED. Les seuils ont été fixés avant toute exécution notée ; sur les données JammerTest 2024, la règle de données minimales a échoué dans les deux exécutions, de sorte qu'aucun seuil n'est évaluable et que rien n'est affirmé. Jammertest.

Les indicateurs propres du récepteur#

UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG et NovAtel RXSTATUS sont lus dans un self_report par époque et placés à côté des alarmes de Kshana : les deux, récepteur seul, Kshana seul, ou aucun. Un lecteur Septentrio SBF et une entrée --serial en lecture seule alimentent la même comparaison. Aucun des deux côtés n'est la vérité terrain.

kshana receiver-trust session.toml     # [log] format = "ubx", path = "receiver.ubx"
L'indicateur de leurrage propre du récepteur mis en regard des alarmes de Kshana, d'après une exécution réelle du moteur v0.40.0 sur un journal UBX fictif (200 époques à 1 Hz). Le C/N0 chute de 20 dB de 80 à 90 s et de 120 à 130 s ; le récepteur signale 120 à 130 s et 160 à 165 s. Sur 140 époques comparées après calibration, 11 avaient les deux en alerte, 6 le récepteur seul, 11 Kshana seul et 112 aucun. Aucun des deux côtés n'est la vérité terrain et l'accord n'est pas une validation. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.L'indicateur de leurrage propre du récepteur mis en regard des alarmes de Kshana, d'après une exécution réelle du moteur v0.40.0 sur un journal UBX fictif (200 époques à 1 Hz). Le C/N0 chute de 20 dB de 80 à 90 s et de 120 à 130 s ; le récepteur signale 120 à 130 s et 160 à 165 s. Sur 140 époques comparées après calibration, 11 avaient les deux en alerte, 6 le récepteur seul, 11 Kshana seul et 112 aucun. Aucun des deux côtés n'est la vérité terrain et l'accord n'est pas une validation. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.

État dans le registre : MODELLED. L'accord entre le détecteur d'un récepteur et celui de Kshana n'est pas une validation. Confiance du récepteur.

Davantage de récepteurs et de capteurs#

RTKLIB .pos, NovAtel OEM7, C/N0 RTCM 3 MSM4/MSM7, flux de moniteur GNSS-SDR, un journal d'IMU comme second capteur, un paquet ROS 2 et un pont gnss_lib_py aboutissent tous à la même chronologie receiver-trust. imu-fit lit les paramètres de capteur dont les scénarios hybrides et de fusion ont besoin dans un journal d'IMU stationnaire, de sorte qu'un scénario peut être exécuté avec le capteur que vous avez réellement.

kshana imu-fit still.csv --format csv --axis x --expected-mean 0 --id bench-imu
Ce que `kshana imu-fit` lit dans un journal d'IMU à l'arrêt, à partir d'une exécution réelle du moteur v0.40.0 sur un journal fictif (20 000 échantillons à 100 Hz, 200 s) : la marche aléatoire de vitesse de l'accéléromètre q_va = 4.02e-06, la marche aléatoire d'angle du gyromètre q_arw = 9e-08, l'instabilité de biais 0,00296 et les premières pentes d'Allan (-0.51 et -0.49 ; environ -0.5 là où le bruit blanc domine). Le tableau à côté est le TOML qu'affiche la commande. L'estimateur n'est vérifié que sur des journaux synthétiques. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.Ce que `kshana imu-fit` lit dans un journal d'IMU à l'arrêt, à partir d'une exécution réelle du moteur v0.40.0 sur un journal fictif (20 000 échantillons à 100 Hz, 200 s) : la marche aléatoire de vitesse de l'accéléromètre q_va = 4.02e-06, la marche aléatoire d'angle du gyromètre q_arw = 9e-08, l'instabilité de biais 0,00296 et les premières pentes d'Allan (-0.51 et -0.49 ; environ -0.5 là où le bruit blanc domine). Le tableau à côté est le TOML qu'affiche la commande. L'estimateur n'est vérifié que sur des journaux synthétiques. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.

État dans le registre : MODELLED. Jeux d'essai écrits par nous seulement ; aucune capture d'un récepteur réel, d'une IMU, d'une exécution GNSS-SDR ou d'un graphe ROS n'a été lue. Entrées machine.

Tests de synchronisation temporelle et de holdover#

Le type de scénario holdover-test note un test de holdover (GNSS retiré par l'opérateur, holdover, récupération) à partir d'un relevé d'erreur de temps mesuré par rapport à des masques ITU-T, et le dit dans ces mots : mesuré par rapport au masque. Des lecteurs de journaux linuxptp et chrony l'alimentent ; les étapes matérielles et le champ lab-attestation disent qui a déclaré quoi.

kshana scenarios/holdover-test-example.toml
Un test de holdover noté à partir d'un relevé d'erreur de temps, d'après une exécution réelle du moteur v0.40.0 sur scenarios/holdover-test-example.toml (601 échantillons toutes les 5 s). Le GNSS est retiré par l'opérateur à 600 s et rétabli à 2400 s ; l'erreur de temps dérive jusqu'à 299 ns à la fin du holdover, dépasse le budget de 100 ns après 675 s, et revient dans la bande de 100 ns 70 s après le rétablissement. Verdicts : masques de référence PASS, masques de holdover FAIL, enveloppe de holdover FAIL, récupération RECOVERED. Mesuré par rapport au masque, non une approbation. Les heures sont la déclaration de l'opérateur, non vérifiées par Kshana. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.Un test de holdover noté à partir d'un relevé d'erreur de temps, d'après une exécution réelle du moteur v0.40.0 sur scenarios/holdover-test-example.toml (601 échantillons toutes les 5 s). Le GNSS est retiré par l'opérateur à 600 s et rétabli à 2400 s ; l'erreur de temps dérive jusqu'à 299 ns à la fin du holdover, dépasse le budget de 100 ns après 675 s, et revient dans la bande de 100 ns 70 s après le rétablissement. Verdicts : masques de référence PASS, masques de holdover FAIL, enveloppe de holdover FAIL, récupération RECOVERED. Mesuré par rapport au masque, non une approbation. Les heures sont la déclaration de l'opérateur, non vérifiées par Kshana. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.

État dans le registre : MODELLED. Les heures auxquelles le GNSS a été retiré et rétabli sont la déclaration de l'opérateur, non vérifiées. HIL de synchronisation temporelle, Sécurité du matériel.

Paquets de normes#

Paquets notés pour les profils de test PNT résilient du DHS, IMO MSC.1/Circ.1575 et ICAO Doc 9849 Appendix F, plus une table de correspondance NIST IR 8323r1 dans compliance-report. Chaque test exécute un scénario fourni et compare un champ de résultat à un seuil énoncé avant l'exécution ; un test qui exige un journal de récepteur est indiqué comme nécessitant une entrée, et non noté. La formulation est « apporte des éléments de preuve en faveur de ».

kshana standards-pack list
kshana standards-pack run imo-circ-1575
Chaque essai des trois paquets de normes notés, issu d'exécutions réelles du moteur v0.40.0 (`kshana standards-pack run`) : dhs-rpcf : 6 atteints, 1 non atteint, 2 nécessitent une entrée ; imo-circ-1575 : 1 atteint, 4 non atteints, 2 nécessitent une entrée ; icao-doc9849-appf : 6 atteints, 0 non atteint, 2 nécessitent une entrée. Au total, 13 atteints, 5 non atteints et 6 nécessitent une entrée que le moteur n'a pas (un journal de récepteur ou la documentation d'un équipement). Chaque seuil a été fixé avant l'exécution ; un échec est conservé comme un échec. Un seuil atteint signifie qu'un scénario modélisé a atteint un seuil donné, et ne dit rien d'un produit. Les paquets apportent des éléments de preuve en faveur des lignes qu'ils citent ; ils ne constituent pas une évaluation. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine ; il ne doit pas constituer l'unique fondement d'une décision de navigation ou de sécurité.Chaque essai des trois paquets de normes notés, issu d'exécutions réelles du moteur v0.40.0 (`kshana standards-pack run`) : dhs-rpcf : 6 atteints, 1 non atteint, 2 nécessitent une entrée ; imo-circ-1575 : 1 atteint, 4 non atteints, 2 nécessitent une entrée ; icao-doc9849-appf : 6 atteints, 0 non atteint, 2 nécessitent une entrée. Au total, 13 atteints, 5 non atteints et 6 nécessitent une entrée que le moteur n'a pas (un journal de récepteur ou la documentation d'un équipement). Chaque seuil a été fixé avant l'exécution ; un échec est conservé comme un échec. Un seuil atteint signifie qu'un scénario modélisé a atteint un seuil donné, et ne dit rien d'un produit. Les paquets apportent des éléments de preuve en faveur des lignes qu'ils citent ; ils ne constituent pas une évaluation. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine ; il ne doit pas constituer l'unique fondement d'une décision de navigation ou de sécurité.

État dans le registre : MODELLED. Un seuil atteint dit qu'un scénario modélisé a atteint un seuil énoncé, rien au sujet d'un produit ; chaque échec est conservé et figé par un test. Normes.

LunaNet AFS#

Le générateur de codes du signal direct augmenté LunaNet (codes de Gold, de Weil et tertiaires, la trame du message et son codage d'erreur) et un vérificateur pour un flux de symboles enregistré ou généré, figé sur une édition de la spécification.

kshana lunanet-afs-check spec
kshana lunanet-afs-check generate --frames 2 --out afs.sym
kshana lunanet-afs-check symbols afs.sym
Le générateur de codes AFS de LunaNet vérifié par rapport aux colonnes imprimées de la spécification, à partir d'une exécution réelle du moteur v0.40.0 (`kshana lunanet-afs-check spec`, figé sur LNIS V5, AD1 volume A (LSIS-AFS) V1.0, 29 janvier 2025 ; le document marque ses tableaux de codes {LSIS-TBC}). 9 contrôles sur 10 sont satisfaits ; B4 est NOT MET (420 sur 421 concordent). Il vérifie un flux de symboles par rapport à une édition d'une spécification publiée et ne dit rien d'aucun nœud ni service LunaNet. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine. Il vérifie un flux de symboles par rapport à une édition d'une spécification publiée et ne dit rien d'aucun nœud ni service LunaNet.Le générateur de codes AFS de LunaNet vérifié par rapport aux colonnes imprimées de la spécification, à partir d'une exécution réelle du moteur v0.40.0 (`kshana lunanet-afs-check spec`, figé sur LNIS V5, AD1 volume A (LSIS-AFS) V1.0, 29 janvier 2025 ; le document marque ses tableaux de codes {LSIS-TBC}). 9 contrôles sur 10 sont satisfaits ; B4 est NOT MET (420 sur 421 concordent). Il vérifie un flux de symboles par rapport à une édition d'une spécification publiée et ne dit rien d'aucun nœud ni service LunaNet. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine. Il vérifie un flux de symboles par rapport à une édition d'une spécification publiée et ne dit rien d'aucun nœud ni service LunaNet.

État dans le registre : VALIDATED pour les vérifications des codes et de la synchronisation, par rapport aux valeurs que la spécification imprime (qu'elle marque TBC) ; une vérification est NOT MET, conservée et figée (une colonne imprimée du code tertiaire diffère : le document imprime la même valeur pour deux PRN). Les mots LDPC et CRC des sous-trames 2 à 4 ne sont pas vérifiés. Les lignes du registre disent exactement lesquels. LunaNet AFS.

Aller-retour de laboratoire#

kshana.test-conditions/1 est une description publiée de ce qu'un laboratoire a fait (événements, heures, puissances). kshana evidence round-trip relie le condensat du scénario, le condensat des conditions, le condensat du journal du récepteur et la note en un seul paquet signé, et refuse un paquet dont les conditions et le scénario de notation ne s'accordent pas sur les événements. Kshana ne produit ni ne rejoue jamais de signal : la façon dont un scénario est parvenu à un récepteur relève de la responsabilité de l'opérateur.

kshana evidence --help
La structure d'un paquet de preuves. Un journal de récepteur (NMEA, u-blox UBX, RINEX 3 ou un journal Android) et une fenêtre temporelle entrent dans kshana receiver-trust evidence, qui écrit sept fichiers : log-slice.bin, config.json, epochs.json, summary.html, manifest.json, manifest.sig et un timestamp.tsr facultatif. Le manifeste consigne le SHA-256 du journal entier et de chaque fichier, ainsi qu'une chaîne de hachages sur les fichiers ; la signature couvre le manifeste. kshana evidence verify vérifie la signature, le hachage de chaque fichier, la chaîne et l'absence de tout fichier non listé, et retourne 0 lorsque la vérification réussit, 1 lorsque quelque chose a échoué et 3 lorsque le signataire n'était pas épinglé. Un paquet est un enregistrement technique, pas un avis juridique.La structure d'un paquet de preuves. Un journal de récepteur (NMEA, u-blox UBX, RINEX 3 ou un journal Android) et une fenêtre temporelle entrent dans kshana receiver-trust evidence, qui écrit sept fichiers : log-slice.bin, config.json, epochs.json, summary.html, manifest.json, manifest.sig et un timestamp.tsr facultatif. Le manifeste consigne le SHA-256 du journal entier et de chaque fichier, ainsi qu'une chaîne de hachages sur les fichiers ; la signature couvre le manifeste. kshana evidence verify vérifie la signature, le hachage de chaque fichier, la chaîne et l'absence de tout fichier non listé, et retourne 0 lorsque la vérification réussit, 1 lorsque quelque chose a échoué et 3 lorsque le signataire n'était pas épinglé. Un paquet est un enregistrement technique, pas un avis juridique.

L'image est la disposition d'un paquet. État dans le registre : MODELLED. Conditions de test, Test bench.

kshana-bench#

Tâches, partitions et métriques fixes pour la détection d'interférences, la détection IQ, la prédiction de holdover et l'écart d'optimisme, avec un jeu réservé scellé et un classement statique. Il note des soumissions ; ce n'est pas un classement de récepteurs.

kshana bench baseline --task d --split test --out results/
Les références de base intégrées de la tâche D de kshana-bench (l'écart d'optimisme) sur le découpage de test, issues d'une exécution réelle du moteur v0.40.0 (`kshana bench baseline`). Chaque paire de barres est l'aire sous la courbe ROC sur les cas en distribution et sur les cas décalés ; l'écart entre les deux est l'écart d'optimisme, pour une tolérance de 0,05. fused-max-z : 0,998 et 0,983 (écart 0,015) ; sqm-imbalance : 0,882 et 0,882 (écart 0,001) ; agc-excess : 0,848 et 0,819 (écart 0,030) ; raim-parity : 0,682 et 0,672 (écart 0,010) ; energy-cn0-drop : 0,595 et 0,565 (écart 0,030). Les étiquettes sont des étiquettes de modèle génératif d'un corpus synthétique, jamais des données de terrain : MODELLED. À titre consultatif : modélisé ou mesuré par rapport à des références indiquées, ni une approbation, ni une certification, ni une déclaration de respect de la norme. Un score décrit un journal ou un corpus, jamais un produit.Les références de base intégrées de la tâche D de kshana-bench (l'écart d'optimisme) sur le découpage de test, issues d'une exécution réelle du moteur v0.40.0 (`kshana bench baseline`). Chaque paire de barres est l'aire sous la courbe ROC sur les cas en distribution et sur les cas décalés ; l'écart entre les deux est l'écart d'optimisme, pour une tolérance de 0,05. fused-max-z : 0,998 et 0,983 (écart 0,015) ; sqm-imbalance : 0,882 et 0,882 (écart 0,001) ; agc-excess : 0,848 et 0,819 (écart 0,030) ; raim-parity : 0,682 et 0,672 (écart 0,010) ; energy-cn0-drop : 0,595 et 0,565 (écart 0,030). Les étiquettes sont des étiquettes de modèle génératif d'un corpus synthétique, jamais des données de terrain : MODELLED. À titre consultatif : modélisé ou mesuré par rapport à des références indiquées, ni une approbation, ni une certification, ni une déclaration de respect de la norme. Un score décrit un journal ou un corpus, jamais un produit.

État dans le registre : pas de ligne de registre propre ; les références de base sont étiquetées MODELLED dans les fichiers de résultats. Par rapport aux seuils préenregistrés, le scoreur, C1 à C3 et D2 sont atteints et trois seuils sont NOT MET, chacun figé par un test : A2 (agc_k_sigma AUC 0,766 face à au moins 0,80 sur la partition de test), D1 (plus grand écart 0,0301) et la tâche (b) R1 (reportée de la campagne précédente, non réexécutée). Les chiffres figurent dans xval/bench/RESULTS-v2.md. Bench.

Observatoire des interférences#

Un produit par jour UTC et par région à partir d'une archive ouverte de positions d'aéronefs, sur une grille grossière fixe : chaque cellule est dégradée, non dégradée, ou non observée (ce qui ne veut pas dire « dégagée »). Publié au plus tôt 24 h après la fin du jour, avec les petites cellules supprimées et sans attribution de cause.

kshana interference-map daily /path/to/extracted/2026-09-15 \
    --dataset adsb-lol --day 2026-09-15 --bbox 53.5,9.0,66.0,31.0 --out products/
Deux jours synthétiques de carte d'interférence, tirés des échantillons versionnés dans examples/interference-map/output, chacun avec son propre itinéraire synthétique et les parts d'exposition d'itinéraire que le moteur rapporte. À gauche, un jour ADS-B : 1 cellule dégradée, 6 non dégradées, 4 non évaluées (hachurées) et des cellules sans entrée, dessinées vides, qui n'ont pas été observées. L'itinéraire fait 525 km : 11,5 % de sa longueur dans des cellules dégradées, 38,3 % non dégradées, 9,1 % non évaluées et 41,1 % non observées. À droite, un jour AIS : cellules signalées par les détecteurs de cercle et de terre, cellules non anormales et cellules vides ; l'itinéraire fait 454 km avec 10,5 % dans des cellules anormales, 21,2 % non anormales, 0,0 % non évaluées et 68,3 % non observées. L'ADS-B et l'AIS sont des couches distinctes, jamais combinées. Une cellule signalée n'est pas un constat d'interférence, et une cellule sans couleur n'a pas été observée, ce qui n'est pas la même chose que dégagée. Toutes les données sont inventées, en plein milieu de l'Atlantique, et ne sont pas une mesure.Deux jours synthétiques de carte d'interférence, tirés des échantillons versionnés dans examples/interference-map/output, chacun avec son propre itinéraire synthétique et les parts d'exposition d'itinéraire que le moteur rapporte. À gauche, un jour ADS-B : 1 cellule dégradée, 6 non dégradées, 4 non évaluées (hachurées) et des cellules sans entrée, dessinées vides, qui n'ont pas été observées. L'itinéraire fait 525 km : 11,5 % de sa longueur dans des cellules dégradées, 38,3 % non dégradées, 9,1 % non évaluées et 41,1 % non observées. À droite, un jour AIS : cellules signalées par les détecteurs de cercle et de terre, cellules non anormales et cellules vides ; l'itinéraire fait 454 km avec 10,5 % dans des cellules anormales, 21,2 % non anormales, 0,0 % non évaluées et 68,3 % non observées. L'ADS-B et l'AIS sont des couches distinctes, jamais combinées. Une cellule signalée n'est pas un constat d'interférence, et une cellule sans couleur n'a pas été observée, ce qui n'est pas la même chose que dégagée. Toutes les données sont inventées, en plein milieu de l'Atlantique, et ne sont pas une mesure.

L'image représente les jours d'échantillon enregistrés, non un produit de l'observatoire. État dans le registre : MODELLED : pas de référence externe, pas de vérité terrain et pas d'attribution de cause ; une cellule non observée n'a pas été évaluée, ce qui n'est pas la même chose que dégagée. Méthode de l'observatoire.

Exportateurs#

Télémétrie de confiance sous forme de texte Prometheus, CEF, LEEF, OTLP et de messages de découverte et d'état MQTT pour Home Assistant. La commande ne publie que vers une destination que vous lui donnez et ne détient aucun identifiant.

kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format cef
Un résultat de confiance dans trois formats d'exportation, d'après des exécutions réelles du moteur v0.40.0 (`kshana trust-telemetry`) sur examples/maritime-trust : exposition texte Prometheus (le dernier score de confiance est 5,9 et la bande non fiable est celle qui est activée), et les derniers messages CEF et LEEF. La commande ne publie rien si on ne lui donne pas de destination, ne détient aucun identifiant et n'émet aucun signal radio. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire.Un résultat de confiance dans trois formats d'exportation, d'après des exécutions réelles du moteur v0.40.0 (`kshana trust-telemetry`) sur examples/maritime-trust : exposition texte Prometheus (le dernier score de confiance est 5,9 et la bande non fiable est celle qui est activée), et les derniers messages CEF et LEEF. La commande ne publie rien si on ne lui donne pas de destination, ne détient aucun identifiant et n'émet aucun signal radio. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire.

État dans le registre : MODELLED. Télémétrie de confiance.

Le type de scénario optical-atmosphere peut écrire une réalisation à graine fixe de la météo d'un site sous forme de série de marges de liaison : épisodes nuageux, une colonne d'eau liquide pour chacun, un échantillon de scintillation par pas. La page Optical PNT du Studio ouvre les scénarios optical-atmosphere.

kshana scenarios/optical-atmosphere-network.toml
Une réalisation générée avec une graine de la marge de liaison du site 'northern' sur 336 h, issue d'une exécution réelle du moteur v0.40.0 sur scenarios/optical-atmosphere-network.toml (graine 37, un pas de 600 s). La marge passe sous zéro pendant les épisodes nuageux ; dans ce tirage, la liaison est active 40,5 % du temps, avec 27 pannes et une panne la plus longue de 30,7 h. Les entrées sont illustratives, la série est un tirage du modèle et non le climat, et elle diffère de la disponibilité statistique (37,8 %) de l'erreur d'échantillonnage du tirage. Analyse à titre consultatif seulement : ni un produit de disponibilité, d'intégrité ou de navigation certifié, ni une prédiction pour un site réel, sauf si ses entrées climatiques proviennent d'un jeu de données indiqué.Une réalisation générée avec une graine de la marge de liaison du site 'northern' sur 336 h, issue d'une exécution réelle du moteur v0.40.0 sur scenarios/optical-atmosphere-network.toml (graine 37, un pas de 600 s). La marge passe sous zéro pendant les épisodes nuageux ; dans ce tirage, la liaison est active 40,5 % du temps, avec 27 pannes et une panne la plus longue de 30,7 h. Les entrées sont illustratives, la série est un tirage du modèle et non le climat, et elle diffère de la disponibilité statistique (37,8 %) de l'erreur d'échantillonnage du tirage. Analyse à titre consultatif seulement : ni un produit de disponibilité, d'intégrité ou de navigation certifié, ni une prédiction pour un site réel, sauf si ses entrées climatiques proviennent d'un jeu de données indiqué.

État dans le registre : MODELLED. Un tirage du modèle, non le climat. Atmosphère optique.

Nouvelles vues du Studio#

kshana.dev/studio gagne un Bridge replay (deux exécutions côte à côte sur une même horloge de mission, à /studio/replay/), une page Optical PNT (/studio/optical/), une page de test de holdover (/studio/holdover/) et une visionneuse de l'observatoire (/studio/observatory/). Elles exécutent le même moteur dans le navigateur, rien n'est téléversé, et elles portent le même avertissement indicatif. Les images ci-dessus sont tracées par un script à partir de la sortie propre du moteur ; ce ne sont pas des captures d'écran de ces pages.

Navigation de l'utilisateur spatial (gnss-ssv)#

Pour un engin spatial au-dessus, autour ou bien au-delà des orbites GNSS : combien de signaux GNSS il peut utiliser, quelle est leur puissance, quelle est la qualité de la géométrie, et ce qu'un filtre embarqué peut en faire. Un seul type de scénario, quatre modes, choisis par les tables du scénario : une coquille d'utilisateurs (la part du temps avec un et quatre signaux, par constellation), une trajectoire (signaux, C/N0, dilution de précision et le milieu du rayon rasant le long d'une orbite), une exécution de navigation (un filtre à neuf états sur des pseudodistances, jusqu'à la Lune) et une formation (navigation relative de satellites adjoints autour d'un chef). La source publique pour la comparaison de disponibilité est le livret interopérable Space Service Volume du GNSS (UN OOSA ST/SPACE/75, du Comité international sur les GNSS), qui est lui-même une simulation ; il est téléchargé, jamais intégré au dépôt. Page complète : docs/SSV.md.

kshana scenarios/gnss-ssv-shell.toml            # shell: the upper space service volume, reduced size
kshana scenarios/gnss-ssv-heo.toml              # trajectory: a high Earth orbit, limb medium
kshana scenarios/gnss-ssv-nav-lunar.toml        # navigation: an onboard filter toward the Moon
kshana scenarios/gnss-ssv-formation-heo.toml    # formation: relative navigation
Disponibilité des signaux pour un utilisateur sur une sphère à 36000 km d'altitude avec une antenne hémisphérique, d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-shell.toml (une exécution réduite : 162 utilisateurs, 3 jours, pas de 10 min), à un seuil de 20 dB-Hz. Pour chaque constellation et chaque bande, deux barres : la part des paires (utilisateur, époque) avec au moins un signal et avec au moins quatre. Combiné, L1 : 99,4 % avec au moins un, 73,2 % avec au moins quatre, plus longue interruption sous quatre signaux 160 min. Combiné, L5 : 100,0 % avec au moins un, 99,9 % avec au moins quatre, plus longue interruption sous quatre signaux 20 min. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. La taille réduite n'est pas la comparaison avec le livret. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.Disponibilité des signaux pour un utilisateur sur une sphère à 36000 km d'altitude avec une antenne hémisphérique, d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-shell.toml (une exécution réduite : 162 utilisateurs, 3 jours, pas de 10 min), à un seuil de 20 dB-Hz. Pour chaque constellation et chaque bande, deux barres : la part des paires (utilisateur, époque) avec au moins un signal et avec au moins quatre. Combiné, L1 : 99,4 % avec au moins un, 73,2 % avec au moins quatre, plus longue interruption sous quatre signaux 160 min. Combiné, L5 : 100,0 % avec au moins un, 99,9 % avec au moins quatre, plus longue interruption sous quatre signaux 20 min. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. La taille réduite n'est pas la comparaison avec le livret. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine. Signaux le long d'une orbite terrestre haute (périgée 497 km, apogée 58622 km, période 18,8 h), d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-heo.toml, bande L1. En haut : la meilleure densité porteuse sur bruit parmi les signaux en vue, face au seuil de 20 dB-Hz. Au milieu : le nombre de signaux en vue de toutes les constellations, de 4 à 55 le long des points échantillonnés. Sur les liaisons reçues, 2252 sont passées par un lobe principal et 696 par des lobes secondaires, à l'aide d'un diagramme paramétrique de substitution étiqueté, non le diagramme mesuré d'un système quelconque. PDOP médian 67, 95e centile 358. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.Signaux le long d'une orbite terrestre haute (périgée 497 km, apogée 58622 km, période 18,8 h), d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-heo.toml, bande L1. En haut : la meilleure densité porteuse sur bruit parmi les signaux en vue, face au seuil de 20 dB-Hz. Au milieu : le nombre de signaux en vue de toutes les constellations, de 4 à 55 le long des points échantillonnés. Sur les liaisons reçues, 2252 sont passées par un lobe principal et 696 par des lobes secondaires, à l'aide d'un diagramme paramétrique de substitution étiqueté, non le diagramme mesuré d'un système quelconque. PDOP médian 67, 95e centile 358. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine. Un filtre embarqué à neuf états sur un transfert depuis l'orbite basse vers la Lune, d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-nav-lunar.toml (289 époques, 13 points tracés). Sur un axe logarithmique, l'erreur de position vraie et la borne à un sigma propre du filtre en fonction du temps écoulé depuis le début. À l'intérieur des orbites GNSS, le RMS de position est de 1,4 m ; au-dessus, il est de 90 m, avec une erreur finale de 184 m à 193 330 km d'altitude avec 1 mesure. L'erreur d'estimation normalisée au carré moyenne sur toute l'exécution est de 4,4 (environ 3 pour un bloc de position cohérent). La vérité et le filtre partagent leurs substituts du Soleil et de la Lune. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.Un filtre embarqué à neuf états sur un transfert depuis l'orbite basse vers la Lune, d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-nav-lunar.toml (289 époques, 13 points tracés). Sur un axe logarithmique, l'erreur de position vraie et la borne à un sigma propre du filtre en fonction du temps écoulé depuis le début. À l'intérieur des orbites GNSS, le RMS de position est de 1,4 m ; au-dessus, il est de 90 m, avec une erreur finale de 184 m à 193 330 km d'altitude avec 1 mesure. L'erreur d'estimation normalisée au carré moyenne sur toute l'exécution est de 4,4 (environ 3 pour un bloc de position cohérent). La vérité et le filtre partagent leurs substituts du Soleil et de la Lune. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine. Navigation relative de 2 satellites adjoints autour d'un chef sur une orbite haute, d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-formation-heo.toml (401 époques). Pour chaque adjoint, deux barres : le RMS de position relative obtenu en soustrayant les deux estimations absolues indépendantes, et celui du filtre relatif sur des pseudodistances à différence simple. Ligne de base 0,8 km : 5,1 m et 1,2 m. Ligne de base 2,0 km : 4,1 m et 2,1 m. Le filtre absolu n'est pas cohérent ici : erreur d'estimation normalisée au carré moyenne 187 contre environ 3 pour un filtre cohérent, de sorte que son incertitude annoncée est bien trop petite. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.Navigation relative de 2 satellites adjoints autour d'un chef sur une orbite haute, d'après une exécution réelle du moteur v0.40.0 sur scenarios/gnss-ssv-formation-heo.toml (401 époques). Pour chaque adjoint, deux barres : le RMS de position relative obtenu en soustrayant les deux estimations absolues indépendantes, et celui du filtre relatif sur des pseudodistances à différence simple. Ligne de base 0,8 km : 5,1 m et 1,2 m. Ligne de base 2,0 km : 4,1 m et 2,1 m. Le filtre absolu n'est pas cohérent ici : erreur d'estimation normalisée au carré moyenne 187 contre environ 3 pour un filtre cohérent, de sorte que son incertitude annoncée est bien trop petite. MODELLED : une étude modélisée à partir d'entrées indiquées, non une mesure et non une affirmation de volume de service pour un système quelconque. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.

État dans le registre : MODELLED, et la comparaison avec le livret échoue pour l'essentiel. Les seuils ont été fixés avant l'exécution. Sur huit, seuls S0 (le bilan de liaison inverse, 13 valeurs sur 13) et S6 (la mission lunaire) sont atteints. S1 à S5 et S7 sont NOT MET : la géométrie du volume de service supérieur et inférieur (43 cellules sur 52 et 48 sur 52), le volume de service supérieur à 15/20/25 dB-Hz, les six missions GEO, la mission HEO, et le diagramme paramétrique de lobes secondaires par rapport aux diagrammes de panneaux GPS mesurés. Presque chaque échec de S1 à S5 concerne GLONASS, et le livret imprime deux angles de référence différents pour lui ; une variante de diagnostic qui utilise l'autre paire amène S1, S2 et S4 à toutes les cellules, mais elle ne remplace pas l'exécution de référence et aucune ligne n'est VALIDATED. Le filtre absolu de l'exécution en formation est aussi trop confiant (erreur normalisée au carré moyenne bien supérieure à la valeur d'environ 3 que donne un filtre cohérent).

La comparaison enregistrée du modèle de disponibilité de l'utilisateur spatial avec le livret public Space Service Volume, d'après les résultats enregistrés de l'exécution préenregistrée (xval/gnss-ssv/results-run1.json, écrit par l'exemple ssv_booklet_check du moteur v0.40.0). Seuil par seuil, les cellules dans la tolérance : S0 13 sur 13 (MET) ; S1 43 sur 52 (NOT MET) ; S2 48 sur 52 (NOT MET) ; S3 122 sur 155 (NOT MET) ; S4 132 sur 156 (NOT MET) ; S5 18 sur 26 (NOT MET) ; S6 26 sur 26 (MET) ; S7 0 sur 20 diagrammes de panneaux (NOT MET). Seuls S0 et S6 sont atteints selon la lecture préenregistrée. Une variante de diagnostic qui utilise les autres angles GLONASS du livret amène S1, S2 et S4 à toutes les cellules, mais ne remplace pas l'exécution de référence. Aucune ligne du registre n'est VALIDATED. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.La comparaison enregistrée du modèle de disponibilité de l'utilisateur spatial avec le livret public Space Service Volume, d'après les résultats enregistrés de l'exécution préenregistrée (xval/gnss-ssv/results-run1.json, écrit par l'exemple ssv_booklet_check du moteur v0.40.0). Seuil par seuil, les cellules dans la tolérance : S0 13 sur 13 (MET) ; S1 43 sur 52 (NOT MET) ; S2 48 sur 52 (NOT MET) ; S3 122 sur 155 (NOT MET) ; S4 132 sur 156 (NOT MET) ; S5 18 sur 26 (NOT MET) ; S6 26 sur 26 (MET) ; S7 0 sur 20 diagrammes de panneaux (NOT MET). Seuls S0 et S6 sont atteints selon la lecture préenregistrée. Une variante de diagnostic qui utilise les autres angles GLONASS du livret amène S1, S2 et S4 à toutes les cellules, mais ne remplace pas l'exécution de référence. Aucune ligne du registre n'est VALIDATED. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.

Navigation de l'utilisateur spatial, ce que montre la comparaison.

Infrastructure lunaire (lunar-infrastructure)#

L'orbite et la surface de la Lune comme infrastructure de navigation et géodésique, en cinq études choisies par study : od-consistency (une détermination d'orbite embarquée par GNSS terrestre sur une orbite en halo, face à une détermination indépendante au sol), carrier-phase (fixation de l'ambiguïté entière entre des stations de surface et un orbiteur), frame-coestimation (le datum lunaire à partir de la télémétrie de stations terrestres avec et sans liaisons d'orbiteur), space-tie (écarts laser, VLBI et GNSS sur un seul engin spatial face à l'erreur de liaison locale) et geodesy-sensitivity (quelle famille d'observables voit les nombres de Love h2, k2 et l2). Le modèle est un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives. Page complète : docs/LUNAR-INFRASTRUCTURE.md.

kshana scenarios/lunar-infrastructure-od-consistency.toml
kshana scenarios/lunar-infrastructure-carrier-phase.toml            # quick; the scored run takes about eight minutes
kshana scenarios/lunar-infrastructure-frame-coestimation.toml
kshana scenarios/lunar-infrastructure-space-tie.toml
kshana scenarios/lunar-infrastructure-geodesy-sensitivity.toml
Cohérence d'une détermination d'orbite embarquée par GNSS terrestre sur une orbite de halo quasi rectiligne avec une détermination d'orbite indépendante au sol, à partir d'exécutions réelles du moteur v0.40.0 sur scenarios/lunar-infrastructure-od-consistency.toml et sa variante avec erreur de modèle (400 essais chacune). La différence normalisée moyenne q est de 5,81 sans erreur de modèle et de 5,95 avec une erreur d'accélération injectée de 3e-10 m/s2, pour 6 attendu : les deux solutions d'orbite sont cohérentes (seuil C1 MET). La part des essais au-dessus du point à 95 % est de 0,040 et 0,052 ; le seuil de détection de l'erreur injectée était d'au moins 0,5, il est donc NOT MET (C3) : la solution embarquée est connue à environ 352 m contre 23 m pour celle du sol, de sorte qu'un déplacement de dix mètres se cache dans sa covariance. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.Cohérence d'une détermination d'orbite embarquée par GNSS terrestre sur une orbite de halo quasi rectiligne avec une détermination d'orbite indépendante au sol, à partir d'exécutions réelles du moteur v0.40.0 sur scenarios/lunar-infrastructure-od-consistency.toml et sa variante avec erreur de modèle (400 essais chacune). La différence normalisée moyenne q est de 5,81 sans erreur de modèle et de 5,95 avec une erreur d'accélération injectée de 3e-10 m/s2, pour 6 attendu : les deux solutions d'orbite sont cohérentes (seuil C1 MET). La part des essais au-dessus du point à 95 % est de 0,040 et 0,052 ; le seuil de détection de l'erreur injectée était d'au moins 0,5, il est donc NOT MET (C3) : la solution embarquée est connue à environ 352 m contre 23 m pour celle du sol, de sorte qu'un déplacement de dix mètres se cache dans sa covariance. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine. Fixation des ambiguïtés entières de la phase de la porteuse entre des stations de surface lunaire et un orbiteur, d'après le résultat enregistré de l'exécution notée du moteur v0.40.0 (tests/fixtures/lunar_infra/phase_full_run.json : 3 longueurs d'arc, un Monte Carlo de 401 tirages chacune, écrit par scenarios/carrier-phase-scored.toml). 1 jour : succès 1,0 % (erreur type 0,5 %), 134 ambiguïtés, sigma de position de l'orbiteur 45,6 m en flottant et 18,5 m fixé ; 2 jours : succès 0,5 % (erreur type 0,4 %), 259 ambiguïtés, sigma de position de l'orbiteur 21,5 m en flottant et 8,7 m fixé ; 3 jours : succès 2,8 % (erreur type 0,8 %), 375 ambiguïtés, sigma de position de l'orbiteur 6,3 m en flottant et 2,1 m fixé. La fixation entière n'est pas atteinte : le succès reste entre 1 % et 3 % à 25 dBi, et à 12 dBi enregistrés le problème ne peut pas être formé. MODELLED : un modèle restreint à trois corps avec des simplifications déclarées et des entrées illustratives, et non une mesure d'une quantité lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine.Fixation des ambiguïtés entières de la phase de la porteuse entre des stations de surface lunaire et un orbiteur, d'après le résultat enregistré de l'exécution notée du moteur v0.40.0 (tests/fixtures/lunar_infra/phase_full_run.json : 3 longueurs d'arc, un Monte Carlo de 401 tirages chacune, écrit par scenarios/carrier-phase-scored.toml). 1 jour : succès 1,0 % (erreur type 0,5 %), 134 ambiguïtés, sigma de position de l'orbiteur 45,6 m en flottant et 18,5 m fixé ; 2 jours : succès 0,5 % (erreur type 0,4 %), 259 ambiguïtés, sigma de position de l'orbiteur 21,5 m en flottant et 8,7 m fixé ; 3 jours : succès 2,8 % (erreur type 0,8 %), 375 ambiguïtés, sigma de position de l'orbiteur 6,3 m en flottant et 2,1 m fixé. La fixation entière n'est pas atteinte : le succès reste entre 1 % et 3 % à 25 dBi, et à 12 dBi enregistrés le problème ne peut pas être formé. MODELLED : un modèle restreint à trois corps avec des simplifications déclarées et des entrées illustratives, et non une mesure d'une quantité lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sauvegarde de la vie humaine. Précision du référentiel lunaire à sept paramètres (trois translations, une échelle et trois rotations) à partir de la mesure de distance depuis des stations terrestres, avec et sans mesures de distance entre l'orbiteur et les stations de surface, à partir d'une exécution réelle du moteur v0.40.0 sur scenarios/lunar-infrastructure-frame-coestimation.toml. Le sigma de Cramér-Rao des translations et des rotations diminue avec les liaisons de l'orbiteur (par exemple t_z de 0,98 m à 0,046 m) ; la plus petite valeur propre d'information est multipliée par 111 et la trace de la CRLB tombe à 1,0 % (seuil F3 MET). Cela suppose que l'orbite est connue dans les axes lunaires, son erreur étant portée par le sigma de distance de l'orbiteur de 1 m. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.Précision du référentiel lunaire à sept paramètres (trois translations, une échelle et trois rotations) à partir de la mesure de distance depuis des stations terrestres, avec et sans mesures de distance entre l'orbiteur et les stations de surface, à partir d'une exécution réelle du moteur v0.40.0 sur scenarios/lunar-infrastructure-frame-coestimation.toml. Le sigma de Cramér-Rao des translations et des rotations diminue avec les liaisons de l'orbiteur (par exemple t_z de 0,98 m à 0,046 m) ; la plus petite valeur propre d'information est multipliée par 111 et la trace de la CRLB tombe à 1,0 % (seuil F3 MET). Cela suppose que l'orbite est connue dans les axes lunaires, son erreur étant portée par le sigma de distance de l'orbiteur de 1 m. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine. Précision des décalages entre les positions par télémétrie laser, VLBI et GNSS d'un même engin spatial, par rapport à l'erreur de la liaison locale au sol, à partir d'une exécution réelle du moteur v0.40.0 sur scenarios/lunar-infrastructure-space-tie.toml (un arc de 6.56 jours, sigmas par technique GNSS 10 m, VLBI 1 m, laser 0,1 m). Avec une liaison locale de 1 mm à 1 m, le sigma de translation laser moins GNSS reste proche de 1,04 m jusqu'à ce que la liaison atteigne 1 m : il est limité par le bruit de mesure des techniques, non par la liaison locale. Le plancher fixé par la liaison seule est la racine carrée de deux fois son sigma. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.Précision des décalages entre les positions par télémétrie laser, VLBI et GNSS d'un même engin spatial, par rapport à l'erreur de la liaison locale au sol, à partir d'une exécution réelle du moteur v0.40.0 sur scenarios/lunar-infrastructure-space-tie.toml (un arc de 6.56 jours, sigmas par technique GNSS 10 m, VLBI 1 m, laser 0,1 m). Avec une liaison locale de 1 mm à 1 m, le sigma de translation laser moins GNSS reste proche de 1,04 m jusqu'à ce que la liaison atteigne 1 m : il est limité par le bruit de mesure des techniques, non par la liaison locale. Le plancher fixé par la liaison seule est la racine carrée de deux fois son sigma. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine. Quelle famille d'observables est sensible aux nombres de Love lunaires h2, k2 et l2, à partir d'une exécution réelle du moteur v0.40.0 sur scenarios/lunar-infrastructure-geodesy-sensitivity.toml. Chaque cellule est la dérivée partielle quadratique moyenne des observations d'une famille par rapport à un paramètre, dans les unités propres à cette famille (les cellules se comparent donc le long d'une ligne, non d'une colonne) ; un tiret signifie que la famille n'a aucune sensibilité. Télémétrie laser : h2 7,6, k2 aucune, l2 9,8. Suivi de l'orbiteur : h2 aucune, k2 0,00086, l2 aucune. Gravimètre de surface : h2 2.9e+03, k2 4.3e+03, l2 aucune. Horloge de surface : h2 2.8e-17, k2 2.8e-17, l2 aucune. Avec les quatre familles, le sigma de Cramér-Rao est de 0,36 % du h2 nominal, 0,52 % du k2 et 1,16 % du l2. L'ajout d'une famille n'a jamais abaissé la plus petite valeur propre (28 ajouts sur 28), mais la trace de la pseudo-inverse n'était pas plus grande dans seulement 16 cas sur 28 : cette moitié du seuil G3 est NOT MET. La famille de l'orbiteur voit l'intégrale le long de la ligne de visée de l'accélération en k2, un chiffre de borne haute. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.Quelle famille d'observables est sensible aux nombres de Love lunaires h2, k2 et l2, à partir d'une exécution réelle du moteur v0.40.0 sur scenarios/lunar-infrastructure-geodesy-sensitivity.toml. Chaque cellule est la dérivée partielle quadratique moyenne des observations d'une famille par rapport à un paramètre, dans les unités propres à cette famille (les cellules se comparent donc le long d'une ligne, non d'une colonne) ; un tiret signifie que la famille n'a aucune sensibilité. Télémétrie laser : h2 7,6, k2 aucune, l2 9,8. Suivi de l'orbiteur : h2 aucune, k2 0,00086, l2 aucune. Gravimètre de surface : h2 2.9e+03, k2 4.3e+03, l2 aucune. Horloge de surface : h2 2.8e-17, k2 2.8e-17, l2 aucune. Avec les quatre familles, le sigma de Cramér-Rao est de 0,36 % du h2 nominal, 0,52 % du k2 et 1,16 % du l2. L'ajout d'une famille n'a jamais abaissé la plus petite valeur propre (28 ajouts sur 28), mais la trace de la pseudo-inverse n'était pas plus grande dans seulement 16 cas sur 28 : cette moitié du seuil G3 est NOT MET. La famille de l'orbiteur voit l'intégrale le long de la ligne de visée de l'accélération en k2, un chiffre de borne haute. MODELLED : un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives, non une mesure d'une grandeur lunaire. À titre consultatif : résultat d'analyse d'un outil de recherche et d'ingénierie, et non un équipement de navigation homologué ni un service de sécurité de la vie humaine.

État dans le registre : MODELLED, et trois seuils sont NOT MET. La numérique est vérifiée par rapport à des programmes numpy et scipy indépendants ; rien n'est comparé à une mesure d'une grandeur lunaire, et rien n'est VALIDATED. Atteints : les deux solutions d'orbite sont cohérentes (q moyen 5,81 contre 6 attendu), et les liaisons d'orbiteur augmentent la plus petite valeur propre du datum d'environ 111 fois, en supposant une orbite connue. Non atteints : l'erreur de modèle injectée de 3e-10 m/s2 n'est pas détectée (C3 : la solution embarquée est connue à environ 350 m près, de sorte qu'environ dix mètres se cachent dans sa covariance) ; la fixation entière n'est pas obtenue (1 à 3 % de réussite à 25 dBi, et à 12 dBi enregistrés le problème ne peut pas être formé) ; et la moitié « trace » de G3 pour l'ajout d'une famille d'observables (la trace a augmenté dans 12 ajouts sur 28, chaque fois parce que la famille a augmenté le rang). Chaque échec est figé par un test. Infrastructure lunaire.

Kshana Studio#

Ouvrez kshana.dev/studio et tout le moteur s'exécute dans votre navigateur, compilé en WebAssembly. Rien à installer, et rien n'est téléversé. Le Studio offre deux vues du même moteur, et un commutateur dans l'en-tête permet de passer de l'une à l'autre en conservant le scénario, la vue et tous les réglages que vous avez modifiés.

La vue Simple est celle où le Studio s'ouvre. Elle part de questions (combien de satellites puis-je voir, puis-je me fier à ma position, combien de temps une horloge peut-elle garder l'heure, que fait un brouilleur à mon récepteur) et d'une carte de tout ce que le moteur peut faire, chaque domaine avec sa part de méthodes validées. Ouvrez un scénario et la réponse vient en premier : une phrase simple, écrite pour ce que ce scénario mesure, puis ses chiffres clés et un graphique. Cinq réglages au plus sont affichés, ceux qui changent le plus la réponse ; les autres attendent sous Réglages avancés. Comment cela est calculé explique la méthode, et Pour les chercheurs donne les chiffres propres du moteur, le fichier de scénario, le code pour l'exécuter depuis Python et la citation.

Kshana Studio, vue Simple, sur le scénario fourni integrity-raim, moteur v0.40.0 en exécution locale. La question : la géométrie respecte-t-elle les limites d'alerte (niveau de protection horizontal et vertical) ? La réponse d'abord, marquée Résultat en direct : Oui, en grande partie : pour 95,3 % des 12 h. La borne d'erreur du récepteur est restée sous les limites d'alerte (40 m à l'horizontale et 50 m à la verticale) à 344 vérifications sur 361, et aucune position n'était trompeuse. Chiffres clés : temps pendant lequel la position est fiable 95,3 %, plus longue interruption 10 min, borne d'erreur typique 6,5 / 13 m, positions trompeuses 0. À côté, Essayer d'autres réglages avec cinq d'entre eux (l'erreur de distance, les deux limites d'alerte, la durée et le masque d'élévation) et Relancer, puis les sections repliées Réglages avancés (13 de plus), Comment cela est calculé (8 validées, 6 modélisées) et Pour les chercheurs. En dessous, les vues de ce résultat et les niveaux de protection tracés face à la limite d'alerte.Kshana Studio, vue Simple, sur le scénario fourni integrity-raim, moteur v0.40.0 en exécution locale. La question : la géométrie respecte-t-elle les limites d'alerte (niveau de protection horizontal et vertical) ? La réponse d'abord, marquée Résultat en direct : Oui, en grande partie : pour 95,3 % des 12 h. La borne d'erreur du récepteur est restée sous les limites d'alerte (40 m à l'horizontale et 50 m à la verticale) à 344 vérifications sur 361, et aucune position n'était trompeuse. Chiffres clés : temps pendant lequel la position est fiable 95,3 %, plus longue interruption 10 min, borne d'erreur typique 6,5 / 13 m, positions trompeuses 0. À côté, Essayer d'autres réglages avec cinq d'entre eux (l'erreur de distance, les deux limites d'alerte, la durée et le masque d'élévation) et Relancer, puis les sections repliées Réglages avancés (13 de plus), Comment cela est calculé (8 validées, 6 modélisées) et Pour les chercheurs. En dessous, les vues de ce résultat et les niveaux de protection tracés face à la limite d'alerte.

La vue Avancée est le tableau de bord complet : la bibliothèque de scénarios, cinq étapes numérotées (Choisir, Régler, Exécuter, Lire les résultats, Partager ou exporter), les chiffres clés avec des pastilles PASS et FAIL lorsque l'exécution énonce un seuil, et chaque panneau : vue d'ensemble, graphiques, cartes, relecture, le rapport du moteur et les exportations. Une seule zone de recherche atteint les scénarios, les domaines et les champs qu'ils contiennent, et vous pouvez épingler jusqu'à quatre exécutions et les comparer côte à côte.

L'écran d'ouverture de la vue Simple, et la vue Avancée après une exécution
Kshana Studio, vue Simple, écran d'ouverture, intitulé Que souhaitez-vous découvrir ?, avec le moteur v0.40.0 en direct et, dans la barre du haut, trois liens : Training debrief, Interference map et Receiver trust. Quatre questions : combien de satellites puis-je voir n'importe où sur Terre, puis-je me fier à ma position, combien de temps une horloge peut-elle garder l'heure sans satellites, et que fait un brouilleur à mon récepteur. Sous la première, son résultat enregistré : au moins 22 satellites en vue en tout lieu et 31 en moyenne avec GPS, Galileo, BeiDou et GLONASS ensemble, une position possible à 100 % des lieux et des instants, sur une carte du monde des satellites en vue, avec un bouton Ouvrir ce résultat. À côté, Tout ce que Kshana peut faire : 16 domaines et 139 scénarios prêts à exécuter, chaque tuile avec un petit graphique tiré d'une exécution enregistrée et sa part de méthodes validées, et 173 capacités validées sur 350 dans le registre.Kshana Studio, vue Simple, écran d'ouverture, intitulé Que souhaitez-vous découvrir ?, avec le moteur v0.40.0 en direct et, dans la barre du haut, trois liens : Training debrief, Interference map et Receiver trust. Quatre questions : combien de satellites puis-je voir n'importe où sur Terre, puis-je me fier à ma position, combien de temps une horloge peut-elle garder l'heure sans satellites, et que fait un brouilleur à mon récepteur. Sous la première, son résultat enregistré : au moins 22 satellites en vue en tout lieu et 31 en moyenne avec GPS, Galileo, BeiDou et GLONASS ensemble, une position possible à 100 % des lieux et des instants, sur une carte du monde des satellites en vue, avec un bouton Ouvrir ce résultat. À côté, Tout ce que Kshana peut faire : 16 domaines et 139 scénarios prêts à exécuter, chaque tuile avec un petit graphique tiré d'une exécution enregistrée et sa part de méthodes validées, et 173 capacités validées sur 350 dans le registre. Kshana Studio, vue Avancée, après une exécution du scénario fourni constellation-multi-gnss-coverage (Quatre constellations GNSS, une carte), moteur v0.40.0 en exécution locale. À gauche, la bibliothèque de scénarios, 139 scénarios dans 16 domaines. Les cinq étapes Choisir, Régler, Exécuter, Lire les résultats et Partager ou exporter, avec l'étape 4 en cours. Chiffres clés : 102 satellites, disponibilité 100 % (PASS), dilution de précision de position (PDOP) médiane 0,95 (PASS), 95e centile du PDOP 1,105 (PASS), 31,03 satellites en vue en moyenne et 22 au minimum. En dessous, la rangée de panneaux avec Couverture sélectionnée, la barre de relecture, une carte du monde du PDOP moyen de 0,831 à 1,0853 avec chaque satellite tracé, et les chiffres de couverture globale.Kshana Studio, vue Avancée, après une exécution du scénario fourni constellation-multi-gnss-coverage (Quatre constellations GNSS, une carte), moteur v0.40.0 en exécution locale. À gauche, la bibliothèque de scénarios, 139 scénarios dans 16 domaines. Les cinq étapes Choisir, Régler, Exécuter, Lire les résultats et Partager ou exporter, avec l'étape 4 en cours. Chiffres clés : 102 satellites, disponibilité 100 % (PASS), dilution de précision de position (PDOP) médiane 0,95 (PASS), 95e centile du PDOP 1,105 (PASS), 31,03 satellites en vue en moyenne et 22 au minimum. En dessous, la rangée de panneaux avec Couverture sélectionnée, la barre de relecture, une carte du monde du PDOP moyen de 0,831 à 1,0853 avec chaque satellite tracé, et les chiffres de couverture globale.

Le code source du Studio et ses notes de compilation sont dans web/README.md.

Le site#

Le reste de kshana.dev est construit à partir des propres fichiers de ce dépôt et d'exécutions du moteur : missions, capacités, le registre de preuves, la recherche publiée et les éditions.

Trois pages de kshana.dev côte à côte. L'en-tête d'accueil : la ligne de nom Kshana · क्षण · l'instant précis au-dessus du titre Répétez la minute où le GNSS s'éteint, avec la console de mission d'une exécution réelle du moteur v0.40.0 (un globe et trois graphiques en direct : erreur de temps de l'horloge, densité porteuse sur bruit et niveau de protection). Preuves, Recherche publiée : les six articles arXiv construits sur le moteur ouvert, le plus récent avec une figure du moteur. Éditions, Kshana Pro, le même moteur, amplifié : Free exécute un scénario, Pro répond à la question du programme.Trois pages de kshana.dev côte à côte. L'en-tête d'accueil : la ligne de nom Kshana · क्षण · l'instant précis au-dessus du titre Répétez la minute où le GNSS s'éteint, avec la console de mission d'une exécution réelle du moteur v0.40.0 (un globe et trois graphiques en direct : erreur de temps de l'horloge, densité porteuse sur bruit et niveau de protection). Preuves, Recherche publiée : les six articles arXiv construits sur le moteur ouvert, le plus récent avec une figure du moteur. Éditions, Kshana Pro, le même moteur, amplifié : Free exécute un scénario, Pro répond à la question du programme.

Capacités#

Un seul moteur couvre toute la chaîne de défaillance, du premier satellite brouillé à la dernière nanoseconde de holdover d'horloge. Le moteur compte 92 types de scénario ; kshana kinds les liste et docs/SCENARIOS.md documente chaque champ.

Capacité À quoi il répond
Spectre comment un brouilleur prend la bande L du GNSS, bande par bande, seconde par seconde
Horloges et synchronisation temporelle combien de temps chaque horloge garde l'heure après la perte du GNSS
Constellations autour de n'importe quel corps couverture, dilution de précision et disponibilité autour de la Terre, de la Lune ou de Mars
Système solaire où se trouve chaque planète, et le temps de propagation de la lumière de toute liaison
Navigation en orbite basse un passage, une liaison, un message de navigation et une position fusionnée, étape par étape
Campagnes une mission enchaînée, un balayage ou un ensemble Monte Carlo dans un seul scénario
Animation la série temporelle d'une exécution sous forme de dessin animé, de lecteur ou d'images
Rapports chaque chiffre avec son unité et son étiquette, en HTML (HyperText Markup Language) et JSON (JavaScript Object Notation)
Exports d'interopérabilité orbites et géométrie pour d'autres outils : SP3, CCSDS OMM et OEM, CZML, KML, GeoJSON, STK et SigMF
Confiance maritime la passerelle peut-elle se fier à cette position : un score de 0 à 100 et des motifs pour le NMEA d'un navire, en direct ou depuis un journal (à titre consultatif, pas un équipement de navigation homologué)
Flux NMEA de formation NMEA de passerelle synthétique avec brouillage et leurrage scénarisés et un journal d'instructeur, pour la formation des équipages (texte seulement ; jamais pour les systèmes de navigation en service d'un navire ; à titre consultatif, pas un équipement de navigation homologué)
Carte des interférences où des aéronefs et des navires ont signalé des données de navigation dégradées, et dans quelle mesure un itinéraire est touché
Région de l'émetteur où peut se trouver, sous des hypothèses déclarées, une source de rapports de position dégradés : des régions à un niveau de confiance déclaré, un centroïde avec son ellipse, jamais un point (MODELLED ; kshana interference-map locate)
Paquets de preuves un enregistrement technique signé, vérifiable hors ligne, de la fenêtre de journal d'un navire et de ce que le moteur en a calculé, pour un rapport d'incident (à titre consultatif, pas un équipement de navigation homologué)
Télémétrie de confiance le flux de confiance sous forme de métriques Prometheus, d'événements SIEM et, en option, d'OpenTelemetry, avec un tableau de bord Grafana d'exemple (deploy/grafana/kshana-gnss-trust.json)
Signal K et OpenCPN le score de confiance sur le serveur Signal K d'un bateau et dans OpenCPN, avec une version de référence pour un petit ordinateur placé à côté du récepteur (à titre consultatif, pas un équipement de navigation homologué)
Export pour banc d'essai kshana bench-export : le mouvement du véhicule et les événements d'un scénario pour un simulateur GNSS de laboratoire (aucun signal n'est écrit), et comment noter ensuite le journal du récepteur
Cartographie de compliance et rapport kshana compliance-report : quelles lignes de cadres publics de résilience un ensemble d'exécutions apporte des éléments de preuve en faveur de, et l'écart qui reste
Notebooks tutoriels exécutables : flux de confiance et de formation pour un navire, exposition d'un itinéraire à une carte d'interférences, cartographie de compliance et le test bench, GDOP quantique contre classique
Vérificateur Galileo OSNMA les données de navigation de quels satellites un récepteur peut authentifier par cryptographie, et pourquoi une vérification échoue ; Kshana n'accorde aucun droit au titre des droits de propriété intellectuelle de l'ICD OSNMA de l'UE (voir le NOTICE dans la page)

Les formats d'exportation en toutes lettres : SP3 est le Standard Product 3 ; CCSDS OMM et OEM sont les Orbit Mean-elements Messages et Orbit Ephemeris Messages du Consultative Committee for Space Data Systems ; CZML et KML sont les Cesium et Keyhole Markup Languages ; STK est Systems Tool Kit ; SigMF est le Signal Metadata Format.

La campagne enchaînée campaign-jam-spoof-holdover-integrity, une exécution réelle du moteur (graine 20260928) : 6 phases (Nominal → Brouillage → Leurrage → Holdover → Alarme d'intégrité → Récupération) et 18 exécutions membres sur une grille de 10 s sur T+01:16:10. Trois voies : l'erreur de temps de l'horloge face à une garde de 50 ns (pic 62,7 ns), la densité porteuse sur bruit effective face à un plancher de 25 dB-Hz (minimum -12.2 dB-Hz), et le niveau de protection vertical face à une limite d'alerte de 50 m (pic 135,4 m), avec les événements d'alarme de l'exécution : T+00:20:00 alarmes du détecteur de leurrage RF (moniteurs fusionnés de cohérence, de puissance et de qualité du signal) ; T+00:26:10 alarmes du moniteur de leurrage assisté par l'horloge.La campagne enchaînée campaign-jam-spoof-holdover-integrity, une exécution réelle du moteur (graine 20260928) : 6 phases (Nominal → Brouillage → Leurrage → Holdover → Alarme d'intégrité → Récupération) et 18 exécutions membres sur une grille de 10 s sur T+01:16:10. Trois voies : l'erreur de temps de l'horloge face à une garde de 50 ns (pic 62,7 ns), la densité porteuse sur bruit effective face à un plancher de 25 dB-Hz (minimum -12.2 dB-Hz), et le niveau de protection vertical face à une limite d'alerte de 50 m (pic 135,4 m), avec les événements d'alarme de l'exécution : T+00:20:00 alarmes du détecteur de leurrage RF (moniteurs fusionnés de cohérence, de puissance et de qualité du signal) ; T+00:26:10 alarmes du moniteur de leurrage assisté par l'horloge.
Chaque capacité, tracée à partir d'une exécution réelle : la cascade de la bande L, la carte de couverture, le système solaire et un passage en orbite basse
La bande L du GNSS sous forme d'une densité spectrale de puissance sur 60 s, d'après une exécution réelle du type de scénario spectrum (l-band-waterfall-jamming.toml, graine 7, moteur v0.40.0) : la fréquence en abscisse, le temps vers le bas, la couleur pour la puissance au-dessus du plancher de bruit de -202.0 dBW/Hz. Brouilleurs : dispositif de brouillage de confidentialité à balayage (chirp, allumé à 10 s, éteint à 40 s) ; tonalité CW sur L1 (cw, allumé à 30 s) ; bruit à bande étroite sur L2 (narrowband, allumé à 45 s). Pire bande GPS L1 C/A : C/N0 effectif minimal 3,2 dB-Hz à 31 s face à un plancher de poursuite de 25 dB-Hz. GPS L1 C/A minimum 3,2 dB-Hz ; Galileo E1 minimum 4,7 dB-Hz ; GPS L2C minimum 36,9 dB-Hz ; GPS L5 minimum 44,1 dB-Hz ; Galileo E5a minimum 47,0 dB-Hz.La bande L du GNSS sous forme d'une densité spectrale de puissance sur 60 s, d'après une exécution réelle du type de scénario spectrum (l-band-waterfall-jamming.toml, graine 7, moteur v0.40.0) : la fréquence en abscisse, le temps vers le bas, la couleur pour la puissance au-dessus du plancher de bruit de -202.0 dBW/Hz. Brouilleurs : dispositif de brouillage de confidentialité à balayage (chirp, allumé à 10 s, éteint à 40 s) ; tonalité CW sur L1 (cw, allumé à 30 s) ; bruit à bande étroite sur L2 (narrowband, allumé à 45 s). Pire bande GPS L1 C/A : C/N0 effectif minimal 3,2 dB-Hz à 31 s face à un plancher de poursuite de 25 dB-Hz. GPS L1 C/A minimum 3,2 dB-Hz ; Galileo E1 minimum 4,7 dB-Hz ; GPS L2C minimum 36,9 dB-Hz ; GPS L5 minimum 44,1 dB-Hz ; Galileo E5a minimum 47,0 dB-Hz. Satellites en vue sur toute la Terre pendant une journée, d'après une exécution réelle de constellation-design (constellation-multi-gnss-coverage.toml, moteur exécuté par ce générateur) : 102 satellites (GPS 24, Galileo 24, BeiDou 30, GLONASS 24). Chaque cellule de 10 degrés est ombrée selon le nombre moyen de satellites au-dessus du masque de 10 degrés (27,2 à 36,5) ; les points sont les échantillons de trace au sol du moteur, un par heure et par satellite. Disponibilité globale 100,00 % pour un PDOP inférieur ou égal à 6, PDOP médian 0,95, 31,0 satellites en vue en moyenne et 22 au minimum.Satellites en vue sur toute la Terre pendant une journée, d'après une exécution réelle de constellation-design (constellation-multi-gnss-coverage.toml, moteur exécuté par ce générateur) : 102 satellites (GPS 24, Galileo 24, BeiDou 30, GLONASS 24). Chaque cellule de 10 degrés est ombrée selon le nombre moyen de satellites au-dessus du masque de 10 degrés (27,2 à 36,5) ; les points sont les échantillons de trace au sol du moteur, un par heure et par satellite. Disponibilité globale 100,00 % pour un PDOP inférieur ou égal à 6, PDOP médian 0,95, 31,0 satellites en vue en moyenne et 22 au minimum. Le système solaire à l'époque du scénario 2026-09-28T00:00:00, d'après une exécution réelle du type de scénario solar-system (solar-system-tour.toml) : le Soleil, 9 planètes et la planète naine Pluton vus de dessus l'écliptique, distances comprimées de façon logarithmique pour l'affichage, avec le temps de propagation de la lumière à sens unique de chaque corps depuis la Terre. Mercure 0,47 au, 10,1 minutes-lumière, VALIDATED ; Vénus 0,73 au, 3,0 minutes-lumière, VALIDATED ; Mars 1,55 au, 14,0 minutes-lumière, VALIDATED ; Jupiter 5,30 au, 49,5 minutes-lumière, VALIDATED ; Saturne 9,44 au, 70,2 minutes-lumière, VALIDATED ; Uranus 19,44 au, 157,4 minutes-lumière, MODELLED ; Neptune 29,88 au, 240,2 minutes-lumière, MODELLED ; Pluton 35,61 au, 292,2 minutes-lumière, MODELLED. Liaisons : Mars vers Jupiter à sens unique 2193,5 s ; Saturne vers la Terre à sens unique 4212,2 s ; Europe vers Jupiter à sens unique 2,2 s.Le système solaire à l'époque du scénario 2026-09-28T00:00:00, d'après une exécution réelle du type de scénario solar-system (solar-system-tour.toml) : le Soleil, 9 planètes et la planète naine Pluton vus de dessus l'écliptique, distances comprimées de façon logarithmique pour l'affichage, avec le temps de propagation de la lumière à sens unique de chaque corps depuis la Terre. Mercure 0,47 au, 10,1 minutes-lumière, VALIDATED ; Vénus 0,73 au, 3,0 minutes-lumière, VALIDATED ; Mars 1,55 au, 14,0 minutes-lumière, VALIDATED ; Jupiter 5,30 au, 49,5 minutes-lumière, VALIDATED ; Saturne 9,44 au, 70,2 minutes-lumière, VALIDATED ; Uranus 19,44 au, 157,4 minutes-lumière, MODELLED ; Neptune 29,88 au, 240,2 minutes-lumière, MODELLED ; Pluton 35,61 au, 292,2 minutes-lumière, MODELLED. Liaisons : Mars vers Jupiter à sens unique 2193,5 s ; Saturne vers la Terre à sens unique 4212,2 s ; Europe vers Jupiter à sens unique 2,2 s. Un passage en orbite terrestre basse (LEO) d'après une exécution réelle du type de scénario leo-pass (leo-pass-iridium.toml, moteur exécuté par ce générateur) : Iridium-pass à 781 km, bande STL à 1621 MHz, vu par un utilisateur aérien à 50° N 30° O. Au-dessus du masque de 5° pendant 750 s, élévation maximale 65,0° à 444 s. La densité porteuse sur bruit culmine à 80,5 dB-Hz (médiane 71,3), soit 34,3 dB au-dessus de la médiane GNSS de 46,2 dB-Hz pour 8 satellites GPS en vue (38,2 à 51,1 dB-Hz) ; le Doppler atteint 35,4 kHz.Un passage en orbite terrestre basse (LEO) d'après une exécution réelle du type de scénario leo-pass (leo-pass-iridium.toml, moteur exécuté par ce générateur) : Iridium-pass à 781 km, bande STL à 1621 MHz, vu par un utilisateur aérien à 50° N 30° O. Au-dessus du masque de 5° pendant 750 s, élévation maximale 65,0° à 444 s. La densité porteuse sur bruit culmine à 80,5 dB-Hz (médiane 71,3), soit 34,3 dB au-dessus de la médiane GNSS de 46,2 dB-Hz pour 8 satellites GPS en vue (38,2 à 51,1 dB-Hz) ; le Doppler atteint 35,4 kHz.

Exécutez n'importe lequel avec kshana example <scenario> > s.toml && kshana s.toml : les scénarios sont l-band-waterfall-jamming, constellation-multi-gnss-coverage, solar-system-tour et leo-pass-iridium.

Les capacités maritimes et d'interférence, tracées à partir d'entrées synthétiques enregistrées : un score de confiance, une carte d'interférences avec exposition d'itinéraire, un flux de formation et un paquet de preuves
Score de confiance sur un passage synthétique, issu d'une exécution réelle du moteur v0.40.0 sur examples/maritime-trust (un journal NMEA inventé d'un ferry sur une liaison Tallinn-Helsinki, 3001 époques à 1 Hz). Trois couloirs partagent un même axe des temps. En haut : la distance entre la position rapportée par le récepteur et la position réelle du navire, qui reste à quelques mètres près jusqu'à environ 1576 s, moment où l'entraînement de position scénarisé du journal l'écarte, tandis que le récepteur continue de rapporter un point de position valide. Au milieu : le score de confiance de 0 à 100, non calculé pendant les 300 premières secondes d'étalonnage, dans la bande nominal (au moins 90) jusqu'à l'entraînement, puis chutant à travers la bande degraded (au moins 55) pour atteindre la bande untrusted. En bas : la bande de chaque époque sous forme de ruban coloré portant son nom. Le score est à titre consultatif. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire. Le journal est inventé pour montrer le format et les moniteurs ; ce n'est pas une mesure et il ne dit rien de la façon dont un récepteur se comporterait.Score de confiance sur un passage synthétique, issu d'une exécution réelle du moteur v0.40.0 sur examples/maritime-trust (un journal NMEA inventé d'un ferry sur une liaison Tallinn-Helsinki, 3001 époques à 1 Hz). Trois couloirs partagent un même axe des temps. En haut : la distance entre la position rapportée par le récepteur et la position réelle du navire, qui reste à quelques mètres près jusqu'à environ 1576 s, moment où l'entraînement de position scénarisé du journal l'écarte, tandis que le récepteur continue de rapporter un point de position valide. Au milieu : le score de confiance de 0 à 100, non calculé pendant les 300 premières secondes d'étalonnage, dans la bande nominal (au moins 90) jusqu'à l'entraînement, puis chutant à travers la bande degraded (au moins 55) pour atteindre la bande untrusted. En bas : la bande de chaque époque sous forme de ruban coloré portant son nom. Le score est à titre consultatif. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire. Le journal est inventé pour montrer le format et les moniteurs ; ce n'est pas une mesure et il ne dit rien de la façon dont un récepteur se comporterait. Deux jours synthétiques de carte d'interférence, tirés des échantillons versionnés dans examples/interference-map/output, chacun avec son propre itinéraire synthétique et les parts d'exposition d'itinéraire que le moteur rapporte. À gauche, un jour ADS-B : 1 cellule dégradée, 6 non dégradées, 4 non évaluées (hachurées) et des cellules sans entrée, dessinées vides, qui n'ont pas été observées. L'itinéraire fait 525 km : 11,5 % de sa longueur dans des cellules dégradées, 38,3 % non dégradées, 9,1 % non évaluées et 41,1 % non observées. À droite, un jour AIS : cellules signalées par les détecteurs de cercle et de terre, cellules non anormales et cellules vides ; l'itinéraire fait 454 km avec 10,5 % dans des cellules anormales, 21,2 % non anormales, 0,0 % non évaluées et 68,3 % non observées. L'ADS-B et l'AIS sont des couches distinctes, jamais combinées. Une cellule signalée n'est pas un constat d'interférence, et une cellule sans couleur n'a pas été observée, ce qui n'est pas la même chose que dégagée. Toutes les données sont inventées, en plein milieu de l'Atlantique, et ne sont pas une mesure.Deux jours synthétiques de carte d'interférence, tirés des échantillons versionnés dans examples/interference-map/output, chacun avec son propre itinéraire synthétique et les parts d'exposition d'itinéraire que le moteur rapporte. À gauche, un jour ADS-B : 1 cellule dégradée, 6 non dégradées, 4 non évaluées (hachurées) et des cellules sans entrée, dessinées vides, qui n'ont pas été observées. L'itinéraire fait 525 km : 11,5 % de sa longueur dans des cellules dégradées, 38,3 % non dégradées, 9,1 % non évaluées et 41,1 % non observées. À droite, un jour AIS : cellules signalées par les détecteurs de cercle et de terre, cellules non anormales et cellules vides ; l'itinéraire fait 454 km avec 10,5 % dans des cellules anormales, 21,2 % non anormales, 0,0 % non évaluées et 68,3 % non observées. L'ADS-B et l'AIS sont des couches distinctes, jamais combinées. Une cellule signalée n'est pas un constat d'interférence, et une cellule sans couleur n'a pas été observée, ce qui n'est pas la même chose que dégagée. Toutes les données sont inventées, en plein milieu de l'Atlantique, et ne sont pas une mesure. Flux d'entraînement du scénario coastal-drag-off (moteur v0.40.0, graine 22, 25 minutes à une position par 10 s du journal de l'instructeur). Une carte montre la trajectoire réelle du navire et la trajectoire que rapporte le récepteur : elles concordent jusqu'au début d'une dérive de position scénarisée à 421 s, la trajectoire rapportée s'éloigne alors de la trajectoire réelle tandis que le récepteur conserve une position valide, et elle revient d'un saut à la fin de l'événement à 1140 s. À côté, la distance entre les deux trajectoires au fil du temps, et la densité moyenne de porteuse sur bruit que rapporte le récepteur, qui monte à un niveau relevé tant que l'événement dure. Données d'entraînement synthétiques générées par Kshana. Pour l'entraînement et l'essai uniquement : ne jamais envoyer ce flux aux systèmes de navigation actifs d'un navire. À titre consultatif, et non un équipement de navigation homologué. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire. Les positions, dates et trajectoires sont inventées.Flux d'entraînement du scénario coastal-drag-off (moteur v0.40.0, graine 22, 25 minutes à une position par 10 s du journal de l'instructeur). Une carte montre la trajectoire réelle du navire et la trajectoire que rapporte le récepteur : elles concordent jusqu'au début d'une dérive de position scénarisée à 421 s, la trajectoire rapportée s'éloigne alors de la trajectoire réelle tandis que le récepteur conserve une position valide, et elle revient d'un saut à la fin de l'événement à 1140 s. À côté, la distance entre les deux trajectoires au fil du temps, et la densité moyenne de porteuse sur bruit que rapporte le récepteur, qui monte à un niveau relevé tant que l'événement dure. Données d'entraînement synthétiques générées par Kshana. Pour l'entraînement et l'essai uniquement : ne jamais envoyer ce flux aux systèmes de navigation actifs d'un navire. À titre consultatif, et non un équipement de navigation homologué. Logiciel à titre consultatif, et non un équipement de navigation homologué (IEC 61108, IEC 61162) : l'opérateur reste responsable de la navigation du navire. Les positions, dates et trajectoires sont inventées. La structure d'un paquet de preuves. Un journal de récepteur (NMEA, u-blox UBX, RINEX 3 ou un journal Android) et une fenêtre temporelle entrent dans kshana receiver-trust evidence, qui écrit sept fichiers : log-slice.bin, config.json, epochs.json, summary.html, manifest.json, manifest.sig et un timestamp.tsr facultatif. Le manifeste consigne le SHA-256 du journal entier et de chaque fichier, ainsi qu'une chaîne de hachages sur les fichiers ; la signature couvre le manifeste. kshana evidence verify vérifie la signature, le hachage de chaque fichier, la chaîne et l'absence de tout fichier non listé, et retourne 0 lorsque la vérification réussit, 1 lorsque quelque chose a échoué et 3 lorsque le signataire n'était pas épinglé. Un paquet est un enregistrement technique, pas un avis juridique.La structure d'un paquet de preuves. Un journal de récepteur (NMEA, u-blox UBX, RINEX 3 ou un journal Android) et une fenêtre temporelle entrent dans kshana receiver-trust evidence, qui écrit sept fichiers : log-slice.bin, config.json, epochs.json, summary.html, manifest.json, manifest.sig et un timestamp.tsr facultatif. Le manifeste consigne le SHA-256 du journal entier et de chaque fichier, ainsi qu'une chaîne de hachages sur les fichiers ; la signature couvre le manifeste. kshana evidence verify vérifie la signature, le hachage de chaque fichier, la chaîne et l'absence de tout fichier non listé, et retourne 0 lorsque la vérification réussit, 1 lorsque quelque chose a échoué et 3 lorsque le signataire n'était pas épinglé. Un paquet est un enregistrement technique, pas un avis juridique.

Les quatre sont des données fictives et à titre consultatif : elles montrent le format et le comportement du logiciel, non la façon dont un récepteur ou un système se comporte face aux interférences. Exécutez le premier avec kshana receiver-trust examples/maritime-trust/session.toml, le deuxième avec kshana route-exposure sur les échantillons de examples/interference-map/, le troisième avec kshana nmea-scenario scenarios/training/coastal-drag-off.toml --out drag.nmea (à des fins de formation seulement : ne l'envoyez jamais à un équipement de navigation en service), et le quatrième comme dans docs/EVIDENCE-PACKS.md.

Le tableau complet des capacités, domaine par domaine

Le détail complet, domaine par domaine, suit ; pour un registre de maturité par capacité, voir docs/CAPABILITY.md et docs/VALIDATION.md.

Domaine Capacité
Orbite et géométrie Propagation SGP4/SDP4 (validée à 4,12 mm près par rapport aux 666 vecteurs AIAA 2006-6753) ; vrais éléments à deux lignes (un instantané Celestrak gps-ops enregistré et daté) ou constellations Walker-delta synthétiques dont les éléments moyens réalisent la formule i:T/P/F à moins de 1 km sur une propagation de 24 h ; visibilité multi-constellation, dilution de précision — géométrique, de position, horizontale, verticale et temporelle (GDOP/PDOP/HDOP/VDOP/TDOP), validée à 1e-6 près par rapport à gnss_lib_py 1.0.4, Stanford NAV Lab (Navigation and Autonomous Vehicles Laboratory), et disponibilité GNSS ; un optimiseur de conception de constellation sans gradient, un dimensionnement du nombre minimal de satellites par bandes de couverture (streets of coverage), un outil de comparaison multi-constellation, et un balayage de conception Walker qui tabule couverture / PDOP / temps de revisite sur une grille plans × satellites et rapporte les conceptions optimales au sens de Pareto.
Propagateur numérique Un propagateur numérique Cowell (src/propagator.rs) complétant la voie analytique SGP4/SDP4, avec un modèle de forces hiérarchique à sept perturbations (src/forces.rs) : deux corps + le champ zonal J2–J6 complet (les coefficients harmoniques zonaux d'aplatissement de la Terre J2 à J6 ; le gradient analytique exact de son potentiel perturbateur), un géopotentiel harmonique sphérique tesséral EGM2008 jusqu'au degré/ordre 70 facultatif (Earth Gravitational Model 2008 ; src/gravity_sh.rs ; vrais coefficients de la NGA — la National Geospatial-Intelligence Agency des États-Unis —, récurrence de Legendre normalisée de Holmes–Featherstone, recoupée avec les fonctions de Legendre sous forme fermée et l'identité analytique ∇V), la gravité de troisième corps Soleil et Lune pilotée par l'époque (une éphéméride intégrée de faible précision, sans noyau DE/SPK — Development Ephemeris / SPICE Spacecraft and Planet Kernel), la pression de radiation solaire (modèle boulet de canon avec ombre conique ombre+pénombre), la traînée atmosphérique (densité exponentielle par morceaux de Vallado, atmosphère en corotation), la correction relativiste post-newtonienne de Schwarzschild, et le terme d'entraînement des référentiels de Lense–Thirring (IERS — International Earth Rotation and Reference Systems Service — Conventions 2010 §10, linéaire en le moment cinétique de la Terre, de ~1 à 2 ordres en dessous de Schwarzschild) — piloté par un choix de deux intégrateurs adaptatifs (RK4 — Runge–Kutta d'ordre quatre — à doublement de pas ou la paire emboîtée Dormand–Prince RK5(4)). Validé par rapport à Orekit 12,2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853 — 278 époques en LEO (orbite terrestre basse) + GTO (orbite de transfert géostationnaire), les niveaux de forces conservatives concordant à un pire cas de |Δr| 0,08 m sur 24 h (tests/numerical_cowell_propagator_reference.rs) ; le niveau de traînée atmosphérique est caractérisé séparément (≈ 333 m / 24 h) et les entrées absolues d'éphéméride du Soleil et de la Lune et de densité restent honnêtement modélisées. Éléments internes supplémentaires (non une validation externe) : l'orbite non perturbée est vérifiée par rapport à la solution de Kepler exacte en variables universelles à moins d'un mètre sur 24 h, l'énergie et le moment cinétique se conservent à ~1e-9, et chaque perturbation correspond à une signature en forme fermée dérivée à la main.
Manœuvres et conception de trajectoire Nœuds de ΔV impulsionnels avec propagation de covariance 6×6 (repères d'erreur d'exécution ECI — inertiel centré sur la Terre — / LVLH — verticale locale, horizontale locale), intégration de poussée finie vérifiée par rapport à l'équation de fusée de Tsiolkovsky sous forme fermée à < 0,01 %, un solveur Lambert à une révolution d'Izzo-2015, un propagateur Kepler exact en variables universelles, et un balayage porkchop (lancement × arrivée) de C3 (énergie de lancement) / V∞ à l'arrivée émis sous forme de grille de contours JSON — la couche de simulation de performance au-dessus de GMAT/Orekit, chaque sortie de Lambert étant vérifiée en aller-retour par rapport à la vérité à deux corps et le minimum du porkchop par rapport au plancher analytique de Hohmann.
Systèmes de temps et référentiels Échelles UTC / TAI / TT / UT1 avec secondes intercalaires de l'IERS (temps universel coordonné, temps atomique international, temps terrestre, et le temps de rotation de la Terre Universal Time 1), une API (interface de programmation) de date julienne, l'angle de rotation de la Terre (ERA) de l'IAU-2000 (Union astronomique internationale), TEME ↔ ECEF fondé sur le GMST (temps sidéral moyen de Greenwich) (vrai équateur, équinoxe moyen ↔ centré sur la Terre, fixe par rapport à la Terre) avec référentiels géodésiques WGS-84 (World Geodetic System 1984), précession IAU 2006 (Fukushima–Williams), nutation IAU 2000A/2000B complète, mouvement du pôle de l'IERS, et la réduction GCRS↔ITRS IAU 2006/2000A fondée sur le CIO sans équinoxe (CIO = Celestial Intermediate Origin) — le tout validé bit à bit par rapport aux vecteurs SOFA/ERFA, et recoupé indépendamment avec ANISE (la réimplémentation NAIF/SPICE en Rust pur ; NAIF = Navigation and Ancillary Information Facility de la NASA, l'administration nationale de l'aéronautique et de l'espace des États-Unis) : le GCRS→ITRS de kshana par rapport à l'ITRF93 d'ANISE (International Terrestrial Reference Frame 1993) à partir de earth_latest_high_prec.bpc du JPL, les mêmes paramètres d'orientation de la Terre de l'IERS étant fournis aux deux, concordent à ≤ 0,86 m au sol / ≤ 3,6 m en orbite GNSS (max 0,028″) sur huit époques 2020–2023.
Inertiel INS à composantes liées (strapdown) à trois axes — attitude par quaternion, mécanisation NED (nord-est-bas) WGS-84, compensation du coning/sculling, et un modèle déterministe d'erreur d'IMU (facteur d'échelle, désalignement, sensibilité à g, quantification, dérive) ; un accéléromètre à interféromètre à atomes froids de premiers principes (phase de Mach–Zehnder, bruit de projection quantique, décroissance du contraste, couplage aux vibrations) qui dérive le coefficient de marche aléatoire de vitesse ; et un filtre particulaire à rééchantillonnage d'importance séquentiel pour la navigation assistée par carte (référencée au terrain ou à la gravité) en l'absence de GPS.
Alt-PNT (sans GPS) Un modèle de mesure de gravimètre à atomes froids dont le plancher de bruit blanc (σ = ASD/√τ, ASD = densité spectrale d'amplitude) est dérivé de la physique de l'accéléromètre CAI ; un champ d'anomalie de gravité en harmoniques sphériques de bas degré, pleinement normalisé (vérifié par rapport aux fonctions de Legendre sous forme fermée et à une anomalie à un seul terme dérivée à la main) plus des mascons synthétiques ; le noyau de synthèse des fonctionnelles de gravité (gravity_sh::gravity_magnitude / gravity_disturbance_mgal) — le « lecteur de carte » auquel un navigateur assisté par la gravité se compare — est validé par rapport à la norme de gravité normale GRS80 (Geodetic Reference System 1980), reproduisant la gravité normale de Somigliana sous forme fermée et les γ_e / γ_p publiés à 3.5e-12 et produisant une carte de perturbation physiquement bornée à partir du vrai champ EGM2008 de l'ICGEM (International Centre for Global Earth Models) (RMS — valeur efficace — ≈ 26 mGal, max ≈ 89 mGal à d/o 70 ; tests/icgem_gravity_reference.rs) ; et un filtre particulaire d'appariement de carte de gravité qui retrouve une trajectoire sans GPS à partir de la séquence d'anomalies qu'elle traverse. Il s'étend à la navigation référencée au terrain (TERCOM/SITAN — appariement de contours de terrain / Sandia Inertial Terrain-Aided Navigation — par rapport à un MNT (modèle numérique d'élévation) .hgt SRTM (Shuttle Radar Topography Mission), src/altpnt/terrain.rs), à un champ principal géomagnétique IGRF-14 (14e génération de l'International Geomagnetic Reference Field) jusqu'au degré/ordre 13 (src/igrf.rs, vérifié par rapport à la forme fermée du dipôle incliné et à des différences finies de ∇V), et à un navigateur combiné gravité + magnétisme + terrain qui fusionne les trois canaux scalaires dans un seul filtre particulaire (l'information est additive — aucun canal ne dégrade la position). Un benchmark de 60 minutes sans GPS (une interruption d'environ 700 km / une heure où la solution inertielle dérive jusqu'à environ 70 km) est récupéré à ~145 m (< 500 m) par un apparieur hiérarchique du grossier au fin — la cible Quantum Wayfarer du NAVISP (Navigation Innovation and Support Programme) de l'ESA.
Fusion EKF (filtre de Kalman étendu) à 15 états en erreur, GNSS/INS faiblement couplé, avec rétroaction en boucle fermée (le paquet gnss-ins) ; une mise à jour de pseudodistance fortement couplée qui continue de corriger avec moins de quatre satellites ; un filtre couplé horloge + position ; un estimateur général de filtre de Kalman sans parfum (à points sigma) pour des mesures fortement non linéaires ; un navigateur UKF GNSS/INS fortement couplé (pseudodistance + Doppler) dont la marche libre orbitale avec modèle de forces est vérifiée en autocohérence à 0,77 m RMS sur un passage LEO courbe de 30 minutes qui comprend une interruption GNSS de 120 secondes (un chiffre de cohérence du filtre, non une validation par référence externe — ce navigateur reste MODELLED) ; et un UKF GNSS/INS fortement couplé à 17 états complet (position, vitesse, erreur d'attitude, biais d'accéléromètre et de gyroscope, biais et dérive d'horloge) dont la navigation à l'estime quantique CAI traverse une interruption de 120 secondes grâce à la marche aléatoire de vitesse dérivée de l'accéléromètre à atomes froids.
Détermination d'orbite Récupération d'un état orbital [r, v] à partir du suivi en distance par station au sol, combinant le modèle de forces à deux corps + J2 et l'intégrateur RK4 avec un correcteur par lot de Gauss–Newton (determine_orbit_batch, inframétrique / mm·s⁻¹ à partir de distances sans bruit, ~2 m à un plancher de bruit de 5 m) et une variante séquentielle à filtre de Kalman sans parfum (determine_orbit_sequential).
Observabilité et théorie de l'estimation Une couche générale et réutilisable d'information de Fisher / Cramér–Rao (src/fim.rs) : la matrice d'information M = HᵀWH, la borne inférieure de Cramér–Rao, le rang d'observabilité et l'espace nul du défaut de datum (pseudo-inverse de Moore–Penrose), et des scalaires de conception d'expérience D/A/E/T-optimaux issus d'un solveur propre de Jacobi symétrique. Validé — valeurs propres par rapport à numpy.linalg.eigh, covariance CRLB par rapport à σ²(XᵀX)⁻¹ via numpy.linalg.inv, et DOP GNSS à partir de la matrice d'information, le tout concordant à 1e-9 près (tests/fim_observability_reference.rs), et recoupé en outre avec les bornes en forme fermée de Kay (1993) avec atteinte de la CRLB par Monte-Carlo. Il sous-tend le moteur DOP, la CRLB de géolocalisation passive et le théorème d'observabilité des stations absolues lunaires (ci-dessous).
Lunaire et cislunaire Un propagateur du problème restreint circulaire à trois corps (CR3BP) Terre–Lune dans le référentiel tournant — constante de Jacobi conservée et les cinq points de Lagrange (src/cr3bp.rs) — avec désormais une matrice de transition d'état 6×6 (STM) et un correcteur différentiel à tir simple (cr3bp_jacobian, propagate_state_stm, differential_correct_halo) qui produit des orbites halo / NRHO (orbite en halo quasi rectiligne) réellement périodiques : la STM est validée par rapport à des différences finies, les orbites corrigées se referment à la précision machine, et l'amorçage avec l'état d'apolune publié reproduit la NRHO australe L2 9:2 (L2 = le deuxième point de Lagrange Terre–Lune ; l'orbite de Gateway) à une période ≈ 6,57 j / périlune ≈ 3 250 km, cohérente avec les ≈ 6,56 j / ≈ 3 370 km publiés (une solution CR3BP — circulaire, sans Soleil —, non validée par rapport à une véritable éphéméride LANS (Lunar Augmented Navigation Service)/Gateway ; la transformation sélénocentrique MCI/MCMF (inertiel centré sur la Lune / centré sur la Lune et fixe par rapport à elle) de l'orbite corrigée est une suite à venir) ; plus la géométrie PNT cislunaire LunaNet / LNIS (LunaNet Interoperability Specification) (réduction MCI↔MCMF, coordonnées sélénographiques) avec un passage ARAIM au pôle sud lunaire qui fait honnêtement apparaître l'écart d'intégrité : un σ_URE (erreur de distance de l'utilisateur) d'environ 30 m pousse le niveau de protection bien au-dessus d'une limite d'alerte de 50 m (src/lunar.rs, scenarios/lunanet-araim.toml) ; et une augmentation DOP par balises de surface (src/lunar_beacon.rs) montrant comment quelques balises de télémétrie de surface relevées fournissent les lignes de visée à faible élévation et grand azimut qui manquent à un ensemble orbital entièrement au zénith — effondrant le GDOP polaire sud mal conditionné et, via un budget d'erreur en somme quadratique, la précision de position réalisée en mètres (réutilisant le noyau DOP validé par gnss_lib_py et la forme fermée de visibilité à horizon sans atmosphère ; l'analyse de la dilution de précision est rédigée dans arXiv:2607,06212).
Suite PNT lunaire Une suite de navigation lunaire/cislunaire superposée au cœur CR3BP, chacune un kind exécutable : temps-coordonnée lunaire (lunar-time-offset, src/lunar_time.rs — le taux séculaire LTC/TCL − TT (LTC = Lunar Coordinate Time ; TCL = sa forme française, Temps-Coordonnée Lunaire) à partir de la différence de potentiel propre + terme cinétique, rapporté avec la bande publiée de 56–59 µs/jour) ; une observable de délai VLBI lunaire (interférométrie à très longue base) géodésique (lunar-vlbi, src/lunar_vlbi.rs — un délai + taux de différence de deux distances en champ proche à base terrestre, recoupé avec le Δ-DOR (delta differential one-way ranging) en onde plane de la même base de code dans la limite du champ lointain, dérivées partielles vérifiées par différences finies) ; un estimateur par lot d'OD + horloge multi-technique conjointe (lunar-joint-od-clock, src/lunar_combination.rs — un ajustement de Gauss–Newton fusionnant VLBI + distances locales lunaires + distances inter-satellites) portant un résultat d'observabilité par information de Fisher : la télémétrie interne seule laisse un défaut de datum de corps rigide à six degrés de liberté, de sorte que la position absolue d'une station de surface est inobservable tant qu'un lien avec le référentiel terrestre n'est pas ajouté — un délai VLBI à base terrestre rétablit l'observabilité pour une constellation clairsemée et affine la borne de Cramér–Rao pour une constellation riche, le datum absolu se refermant à trois stations terrestres non colinéaires (le résultat d'observabilité rédigé dans arXiv:2607,02566) ; la réalisation de référentiel (lunar-frame-realisation, src/lunar_frame_realise.rs — un ajustement de datum de Helmert à 7 paramètres + lien d'orientation WGCCRE de l'IAU 2015 — WGCCRE = le groupe de travail de l'IAU sur les coordonnées cartographiques et les éléments de rotation) ; une analyse de volume de service de classe Moonlight/LCNS (LCNS = Lunar Communications and Navigation Services ; moonlight-service-volume, src/lunar_service.rs — DOP / couverture / disponibilité + une enveloppe HPL/VPL (niveau de protection horizontal/vertical) ARAIM lunaire généralisée, réutilisant le noyau DOP validé par gnss_lib_py et la machinerie σ_URE≈30 m de LunaNet) ; le PNT différentiel lunaire (lunar-differential-pnt, src/lunar_dpnt.rs — un analogue lunaire du GNSS différentiel / système d'augmentation par satellites (SBAS) : annulation exacte de l'horloge en mode commun + décorrélation spatiale au premier ordre en fonction de la ligne de base, réutilisant le niveau de protection SBAS DO-229E — DO-229E étant la norme de performance opérationnelle minimale de la RTCA (anciennement Radio Technical Commission for Aeronautics) pour les récepteurs SBAS) ; et une exportation d'interopérabilité alignée sur LunaNet/IOAG (IOAG = Interagency Operations Advisory Group ; lunar-interop-export, src/lunar_interop.rs — CCSDS-OEM (Orbit Ephemeris Message) + aller-retour d'échelle de temps lunaire dans le référentiel de corps lunaire de l'IAU 2015, enveloppé dans l'enveloppe KIF). Les niveaux de preuve par élément figurent dans la matrice de vérification : le temps-coordonnée lunaire, l'estimateur OD + horloge conjoint, la réalisation de référentiel et la géométrie du volume de service sont VALIDATED (chacun par rapport à la référence indépendante que nomme sa ligne, de même que le chemin du noyau du délai VLBI) ; l'observable VLBI, le résultat d'observabilité du défaut de datum, le PNT différentiel et l'exportation d'interopérabilité sont MODELLED. Les paramètres sont des valeurs illustratives issues de sources publiques — non validées par rapport à un véritable suivi VLBI/Gateway, non affiliées à une agence ni approuvées par elle, aucune affirmation de TRL (niveau de maturité technologique) / d'héritage.
PNT en espace lointain et martien Un moteur de navigation radiométrique ouvert : temps de lumière itératif + retard relativiste de Shapiro, Doppler et distance à deux, un et trois sens (deux trajets de Moyer), rapports de cohérence du transpondeur, télémétrie régénérative/PN (pseudo-bruit) (CCSDS 414, la norme de télémétrie à pseudo-bruit), et Δ-DOR dans le plan du ciel (CCSDS 506, la norme Delta-DOR), avec des milieux plasma solaire/tropo/iono ; analyse + émission de messages de données de suivi CCSDS-TDM (503) ; un filtre d'information en racine carrée à dynamique réduite (accélérations empiriques RTN — radiale, transverse, normale — + une horloge embarquée à 3 états + traînée atmosphérique martienne) qui réalise la détermination d'orbite en LMO martienne à ≈ 0,2 m en boucle fermée synthétique ; un estimateur conjoint de fusion d'un sens + deux sens ; un cœur de dynamique multicorps (Body{μ, re, zonals, gravity, IAU-pole}, gravité Mars GMM-3 (Goddard Mars Model 3), un référentiel martien fixe par rapport au corps de l'IAU, une jonction EphemerisProvider enfichable, dates juliennes en deux parties + TT↔TDB (temps dynamique barycentrique)) ; et le scénario de PNT par relais mars-pnt (une constellation de relais aréostationnaires MARCONI) avec un simulateur de performance GSE de bout en bout (GSE = équipement de soutien au sol) (géométrie → bilan de liaison → observables → SRIF → covariance). Validé par simulation (chiffres de mérite de covariance / de boucle fermée) ; la dynamique martienne centrée sur le Soleil est recoupée avec le DE440 du JPL (137 m @ arc de 1 jour, xval/anise-mars-od). La validation par de vraies données de suivi DSN/ESTRACK figure dans la feuille de route.
Système solaire et PNT autour de n'importe quel corps Une éphéméride de tout le système solaire sans noyau (src/ephem.rs, src/ephem_provider.rs) : chaque planète d'après les éléments képlériens de Standish du JPL (Table 1, 1800–2050 apr. J.-C. ; Tables 2a/2b, 3000 av. J.-C.–3000 apr. J.-C.) avec l'erreur nominale publiée de chaque planète, la Terre et la Lune séparées par la série lunaire, et Phobos, Deimos, Io, Europe, Ganymède, Callisto et Titan d'après les éléments moyens du JPL et le modèle de rotation de l'IAU (Union astronomique internationale) ; n'importe quel corps relativement à n'importe quel autre dans l'ICRF (International Celestial Reference Frame). Body porte désormais le GM (paramètre gravitationnel), les rayons, J2 (le deuxième harmonique zonal) lorsqu'il est publié et le pôle et le méridien origine de l'IAU pour dix-huit corps. Le type de scénario solar-system rapporte positions, vitesses, constantes, temps de lumière et distance à un ou deux sens entre deux corps quelconques (le solveur radiométrique de temps de lumière existant, avec le retard de Shapiro solaire) et une trace orbitale par corps — de quoi tracer un système solaire interactif ; le type de scénario body-pnt positionne un orbiteur ou un atterrisseur autour de n'importe quel corps (scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml) avec une constellation Walker locale, la machinerie de dilution de précision et de Gauss–Newton, et une distance en espace lointain depuis la Terre. Validé par rapport à JPL Horizons (DE441, JPL Development Ephemeris 441) : Mercure–Saturne et la Terre d'après la Table 1 à moins de deux fois l'erreur nominale (pire cas 1,87×), les huit planètes d'après les Tables 2a/2b (pire cas 1,71×), et le temps de lumière Terre–Mars/Jupiter. Modélisé : Uranus et Neptune d'après la Table 1 (2,0× et 5,2× l'erreur indiquée par rapport à DE441), Pluton, les lunes, et les résultats de navigation body-pnt.
PNT fusionné MEO + LEO src/leo_fusion/ : positionnement, navigation et synchronisation temporelle LEO indépendants du système, sur n'importe quelle constellation (coquilles Walker, jeux d'éléments, préréglages GNSS) et n'importe quel signal (porteuse, cadence des chips, enveloppe de C/N0, erreur de distance du signal dans l'espace), avec des préréglages facultatifs en un seul fichier portant leurs sources (Xona Pulsar X1/X5, Iridium STL, signaux d'opportunité Starlink, CentiSpace, un système représentatif en bande C, le modèle d'éphéméride à horloge nulle ATOMIC). leo-pvt : positionnement Doppler par lot à partir de la vitesse de distance (un ou plusieurs satellites, états de dérive d'horloge et de vitesse, géométrie à passage unique le long de la trace et transversale, et la solution miroir), moindres carrés pondérés conjoints GNSS + LEO avec des biais inter-systèmes par système et des sigmas par signal fournis par l'appelant, le DOP en fonction du nombre de satellites LEO, couverture polaire et arctique, et transfert de temps LEO vers l'UTC en fonction du C/N0 et de l'oscillateur. leo-ppp : un EKF (filtre de Kalman étendu) PPP (positionnement ponctuel précis) à nombres flottants avec GNSS seul et avec LEO, son temps de convergence et un test de cohérence NEES par khi-deux. ntn-positioning : positionnement par réseau 5G non terrestre à partir de la borne de Cramér-Rao de la bande passante. Validé : l'enveloppe Doppler LEO par rapport aux chiffres publiés d'Iridium et de Xona. Modélisé : le reste, avec la tendance PPP comparée à Li et al. (2019) — voir docs/LEO-PNT-FUSION.md.
Intégrité RAIM — surveillance autonome de l'intégrité par le récepteur — instantané et à séparation de solutions (de type ARAIM), avec niveaux de protection horizontal/vertical (HPL/VPL), détection et exclusion de pannes, et diagrammes d'intégrité de Stanford ; un niveau de protection explicite à budget de risque d'intégrité par séparation de solutions à hypothèses multiples (MHSS), y compris le mode de panne à l'échelle de la constellation, bi-/multi-constellation (ARAIM de l'UE (Union européenne) / DO-316, la norme de performance de la RTCA pour les équipements aéroportés GPS avec augmentation embarquée), exercé sur un véritable instantané GPS + Galileo (scenarios/araim-gps-galileo.toml). Le niveau de protection applique la projection unilatérale du biais nominal b_k = Σ_i|s_i|·b_nom par mode de panne et le sigma d'intégrité σ_URA (précision de distance de l'utilisateur ; distinct du σ_URE de précision, erreur de distance de l'utilisateur) tiré du message de soutien d'intégrité — voir docs/ARAIM_REFERENCE.md. Le noyau de détection (les seuils χ²/χ² non central/normal et les multiplicateurs K) est validé en externe par rapport à SciPy sur 171 cas (tests/raim_reference.rs) ; la géométrie réutilise le noyau DOP validé par gnss_lib_py. L'allocation du budget de risque d'intégrité ARAIM MHSS elle-même n'a pas de référence numérique publiée et reste honnêtement modélisée.
Augmentation (SBAS) Niveaux de protection SBAS / WAAS (WAAS = le Wide Area Augmentation System) sous la forme des moindres carrés pondérés DO-229E (facteurs K d'approche de précision et en route) et la combinaison bifréquence L1/L5 sans ionosphère (L1 et L5 étant deux bandes de signaux civils GPS ; IS-GPS-705, la spécification d'interface GPS du signal L5, γ₁₅ ≈ 1,793) qui sous-tend le DO-316 — src/sbas.rs. L'algorithme de niveau de protection est validé en externe par rapport au fork SBAS-PL de RTKLIB (RTKLIB = la bibliothèque ouverte de positionnement cinématique en temps réel ; PL = niveau de protection) (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, DO-229D — la révision précédente du DO-229 — App. J) exécuté sur de vraies données EGNOS (European Geostationary Navigation Overlay Service), reproduisant son HPL à < 2e-3 m (tests/sbas_reference.rs) ; gLAB (la suite d'outils GNSS Laboratory) v6.0.0 a confirmé la même convention.
Horloge et synchronisation temporelle Holdover de Kalman à deux états (covariance sous forme de Joseph, santé de cohérence NIS/NEES — carré normalisé de l'innovation / carré normalisé de l'erreur d'estimation) ; stabilité de la famille d'Allan (ADEV / MDEV / TDEV / HDEV / MTIE — écart d'Allan, d'Allan modifié, de temps et d'Hadamard, et erreur maximale d'intervalle de temps) avec des intervalles de confiance propres à chaque type de bruit et un ajustement en loi de puissance à cinq coefficients IEEE-1139 complet (IEEE Std 1139, les définitions de métrologie fréquence-temps de l'Institute of Electrical and Electronics Engineers) — les estimateurs sont validés sur du matériel réel par rapport à Stable32 : un vrai étalon primaire au césium 5071A contre un maser à hydrogène (556 990 échantillons de phase, 16 facteurs de moyennage, OADEV/OHDEV — écart d'Allan/d'Hadamard à recouvrement — à 1e-3 près ; tests/cs5071a_reference.rs) et la série de régression canonique PHASE.DAT de Stable32 (139 facteurs de moyennage, OADEV/MDEV/TDEV à 1e-3 près ; tests/phasedat_reference.rs) ; les estimateurs ADEV/MDEV/TDEV et la métrique de dérive télécom MTIE sont en outre recoupés avec la bibliothèque indépendante allantools 2024,06 à < 1e-9 sur la série NIST SP 1065 (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs) ; corrections géométriques (Sagnac, vue commune GNSS) ; et les méthodes de transfert opérationnelles — TWSTFT (transfert bidirectionnel de temps et de fréquence par satellite) avec la forme fermée de Sagnac du BIPM (Bureau international des poids et mesures), vue commune GNSS, transfert de temps PPP (positionnement ponctuel précis) sans ionosphère, une liaison optique en espace libre avec scintillation de turbulence, et une échelle de temps d'ensemble d'horloges (papier) à variance inverse inférieure à la meilleure horloge contributrice. Un calculateur de holdover d'horloge sans GNSS (src/holdover.rs) expose la croissance de l'erreur de marche libre de van Loan sous forme fermée comme une inversion holdover jusqu'au seuil — combien de temps une horloge fonctionne librement avant que son erreur de synchronisation temporelle dépasse le budget — pour des classes représentatives d'horloges classiques et quantiques ; modélisé (recoupé avec la récurrence de covariance multipas clock_state), et honnête sur le fait que, pour une horloge très stable, le holdover jusqu'à un seuil serré est fixé par le plancher de bruit à long tau supposé, non par l'ADEV cité. Un niveau de protection temporel conditionnel (src/tpl.rs) étend le holdover au leurrage : une borne de l'erreur de temps non détectée, étant donné un recoupement indépendant, qui compose un plancher de moniteur à k sigmas, la variance de marche libre de van Loan sur la latence de détection, et un temps jusqu'à l'alarme CUSUM (somme cumulée). Étalonné sur un vrai leurrage enregistré (JammerTest 2024) et reproductible via cargo run --example tpl_jammertest ; composition MODELLED (pas de budget de risque d'intégrité par heure), conditionnelle à la détection — il n'existe pas de borne inconditionnelle finie.
Domaine de mesure GNSS Synthèse avant de pseudodistance / Doppler avec ionosphère Klobuchar (diffusée) et IONEX / grille TEC (format d'échange de cartes de l'IONosphère / contenu électronique total ; mesurée) — y compris un analyseur de fichier IONEX, l'interpolation temporelle entre cartes, et la projection d'obliquité oblique en couche mince —, troposphère Saastamoinen + Niell, et RAIM instantané (HPL/VPL).
Résilience Brouillage par bilan de liaison (J/S → C/N₀ effectif → perte d'accrochage — rapport brouilleur sur signal, rapport densité porteuse sur bruit — avec le facteur de séparation spectrale anti-brouillage Q désormais dérivé des véritables spectres de puissance du signal et du brouilleur via src/navsignal.rs — Q = 1/(R_c·κ), recoupé en CI avec l'ancienne constante représentative) ; un détecteur stochastique de leurrage temporel (test d'énergie de Neyman–Pearson / χ²₁ avec P_fa/P_md sous forme fermée et par Monte-Carlo et un chiffre de mérite (FoM) de sécurité de 1 − P_md) ; et un détecteur de leurrage multicouche fusionnant un test de parité de cohérence RAIM (avec l'angle mort de mode commun modélisé honnêtement), un moniteur de puissance AGC RF (commande automatique de gain), et un moniteur de qualité de signal (SQM — surveillance de la qualité du signal, avance moins retard) ; et un budget d'erreur de navigation inertielle quantique à l'estime (QuantumNavBudget, src/inertial/quantum_imu.rs) composant la marche aléatoire de vitesse à bruit blanc de l'interféromètre à atomes froids avec le biais résiduel (recoupé avec l'intégrateur AccelModel indépendant) et l'erreur de facteur d'échelle en un chiffre de dérive de position pendant le holdover — le jumeau inertiel du holdover d'horloge. Un moteur de notation de résilience aligné sur un cadre (src/resilience/) fait correspondre le comportement simulé d'une architecture à des sous-scores par dimension sur les sept catégories de résilience propres à Kshana (non les termes du DHS), alignées sur le US Department of Homeland Security Resilient PNT Conformance Framework, puis étudie la stabilité de décision de tout score composite unique ou niveau de maturité sous un simplexe de pondération de Dirichlet et un ensemble de cinq menaces — instabilité de rang par tau de Kendall, taux de basculement du gagnant de rang 1, et effondrement de la diversité en mode commun (Hill-N2), avec un rapport d'assurance à condensat d'intégrité (35 tests de référence dérivés à la main). Reproductible via cargo run --example resilience_report ; architectures synthétiques MODELLED, une auto-évaluation alignée sur RPCF v2.0, non une certification. Voir docs/RESILIENCE-CROSSWALK.md.
Géolocalisation RF passive Géolocalisation d'émetteur TDOA/FDOA (différence de temps / de fréquence d'arrivée ; src/geolocation.rs) — localiser un brouilleur ou un leurreur (ou une source d'opportunité pour du PNT inverse) à partir d'hyperboloïdes de différence de temps d'arrivée sur un réseau de récepteurs, résolu par moindres carrés de Gauss–Newton ; l'ajout de la différence de fréquence d'arrivée avec des récepteurs mobiles retrouve conjointement la position et la vitesse de l'émetteur, avec la borne de Cramér–Rao sur la covariance de position dérivée de la géométrie du réseau. MODELLED (références de cohérence interne : allers-retours direct→inverse, l'identité J·CRLB = I, la monotonie du GDOP, et l'estimateur atteignant sa propre CRLB sous Monte-Carlo) — un modèle de source ponctuelle en visibilité directe, sans termes de trajets multiples / NLOS (hors visibilité directe), de biais d'horloge du récepteur ou de réfraction.
Signal de navigation et poursuite de code Le niveau signal entre le bilan de liaison et le domaine de mesure (src/navsignal.rs) : densités spectrales de puissance (PSD) d'aire unitaire pour BPSK-R(n) (modulation par déplacement de phase binaire à chips rectangulaires) et sine-BOC(m,n) (porteuse à décalage binaire) ; le coefficient de séparation spectrale (SSC) κ = ∫ G_s·G_i df, qui dérive le facteur Q anti-brouillage utilisé par le modèle de brouillage (Q = 1/(R_c·κ)) à partir des véritables spectres du signal et du brouilleur au lieu d'une constante représentative ; la largeur de bande RMS (de Gabor) (BOC > BPSK — la mesure d'information de télémétrie / de Cramér–Rao) ; la gigue de bruit thermique de poursuite de code DLL cohérente avance-retard (DLL = boucle à verrouillage de délai ; Kaplan & Hegarty ; ~inframétrique pour le C/A — le code grossier/d'acquisition GPS — à 45 dB-Hz) ; et l'enveloppe d'erreur de trajets multiples (EML cohérent, avance moins retard — suppression par corrélateur étroit). Validé par rapport à des ancres en forme fermée (auto-SSC BPSK = 2/(3·R_c), PSD d'aire unitaire, gigue C/A inframétrique). Il s'agit d'une analyse de performance du signal, non d'une conception matérielle d'antenne / de charge utile RF (le rôle d'un partenaire de charge utile).
Interopérabilité Ingestion d'éphémérides diffusées multi-GNSS RINEX-3 (GPS, Galileo, QZSS — le Quasi-Zenith Satellite System du Japon —, BeiDou MEO/IGSO — orbite terrestre moyenne / orbite géosynchrone inclinée — via IS-GPS-200, la spécification d'interface GPS ; GLONASS, le Global Navigation Satellite System de la Russie, via PZ-90 — le datum russe Parametry Zemli 1990 — RK4 sur vecteur d'état) utilisable comme source de constellation (RINEX en entrée, géométrie PNT en sortie) ; un analyseur d'observations RINEX-3 (pseudodistance, phase de la porteuse, Doppler, intensité du signal ; la disposition d'observation 4,00 devrait être analysée mais n'est pas testée, et les fichiers de navigation RINEX 4 sont refusés par leur nom plutôt que mal décodés) qui alimente désormais un solveur de positionnement ponctuel (SPP) (pvt) — de vraies observations de code en entrée, une vraie position du récepteur en sortie, validée sur des données IGS ; un lecteur/écrivain d'éphémérides précises SP3-c/d avec interpolation de Lagrange d'ordre 9 ; et un export CCSDS OEM 2,0 + OMM (Orbit Mean-elements Message) pour les outils de dynamique du vol (GMAT, Orekit, STK — Systems Tool Kit) ; et l'analyse + l'émission de messages de données de suivi CCSDS-TDM (503) pour le suivi radiométrique de l'espace lointain.
Analyse de mission (ingénierie des systèmes) Des budgets de conception de mission au premier ordre, chacun un type de scénario exécutable : géométrie de lancement et d'ascension à deux corps (launch-window — azimut de lancement sin Az = cos i/cos lat, inclinaison minimale, bonus de rotation de la Terre, Δv de changement de plan en dogleg, opportunités quotidiennes ; src/launch.rs) ; un couloir de rentrée balistique d'Allen–Eggers (reentry — décélération maximale, vitesse/altitude au g maximal, vitesse au chauffage maximal ; src/reentry.rs) ; une géométrie de couverture d'observation de la Terre (eo-coverage — fauchée / GSD (distance d'échantillonnage au sol) au nadir / accès hors nadir / revisite via le triangle spatial du SMAD (Space Mission Analysis and Design) ; src/eo_payload.rs) ; un budget d'erreur d'attitude et de pointage à 3 degrés de liberté (trois degrés de liberté ; attitude-budget — couple de gradient de gravité au pire cas + budget de pointage RSS (somme quadratique) ; src/attitude_budget.rs) ; une prédiction de passage de station au sol (passes — AOS/TCA/LOS, acquisition du signal / instant d'approche maximale / perte du signal, élévation maximale, durée d'accès ; src/passes.rs) ; et un bilan de liaison à sens unique sur l'équation de liaison CCSDS 401 / DSN 810-005 (la norme de radiofréquence et de modulation du CCSDS / le manuel de conception de liaison du Deep Space Network ; link-budget — FSPL (affaiblissement en espace libre), C/N₀, Eb/N₀ (rapport énergie par bit sur densité de bruit), marge, fermeture ; src/linkbudget.rs). Budgets analytiques au premier ordre MODELLED — la couche pré-matériel en dessous de STK/GMAT/Basilisk, non un remplacement à 6 degrés de liberté ou radiométrique.
Analyse de décision et arbitrage (MCDA) Une suite complète d'analyse de décision multicritère (MCDA) (src/mcda/) couvrant les quatre familles de méthodes — agrégation de valeurs (WSM, WPM, WASPAS — modèle de somme pondérée, modèle de produit pondéré, évaluation agrégée de somme-produit pondérée), distance à l'idéal (TOPSIS, Technique for Order of Preference by Similarity to Ideal Solution), programmation de compromis (VIKOR, du serbe pour optimisation multicritère et solution de compromis), et surclassement (PROMETHEE II, Preference Ranking Organization Method for Enrichment of Evaluations ; ELECTRE I, du français pour élimination et choix traduisant la réalité), plus MOORA à système de rapports (Multi-Objective Optimization on the basis of Ratio Analysis) et COPRAS proportionnel (Complex Proportional Assessment) — avec pondération de priorité par comparaison par paires AHP (Analytic Hierarchy Process) (rapport de cohérence), un front non dominé de Pareto, une analyse de sensibilité aux poids, et une notation d'utilité multi-attributs. Les neuf agrégateurs reproduisent les bibliothèques tierces indépendantes pymcdm (WSM / WPM / WASPAS / MOORA / TOPSIS / VIKOR / PROMETHEE II) et pyDecision (ELECTRE I, COPRAS) à < 1e-9, et le vecteur de priorité AHP + le rapport de cohérence concordent avec la table des indices aléatoires de Saaty et le solveur propre principal SciPy/LAPACK à < 1e-9 (tests/mcda_*_reference.rs). VALIDATED — la couche de décision sous le moteur d'étude d'arbitrage.
Environnement spatial Un modèle d'environnement de météorologie spatiale (space-weather, src/space_weather.rs) : indices d'activité solaire (F10.7 / F10.7a centré sur 81 jours — le flux radio solaire de 10,7 cm) et géomagnétique (Kp, l'indice K planétaire, avec la table définitionnelle Kp↔ap — ap étant son amplitude planétaire linéaire), la température exosphérique de Jacchia-1971 qu'ils pilotent (validée par rapport aux minimum/moyenne/maximum solaires publiés), et la densité neutre thermosphérique corrigée de l'activité par rapport à la statique à l'altitude — la dépendance de la densité au cycle solaire que l'atmosphère statique USSA76 (US Standard Atmosphere 1976) omet. MODELLED : un couplage de hauteur d'échelle au premier ordre étalonné, non une atmosphère (NRLMSISE — le modèle d'exosphère à spectromètre de masse et radar à diffusion incohérente du US Naval Research Laboratory) validée par les données.
Évaluation et étude comparative d'apprentissage automatique Un banc d'évaluation de détection de dégradations RF (impairment-eval, src/impairment_eval.rs) : un corpus synthétique étiqueté, ancré sur des paramètres (nominal / brouillage / leurrage temporel / leurrage de position / trajets multiples), un harnais ROC/AUC (caractéristique de fonctionnement du récepteur / aire sous la courbe) indépendant du détecteur notant n'importe quel détecteur (énergie | agc | sqm | parité | fusionné) avec le Pd (probabilité de détection) par classe à une Pfa (probabilité de fausse alarme) cible, et l'écart d'optimisme dans la distribution contre hors distribution (mode de décalage de distribution). Plus un arbitrage PNT quantique contre classique (quantum-trade, src/quantum_trade.rs) quantifiant le bénéfice de holdover temporel/inertiel d'une horloge candidate à partir d'une courbe d'ADEV mesurée contre une référence de base classique, avec la réserve du plancher à long τ portée sur l'artefact et une enveloppe de résilience en fonction du temps sans GNSS. Les métriques d'évaluation (AUC / confusion / Pd-Pmd, Pmd étant la probabilité de non-détection) sont validées par concordance exacte avec scikit-learn 1.9.0 — y compris sur de la vraie télémétrie ESA OPS-SAT (le jeu de données de détection d'anomalies OPSSAT-AD, Ruszczak et al. 2025, CC BY 4,0 — Creative Commons Attribution 4,0), où l'AUC ROC de Mann–Whitney de Kshana reproduit le roc_auc_score de scikit-learn à < 1e-9 sur la partition de test réservée et un détecteur transparent par comptage de pics sépare les anomalies étiquetées à une AUC ≈ 0,85 (tests/opssat_ad_reference.rs) — et les noyaux numériques du moteur d'arbitrage (ajustement NNLS — moindres carrés non négatifs — de l'ADEV, bandes de cohérence χ², Q d'horloge de van Loan) par rapport à scipy 1.17.1 ; les chiffres de bénéfice des dispositifs construits par-dessus restent des caractéristiques de fonctionnement MODELLED — jamais des données de terrain/IQ (échantillons en phase/en quadrature), aucun verdict bon/mauvais. En s'appuyant sur le banc, une étude plus profonde de l'écart d'optimisme (src/impairment_study.rs, impairment_ml.rs, eval_stats.rs) note un panel de 13 détecteurs (énergie/AGC/SQM/parité plus des détecteurs de régression logistique à graine fixe et de MLP — perceptron multicouche — à une couche cachée), ajuste des lois d'échelle dans la distribution contre hors distribution avec une hypothèse nulle par permutation, et apprend un prédicteur par laisser-un-de-côté de la dégradation hors distribution à partir des statistiques dans la distribution (cargo run --example optimism_study). Un étage d'entrée de récepteur défini par logiciel (src/sdr.rs — IQ/IF brut (fréquence intermédiaire) → prises avance/ponctuel/retard du corrélateur → SQM) et des adaptateurs d'ingestion de données réelles (src/realdata/ — RINEX, u-blox UBX (le protocole binaire u-blox), GnssLogger, JammerTest, Yunnan, SatGrid) permettent de faire tourner les mêmes détecteurs sur des enregistrements fournis localement (aucun jeu de données n'est versé au dépôt). La carte de croisement de résilience quantique contre classique sous incertitude de paramètres (src/crossover.rs ; cargo run --bin crossover_study) régénère les études de croisement inertiel et d'horloge derrière les figures des Résultats.
Démonstrateur de PNT à technologie quantique Trois domaines d'application exécutables, MODELLED, derrière le moteur ouvert, chacun émettant un TradeEvidence honnête + un enregistrement de représentativité / d'écarts jusqu'au vol (src/representativeness.rs) : le transfert de temps quantique de confiance (quantum-time-transfer, src/timetransfer_chain.rs — un budget de bout en bout horloge à réseau optique + liaison photonique contre CSAC (horloge atomique à puce) + RF bidirectionnel, avec un niveau de protection temporel réutilisé, un chiffre de mérite de sécurité contre les attaques par retard/rejeu (1 − P_md), et une détection d'anomalies d'horloge + latence CUSUM) ; la navigation quantique sans GNSS (quantum-gnss-free-nav, src/quantum_nav_od.rs — une marche libre inertielle à interféromètre à atomes froids contre un INS de qualité navigation pendant une interruption du GNSS, honnête sur le fait que, sans position externe, le biais de l'accéléromètre est inobservable et que l'erreur continue donc de croître) ; et la détection de pannes/anomalies de système quantique (quantum-anomaly-detect, src/quantum_faults.rs — un catalogue de pannes étiquetées avec une AUC ROC à IC (intervalle de confiance) par bootstrap issue du eval_stats validé en externe et une panne minimale détectable à un taux de fausse alarme fixe). Une bibliothèque partagée de modèles d'erreur de dispositifs quantiques (src/quantum_devices.rs) et un harnais d'arbitrage quantique contre classique unifié (src/qtrade.rs) les sous-tendent. Les noyaux validés qu'ils utilisent (métriques d'évaluation par rapport à scikit-learn, noyaux d'arbitrage par rapport à scipy) sont réutilisés ; les chiffres de bénéfice des dispositifs construits par-dessus restent MODELLED — paramètres de dispositifs/liaisons illustratifs issus de sources publiques, modélisent la classe, pas de TRL / d'héritage de vol / de certification, pas de soutien d'une agence.
Ingénierie frugale et impact sur l'intégrité Une optique de ROI du coût par couverture (retour sur investissement) (src/frugal.rs) — coût par unité de couverture fournie pour un arbitrage d'architecture — et une correspondance non-détection → impact sur l'intégrité (src/integrity_impact.rs) qui transforme le taux de non-détection d'un moniteur en sa contribution au risque d'intégrité. Budgets d'aide à la décision MODELLED, additifs.
Échange d'artefacts Le Kshana Interchange Format (KIF) (src/interchange.rs) — une enveloppe versionnée et autodescriptive encapsulant un résultat de scénario avec son type, la version de son schéma et ses étiquettes MODELLED/VALIDATED, de sorte qu'un artefact stocké reste autodocumenté et que les anciennes enveloppes restent lisibles avec compatibilité ascendante.

Chaque capacité est accessible sous forme d'API Rust, d'un kind de scénario exécutable, ou des deux. La maturité par capacité — validée, exécutable ou bibliothèque — est suivie dans docs/CAPABILITY.md. Une matrice de vérification vérifiée par machine (src/verification.rs) restitue le renvoi exigence → module → test → référence → état, avec des invariants d'honnêteté testés unitairement qui n'autorisent une étiquette validée que lorsqu'une référence externe indépendante l'étaye — et qui consignent les capacités matérielles/PA (assurance produit) que Kshana ne fournit délibérément pas.

Les quatre paquets de capteurs, tels que publiés initialement (résultats)

Résultats#

Chaque scénario compare un capteur quantique à son équivalent classique durant une interruption du GNSS d'environ 1,8 h. Les chiffres sont reproductibles (scenario + seed + version).

Ce que les capteurs quantiques apportent quand le GNSS a disparu, scénario de holdover d'horloge : le quantique tient 6600 s d'autonomie contre 2610 s pour le classique, une erreur de synchronisation temporelle bien plus faible, et une disponibilité de 100 % contre 95,6 %
Ce que les capteurs quantiques apportent quand le GNSS a disparu — clock-holdover · graine 42 · tracé avec le moteur 0.40.0, et chaque figure ci-dessus revérifiée par rapport au moteur actuel à chaque compilation par tests/published_figures_still_reproduce.rs · SVG

L'avantage dépend de la durée de l'interruption et des vibrations, avec un seuil de rentabilité explicite où le classique l'emporte — montré honnêtement sur toute l'échelle de maturité technologique (les chiffres des horloges optiques sont des cibles de démonstrateur au sol ; aucune horloge optique au strontium n'a volé) :

Croisement de holdover d'horloge quantique contre classique sur toute l'échelle de maturité technologique, avec bandes de confiance
Carte thermique de l'avantage inertiel quantique contre classique selon la durée d'interruption et les vibrations, avec un contour de seuil de rentabilité où le classique l'emporte
Croisement de résilience quantique contre classique — échelle TRL du holdover d'horloge (haut) · carte de l'avantage inertiel avec contour de seuil de rentabilité (bas). Régénérable via cargo run --release --bin crossover_study.

Navigation inertielle à l'estime : erreur de position pendant une interruption du GNSS — le capteur quantique (à atomes froids) reste près de la ligne de spécification tandis que le capteur de qualité navigation diverge jusqu'à des dizaines de kilomètres
Erreur de position en navigation à l'estime pendant une interruption du GNSS : le capteur quantique (bleu) reste plat près de la spécification ; le capteur classique (rouge) diverge jusqu'à des dizaines de kilomètres. Généré par Kshana à partir de scenarios/imu-deadreckoning.toml.

Paquet Scénario Quantique Classique
1 — Holdover d'horloge clock-holdover.toml (spécification de 20 ns) l'horloge optique tient toute l'interruption le CSAC dépasse la spécification au milieu de l'interruption
2 — Navigation inertielle à l'estime imu-deadreckoning.toml (spécification de 100 m) atomes froids : ~41 m, tient toute l'interruption qualité navigation : dépasse en ~350 s → des dizaines de km
3 — Transfert de temps (liaison optique inter-satellites) timetransfer.toml optique : télémétrie à ~0,3 mm RF (TWSTFT) : télémétrie à ~150 mm
4 — Fusion hybride (couronnement) hybrid-pnt.toml position + synchronisation temporelle complètes pendant toute l'interruption limité en position à ~350 s

Le couronnement montre la thèse de la fusion : le transfert de temps optique inter-satellites maintient verrouillée même une horloge classique, isolant le capteur inertiel comme maillon faible de la suite classique — c'est-à-dire l'inertie quantique et la synchronisation optique ensemble.

Holdover d'horloge : erreur de phase pendant une interruption du GNSS — l'horloge optique reste dans la spécification de 20 ns pendant toute l'interruption tandis que l'horloge à puce la dépasse au milieu de l'interruption
Holdover d'horloge pendant une interruption du GNSS : l'horloge optique (bleu) reste dans la spécification de 20 ns pendant toute la marche libre ; l'horloge à puce (rouge) la dépasse en cours de route. Généré par Kshana à partir de scenarios/clock-holdover.toml.

Un autre scénario, orbit-gnss-challenged.toml, tire la disponibilité du GNSS de la géométrie orbitale plutôt que de fenêtres écrites à la main : un engin spatial à l'intérieur de la coquille GNSS est propagé face à une constellation Walker de type GPS, et le nombre de satellites visibles (visibilité directe, occultation par la Terre, masque d'élévation) fixe l'état de la position à chaque pas. Sur une journée, l'utilisateur n'est en position que ~59 % du temps ; l'horloge quantique tient une solution de synchronisation temporelle de 5 ns à travers chaque interruption (disponibilité 1.0), l'horloge à puce seulement ~0.83.

Orbite à GNSS contraint : erreur de synchronisation temporelle de l'horloge sur une journée pour un engin spatial à l'intérieur de la coquille GNSS, où les interruptions de couverture sont tirées de la géométrie orbitale — l'horloge optique reste dans la spécification de 5 ns à travers les interruptions tandis que l'horloge à puce la dépasse
Erreur de synchronisation temporelle sur une journée avec une disponibilité du GNSS tirée de la géométrie orbitale : le nombre de satellites visibles (visibilité directe, occultation par la Terre, masque d'élévation) fixe l'état de la position à chaque pas, de sorte que l'horloge doit traverser chaque interruption en marche libre — l'horloge optique tient la spécification de 5 ns tandis que l'horloge à puce la dépasse. Généré par Kshana à partir de scenarios/orbit-gnss-challenged.toml.

La constellation peut aussi être donnée sous forme de véritables jeux d'éléments à deux lignes (TLE). Un TLE complet (ligne 1 + ligne 2) est propagé avec le modèle SGP4/SDP4 complet — y compris la traînée atmosphérique et les termes lunisolaires d'espace lointain et de résonance de 12 h / 24 h qui comptent pour des orbites GNSS de ~12 h — validé par rapport aux vecteurs officiels AIAA 2006-6753 à un pire cas ≈ 4 mm. scenarios/orbit-sgp4-gps.toml livre un véritable instantané Celestrak gps-ops de la constellation GPS opérationnelle (2021-07-28, 30 satellites) et exige des sommes de contrôle TLE valides — les jeux d'éléments à deux lignes sont des données ouvertes du catalogue de la Force spatiale des États-Unis / du 18e Escadron de défense spatiale, redistribuées par Celestrak (Dr T. S. Kelso, celestrak.org) ; actualisez avec scripts/fetch_tles.sh. Un bloc à ligne 2 seule conserve la propagation analytique à deux corps (scenarios/orbit-real-tle.toml) ; les deux formes peuvent être mélangées dans une même constellation. Une constellation peut tout aussi bien être construite à partir d'un bloc d'enregistrements d'éphémérides diffusées GPS RINEX-3 — le format qu'un récepteur décode — propagés par l'algorithme utilisateur IS-GPS-200 et passés dans la même géométrie (scenarios/orbit-rinex.toml).

Ce que c'est et ce que ce n'est pas, en détail

Ce que c'est et ce que ce n'est pas#

C'est : un moteur déterministe, léger en dépendances, qui couvre toute la pile PNT — géométrie orbitale, navigation inertielle, fusion GNSS/INS, intégrité, horloges et synchronisation temporelle. Il exécute un scénario (souvent une interruption du GNSS), fait évoluer des modèles d'erreur de capteurs étalonnés à travers l'estimateur approprié, et note le résultat par rapport aux chiffres de mérite opérationnels — en émettant un résultat JSON (JavaScript Object Notation) reproductible et un graphique SVG, depuis une bibliothèque Rust, une interface en ligne de commande (CLI), une extension Python, un module WebAssembly dans le navigateur, un serveur Model Context Protocol (MCP) pour agents d'IA, ou un module d'extension d'IDE JetBrains (environnement de développement intégré).

Ce n'est pas : du matériel de vol, une conception de charge utile quantique, un récepteur complet de signaux GNSS, un simulateur de signaux radiofréquence (RF) ou un banc matériel en boucle, ou un produit d'avionique certifié — et il ne remplace pas MATLAB/Simulink, STK (Systems Tool Kit) ni Orekit ; il se place à côté d'eux et échange des fichiers avec eux. La fidélité du matériel quantique vient de modèles d'erreur publiés, non de cet outil. La maturité détaillée de chaque capacité est documentée dans docs/CAPABILITY.md.

Ce n'est pas (encore) : un moteur de physique d'interférométrie atomique complet (la plupart des capteurs quantiques consomment des coefficients d'Allan/de budget de bruit publiés ; l'accéléromètre CAI (interféromètre à atomes froids) a une couche de premiers principes — phase de Mach–Zehnder, bruit de projection, décroissance du contraste et couplage aux vibrations, plus les systématiques de Coriolis et de déplacement lumineux — mais les systématiques de front d'onde et la résolution d'ambiguïté de frange restent une couche de feuille de route P2 (phase 2 de la feuille de route, la couche de physique quantique), voir ROADMAP.md et docs/QUANTUM-MODELS.md) ; un récepteur GNSS certifié ou matériel (il résout une position PVT (position, vitesse et temps) à point unique à partir de vraies observations de code RINEX (Receiver Independent Exchange Format) — validée sur de vraies données de l'IGS (International GNSS Service) — et sa couche IQ (kshana iq, depuis 0.31.0) acquiert et poursuit des échantillons en bande de base enregistrés ou générés dans le logiciel, comme récepteur d'analyse : il ne pilote pas de matériel radio et n'émet pas, n'est pas un récepteur certifié, et ne fait aucun positionnement par phase de la porteuse (RTK ou PPP)) ; ou une suite complète de conception de mission (il offre des blocs de construction Lambert / porkchop / manœuvre / détermination d'orbite, mais c'est la couche de simulation de performance au-dessus de GMAT (General Mission Analysis Tool)/Orekit, non un remplacement). Assumer ce périmètre est délibéré. Si vous avez besoin de budgets d'erreur d'interféromètre à atomes froids de premiers principes (par exemple de qualité CARIOQA-PMP — Cold Atom Rubidium Interferometry in Orbit for Quantum Accelerometry, Pathfinder Mission Preparation — ou de validation de type X-37B), consultez la feuille de route P2 et prenez contact pour collaborer.

Navigation en orbite basse#

Les satellites en orbite terrestre basse (LEO) passent vite et fort. Le type de scénario leo-pnt-chain suit un système à travers chaque étape : le signal, le passage et sa liaison, le message de navigation, et la position, vitesse et temps (PVT) fusionnés ainsi que le positionnement ponctuel précis (PPP). Chaque étape transmet ses chiffres à la suivante. Voir docs/LEO-PNT.md.

La chaîne PNT LEO d'après une exécution réelle de leo-pnt-chain (leo-pnt-end-to-end.toml) : l'étape du signal (generic-l à 1191,795 MHz, pilote poursuivi à 10,23 Mchip/s) passe à l'étape du passage (1080 km, pic de C/N0 poursuivi 58,2 dB-Hz), qui passe au message de navigation (kepler-rac, ajustement de 300 s, SISRE de représentation 0,91 mm RMS, 0,250 m avec détermination d'orbite), qui alimente la position fusionnée (GNSS seul 1,60 m RMS 3D, GNSS plus LEO 0,43 m) et le positionnement ponctuel précis (convergence 11,5 min GNSS seul, 7,5 min avec 240 satellites LEO). 11 valeurs sont transmises entre les étapes.La chaîne PNT LEO d'après une exécution réelle de leo-pnt-chain (leo-pnt-end-to-end.toml) : l'étape du signal (generic-l à 1191,795 MHz, pilote poursuivi à 10,23 Mchip/s) passe à l'étape du passage (1080 km, pic de C/N0 poursuivi 58,2 dB-Hz), qui passe au message de navigation (kepler-rac, ajustement de 300 s, SISRE de représentation 0,91 mm RMS, 0,250 m avec détermination d'orbite), qui alimente la position fusionnée (GNSS seul 1,60 m RMS 3D, GNSS plus LEO 0,43 m) et le positionnement ponctuel précis (convergence 11,5 min GNSS seul, 7,5 min avec 240 satellites LEO). 11 valeurs sont transmises entre les étapes.

Chaque type de scénario par famille#

Les types de scénario du moteur, classés par familles. Chaque famille a une page avec une entrée par type (la description et les champs du moteur, une commande d'exemple, des chiffres clés d'une exécution, les lignes de la matrice de vérification qui le nomment, et le graphique que le moteur écrit lui-même) et une planche-contact de ces graphiques ; docs/KINDS.md les indexe tous. Le tableau est écrit par tools/gen_readme_blocks.py et les pages par tools/gen_kinds_index.py, et les deux échouent si le moteur gagne un type qu'aucune famille ne nomme.

Famille À quoi il répond Types En exécuter un
Horloges, synchronisation temporelle et holdover combien de temps une horloge garde l'heure sans GNSS, et comment un système de synchronisation temporelle tient face à ses masques clock, sweep, sweep-nd, telecom-timing, slot-timing, timetransfer, time-transfer-budget, holdover-test, quantum-time-transfer kshana scenarios/clock-holdover.toml
Inertiel, fusion et capteurs quantiques navigation à l'estime et fusion de capteurs pendant une interruption du GNSS, avec des capteurs classiques et quantiques inertial, hybrid, fusion, hybrid-ukf, gnss-ins, ins-trn-coast, quantum-gnss-free-nav, quantum-anomaly-detect, quantum-trade kshana scenarios/gnss-ins.toml
PNT alternatif sans GPS naviguer à partir de la gravité, du terrain et d'autres champs lorsque le GNSS a disparu gravity-map, terrain-nav, terrain-slam, combined-altpnt, conflict-resilience kshana scenarios/combined-altpnt.toml
Constellations, couverture et géométrie où sont les satellites, qui les voit et quelle est la qualité de la géométrie, autour de la Terre, de la Lune ou de Mars orbit, ephemeris, constellation-design, solar-system, body-pnt, mars-pnt, passes kshana scenarios/orbit-gnss-challenged.toml
Mesures GNSS, positionnement et intégrité pseudodistances, positions calculées, niveaux de protection et environnement spatial integrity, gnss-sim, pvt, araim-reference-check, space-weather, realtime-frame-eop kshana scenarios/integrity-raim.toml
Brouillage, leurrage et spectre comment une interférence atteint un récepteur et si elle est détectée jamming, spoof, spoof-detect, tracking-loop, spectrum, impairment-eval kshana scenarios/jamming-demo.toml
Navigation en orbite basse un passage, une liaison, un message de navigation et une position fusionnée, étape par étape leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain kshana scenarios/leo-pnt-end-to-end.toml
Lunaire et cislunaire navigation, temps, référentiels et géodésie sur la Lune lunar-integrity, lunar-time-offset, lunar-time-budget, lunar-ascent, lunar-surface, lunar-descent, lunar-orbit-rendezvous, lunar-vlbi, lunar-vlbi-fim, lunar-joint-od-clock, lunar-frame-realisation, lunar-frame-campaign, lunar-llr-datum, moonlight-service-volume, lunar-differential-pnt, lunar-station-coverage, lunar-beacon, lunar-interop-export, cislunar-observability, cislunar-arc-recovery, lunar-attack-surface, lunar-jamming, earth-gnss-lunar, lunar-infrastructure kshana scenarios/lunar-infrastructure-od-consistency.toml
Navigation de l'utilisateur spatial signaux GNSS pour des engins spatiaux au-dessus, autour et au-delà des orbites GNSS gnss-ssv kshana scenarios/gnss-ssv-shell.toml
PNT optique liaisons optiques à travers l'atmosphère et chiffres de mérite optiques plus RF optical-atmosphere, hybrid-optical-rf kshana scenarios/optical-atmosphere-network.toml
Analyse de mission, liaisons et opérations spatiales lancement, ascension, rentrée, attitude, liaisons, planification des contacts et formats de fichier launch-window, ascent-losses, reentry, entry-heating, eo-coverage, eo-radiometry, attitude-budget, aocs, link-budget, acm-link, contact-schedule, aperture-duty-cycle, space-packet, oem-interop kshana scenarios/launch-window.toml
Fils de mission le budget d'erreur de navigation et de synchronisation d'une chaîne de phases du lancement à l'entrée mission-thread kshana scenarios/mission-thread-artemis-class.toml
Campagnes missions enchaînées, balayages et ensembles construits à partir des autres types campaign kshana scenarios/campaign-jam-spoof-holdover-integrity.toml

Chaque commande#

kshana <scenario.toml> exécute un scénario ; toute autre commande est une sous-commande, et kshana --help affiche l'usage de toutes. Les commandes sont --study, --validate, kinds, example, receiver-trust (avec live et evidence), evidence (keygen, verify, attach-timestamp, round-trip), jammertest (import, score), trust-telemetry, imu-fit, nmea-scenario, interference-map (adsb, ais, daily, sensitivity, fetch-land), route-exposure, bench (spec, truth, cases, score, baseline, seal, reveal-check, manifest, verify-manifest, validate, leaderboard), bench-export, compliance-report, lunanet-afs-check, standards-pack, partner (check), osnma, iq (scene, acquire, track, sweep, labfit, campaign, conditions, frontend, monitor, inventory, info, extract, convert, decimate), sky et skyline. docs/COMMANDS.md donne pour chacune son objectif, un exemple vérifié et sa page de documentation.

Chaque surface#

Un seul moteur, les mêmes résultats partout : la ligne de commande, la bibliothèque Rust, Python, JavaScript et WebAssembly, le serveur MCP avec ses commandes de module d'extension et ses compétences, Kshana Studio (chaque page s'exécute dans le navigateur, sans installation, rien n'est téléversé), les intégrations ROS 2, Signal K, OpenCPN, GNSS-SDR et gnss_lib_py, les kits de déploiement systemd, Docker et Grafana, et le module d'extension JetBrains. docs/ALL-SURFACES.md les liste avec la façon d'obtenir chacun et les noms de toutes les commandes de module d'extension, compétences et pages du Studio ; docs/SURFACES.md dit, pour chaque commande et chaque type de scénario, quelle surface le porte et lesquelles ne le portent pas, avec la raison.

Comment se déroule une exécution#

Un scénario est un fichier TOML (Tom's Obvious, Minimal Language) : un type de scénario, une graine et les paramètres. Le moteur l'exécute et écrit à côté le résultat, un graphique et un rapport, ainsi que les exportations que vous demandez.

Comment se déroule une exécution. Un fichier TOML de scénario (un type de scénario, une graine et ses paramètres) entre dans le moteur, kshana 0.40.0, par la répartition api::run_toml sur 92 types de scénario, déterministe à partir du scénario, de la graine et de la version du moteur. Le moteur écrit result.json, chart.svg, report.html et report.json, un table.csv pour les types qui en définissent un, et sur demande des exportations SP3, CCSDS OMM et OEM, CZML, KML, GeoJSON, STK et SigMF ; une suite écrit study.json et study.html. Ces fichiers alimentent Kshana Studio dans le navigateur, un assistant d'IA via le serveur kshana-mcp, et l'intégration continue.Comment se déroule une exécution. Un fichier TOML de scénario (un type de scénario, une graine et ses paramètres) entre dans le moteur, kshana 0.40.0, par la répartition api::run_toml sur 92 types de scénario, déterministe à partir du scénario, de la graine et de la version du moteur. Le moteur écrit result.json, chart.svg, report.html et report.json, un table.csv pour les types qui en définissent un, et sur demande des exportations SP3, CCSDS OMM et OEM, CZML, KML, GeoJSON, STK et SigMF ; une suite écrit study.json et study.html. Ces fichiers alimentent Kshana Studio dans le navigateur, un assistant d'IA via le serveur kshana-mcp, et l'intégration continue.

Ce scénario fourni dure 2 h : 10 min de GNSS, puis environ 1,8 h avec le GNSS refusé. Il demande combien de temps une horloge optique à réseau de strontium et une horloge atomique à puce (CSAC) tiennent chacune l'heure à 20 ns près.

kshana example clock-holdover > clock-holdover.toml
kshana clock-holdover.toml
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote clock-holdover.result.json, clock-holdover.chart.svg, clock-holdover.report.html, and clock-holdover.report.json

L'horloge optique tient le budget de 20 ns pendant toute l'interruption de 6600 s ; la CSAC le tient pendant 2610 s, et reste dans le budget pendant 95,6 % de l'exécution contre 100 % pour l'horloge optique. kshana example liste chaque scénario fourni.

Missions#

Dix secteurs posent dix questions différentes au même moteur. Chacun a des scénarios fournis pour démarrer.

Secteur Commencer par
Défense et sécurité campaign-jam-spoof-holdover-integrity, spoof-meaconing
Espace, orbite terrestre orbit-gnss-challenged, leo-pnt-end-to-end
Lune, Mars et espace lointain lunar-relay-constellation, mars-orbit-pnt
Aviation et drones small-uas-jammed-nav, araim-gps-galileo
Maritime maritime-strait-jamming, maritime-port-approach-coast
Route automotive-urban-canyon
Rail rail-tunnel-coast
Infrastructures critiques et synchronisation temporelle clock-holdover, clock-ensemble
Télécoms et 5G (la cinquième génération de réseaux mobiles) telecom-prtc-holdover-24h, leo-vertical-5g-network-timing
Science et recherche sweep-clock-stability, quantum-pnt-demonstrator.suite
La question que pose chaque secteur
Secteur La question qu'il pose Commencer par
Défense et sécurité Combien de temps notre navigation et notre synchronisation temporelle restent-elles dignes de confiance face au brouillage et au leurrage, et quelles couches nous maintiennent dans la spécification ? campaign-jam-spoof-holdover-integrity, spoof-meaconing
Espace : orbite terrestre Mon engin spatial voit-il assez de satellites de navigation, combien de temps son horloge garde-t-elle l'heure entre deux positions, et qu'apporterait une couche de navigation en orbite basse ? orbit-gnss-challenged, leo-pnt-end-to-end
Lune et espace lointain Un atterrisseur, un rover ou un orbiteur sur la Lune, sur Mars ou plus loin obtiendra-t-il une position et une heure dignes de confiance ? lunar-relay-constellation, mars-orbit-pnt
Aviation et drones Après qu'un brouilleur a coupé le GNSS, combien de temps mon système d'aéronef sans équipage (UAS) reste-t-il dans son budget de position, et l'intégrité est-elle disponible sur mon itinéraire ? small-uas-jammed-nav, araim-gps-galileo
Maritime Jusqu'où sur l'eau un brouilleur porte-t-il, un décalage de position serait-il détecté, et combien de temps un navire peut-il poursuivre sa route à l'estime jusqu'au port ? maritime-strait-jamming, maritime-spoof-position-push, maritime-port-approach-coast
Route et automobile De combien une voiture dérive-t-elle sous un viaduc ou près d'un brouilleur en bord de route ? automotive-urban-canyon
Rail Combien de secondes après l'entrée dans un tunnel un train peut-il encore dire sur quelle voie il se trouve ? rail-tunnel-coast
Infrastructures critiques et synchronisation temporelle Si l'heure GNSS est perdue ou leurrée, combien de temps un réseau électrique, une plateforme de négociation ou un centre de données conservent-ils une heure traçable ? clock-holdover, clock-ensemble
Télécoms et 5G Si la référence de temps GNSS est perdue, l'horloge de mon réseau reste-t-elle dans les masques ITU-T, et pendant combien de temps ? telecom-prtc-holdover-24h, leo-vertical-5g-network-timing
Science et recherche Puis-je reproduire, étendre et citer un résultat PNT, jusqu'à la graine ? sweep-clock-stability, quantum-pnt-demonstrator.suite

Preuves#

SGP4 vérifié par rapport aux 666 vecteurs de référence AIAA 2006-6753, pire erreur de position 4,12 mm

176 sur 401 capacités vérifiées par rapport à des références externes indépendantes ; 221 honnêtement étiquetées comme modélisées. Chaque ligne de la matrice de vérification nomme une capacité, la référence par rapport à laquelle elle est vérifiée, le test qui exécute la vérification et l'étiquette qui en découle. L'intégration continue (CI) rend impossible d'appeler une capacité VALIDATED sans référence externe indépendante.

Comment une capacité gagne son étiquette. Chaque ligne de la matrice de vérification nomme une capacité, la référence par rapport à laquelle elle est vérifiée, le test qui exécute la vérification en intégration continue, et l'étiquette qui en découle. Une ligne ne peut être VALIDATED qu'avec une référence externe indépendante ; sinon elle est MODELLED, ou PARTNER lorsqu'un partenaire matériel en est responsable. Exemple : SGP4/SDP4, Cowell 6-DOF + perturbations, OD par lot/séquentielle, référence vecteurs de vérification SGP4 AIAA 2006-6753, test tests/sgp4_verification.rs, étiquette VALIDATED. Comptes en direct : 176 VALIDATED, 221 MODELLED, 4 PARTNER sur 401 lignes. Au total, 176 capacités vérifiées par rapport à des références externes indépendantes ; 221 de plus sont honnêtement étiquetées MODELLED et 4 relèvent de PARTNER.Comment une capacité gagne son étiquette. Chaque ligne de la matrice de vérification nomme une capacité, la référence par rapport à laquelle elle est vérifiée, le test qui exécute la vérification en intégration continue, et l'étiquette qui en découle. Une ligne ne peut être VALIDATED qu'avec une référence externe indépendante ; sinon elle est MODELLED, ou PARTNER lorsqu'un partenaire matériel en est responsable. Exemple : SGP4/SDP4, Cowell 6-DOF + perturbations, OD par lot/séquentielle, référence vecteurs de vérification SGP4 AIAA 2006-6753, test tests/sgp4_verification.rs, étiquette VALIDATED. Comptes en direct : 176 VALIDATED, 221 MODELLED, 4 PARTNER sur 401 lignes. Au total, 176 capacités vérifiées par rapport à des références externes indépendantes ; 221 de plus sont honnêtement étiquetées MODELLED et 4 relèvent de PARTNER.
Étiquette Lignes Signification
VALIDATED 176 une référence externe indépendante concorde : données réelles, implémentation indépendante ou vecteurs de référence publiés
MODELLED 221 vérifié par rapport à une vérité analytique ou à l'autocohérence d'une simulation, et dit à haute voix
PARTNER 4 détenu par un partenaire matériel ; Kshana ne détient aucune référence pour cela

Quelques-unes des vérifications : les 666 vecteurs AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 SGP4 (Simplified General Perturbations 4) à 4,12 mm ; le modèle de forces de Cowell à 0,08 m par rapport à Orekit 12,2 ; Galileo à 0,61 m et Swarm-A à 0,10 m par rapport à de vraies éphémérides précises de l'Agence spatiale européenne (ESA). Les tests tiennent près de 95 % de couverture de lignes de src/, contrôlée à 85 % en CI. Le registre est docs/VERIFICATION-MATRIX.md, généré à partir de src/verification.rs : la matrice complète de 401 lignes, et pourquoi chaque ligne modélisée n'a pas de référence externe dans docs/MODELLED-RATIONALE.md.

Comment fonctionne la validation, le tableau des points forts choisis et les figures de preuve

Validation, reproductibilité et honnêteté#

  • Chaque terme de bruit est étalonné sur un chiffre publié et cité et validé par rapport à la relation standard (écart d'Allan pour les horloges ; croissance de l'erreur de navigation à l'estime de Groves pour l'inertie ; la conversion synchronisation temporelle→télémétrie pour le transfert de temps). L'état par terme est suivi dans docs/VALIDATION.md comme validated ou not modeled — rien n'est présenté comme validé qui ne le soit pas.
  • Reproductible par construction : scenario + seed + engine version → identical bits. scripts/check-reproducible.sh l'impose ; les exécutions quantiques et classiques utilisent des graines indépendantes afin que leur bruit soit non corrélé.
  • La maturité est énoncée honnêtement : les chiffres des horloges optiques et des liaisons optiques sont des résultats de cibles / démonstrateurs au sol, non volés.

L'étiquette de preuve sur chaque figure#

Chaque figure et chaque tableau qu'une exécution écrit indique dans quelle mesure on peut s'y fier, et sur quelles lignes du registre cela repose. Le JSON de résultat a une clé evidence, le SVG du graphique une ligne sous le tracé (et un élément <metadata id="kshana-evidence">), et le tableau CSV des lignes de commentaire # evidence: en tête (lues avec comment='#'). Elle nomme un niveau, VALIDATED, MODELLED ou PARTNER, et les identifiants (VM- et huit chiffres hexadécimaux) des lignes de la matrice de vérification que l'exécution a mises en jeu. Le niveau est le plus faible de ces lignes, de sorte qu'une exécution qui s'appuie sur une ligne modélisée est étiquetée MODELLED quel que soit le nombre de lignes vérifiées à côté ; l'étiquette ne peut jamais prétendre à plus que le registre. Les lignes, les statuts et les identifiants sont lus dans la matrice, et non saisis à la main (docs/VERIFICATION-MATRIX.md, docs/SCHEMA.md), et tests/evidence_labels_doc_sync.rs échoue si une figure n'a pas d'étiquette ou si une étiquette est en désaccord avec la matrice.

La validation en un coup d'œil#

Chaque ligne est imposée par un test nommé en CI. Ce tableau est un choix de points forts ; la matrice complète vérifiée par machine compte 401 lignes — 176 VALIDATED, 221 MODELLED, 4 PARTNER (src/verification.rs), avec les preuves complètes (et ce qui n'est honnêtement pas encore vérifié) dans docs/VALIDATION.md et l'artefact kshana-validation-summary.html de chaque version (généré par cargo run --bin validation_report, attesté SLSA — Supply-chain Levels for Software Artifacts).

La colonne État indique la nature de la preuve, conformément à l'échelle de validation ci-dessus : VALIDATED = vérifié par rapport à une référence externe indépendante (données réelles, bibliothèque indépendante ou vecteurs de référence publiés) ; MODELLED = vérifié par rapport à une vérité analytique ou à l'autocohérence d'une simulation (pas de jeu de données externe indépendant). VALIDATED décrit la méthode de vérification, non une réussite/un échec — un écart honnête par rapport à une vraie référence externe reste VALIDATED, tandis qu'une comparaison qu'aucune ligne de la matrice ne nomme comme référence (l'ajustement LRO — Lunar Reconnaissance Orbiter — ci-dessus) est montrée comme MODELLED. Les lignes CI sont des garde-fous de processus, non des chiffres de mérite. Quelques îlots de données réelles (l'horloge au césium mesurée, Stable32 PHASE.DAT, et les vérifications OPS-SAT/ICGEM où les entrées brutes ne portent aucune licence de redistribution) sont conditionnés aux données : le test imprime un avis d'omission et reste vert lorsque l'entrée est absente, et les chiffres de référence publics sont versés au dépôt sous tests/fixtures/. Reproduisez les entrées brutes avec le scripts/fetch_*.sh correspondant.

État Capacité Concordance Référence / référence indépendante
VALIDATED Propagation SGP4/SDP4 666/666 vecteurs, pire cas 4,12 mm AIAA 2006-6753 (Vallado tcppver.out) + comparaison directe avec la crate sgp4 indépendante
VALIDATED Référentiels — nutation IAU 2000A/B, chaîne CIO IAU 2006/2000A, ERA bit à bit (X,Y à 1e-14, s à 1e-18, ERA à 1e-12) ERFA/SOFA eraXys06a · eraC2ixys · eraEra00 · eraNut00a/b
MODELLED GCRS→ITRS par rapport à un moteur SPICE indépendant max 0.028″ → ≤ 0,86 m au sol, ≤ 3,6 m en orbite GNSS ANISE (NAIF/SPICE en Rust pur), mêmes EOP IERS finals2000A, 8 époques 2020–2023 (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED)
MODELLED Géopotentiel EGM2008 (degré/ordre 70) accélération = ∇V à < 1e-6 ; effondrement zonal vers J2 validé Coefficients NGA EGM2008 + identité analytique ∇V
VALIDATED Synthèse des fonctionnelles de gravité (carte de navigation assistée par la gravité / sans GNSS) Somigliana GRS80 + γ_e/γ_p à 3.5e-12 ; carte de perturbation EGM2008 réelle physique (RMS ≈ 26 mGal, d/o 70) Gravité normale de Somigliana GRS80 (Moritz 1980, IAG — Association internationale de géodésie) + vraie EGM2008 de l'ICGEM (tests/icgem_gravity_reference.rs)
VALIDATED Estimateurs d'Allan (ADEV/MDEV/TDEV/HDEV) + bandes de confiance reproduisent les écarts de référence ; les bandes χ² concordent NIST SP 1065 (Riley), tableau 31/32 de 1000 points
VALIDATED Estimateurs d'Allan sur une vraie horloge au césium mesurée OADEV/OHDEV à 1e-3 (observé ≤ 3e-5), 16 facteurs de moyennage Stable32 sur un vrai 5071A Cs contre maser à H, 556 990 pts (tests/cs5071a_reference.rs, conditionné aux données)
VALIDATED Estimateurs d'Allan sur le PHASE.DAT canonique de Stable32 OADEV/MDEV/TDEV à 1e-3 (observé ≤ 5e-5), 139 facteurs de moyennage Écarts de référence Stable32 pour PHASE.DAT (tests/phasedat_reference.rs, conditionné aux données)
MODELLED Modèle d'erreur d'IMU — ARW / VRW / instabilité de biais retrouvé à < 5 % (instabilité de biais < 15 %) Fiche technique Analog Devices ADIS16465 ; profil de référence NaveGo
VALIDATED Propagateur numérique de Cowell + modèle de forces (niveaux conservatifs) pire erreur de position 0,08 m sur 24 h, 278 époques (LEO + GTO) Orekit 12,2 NumericalPropagator/DormandPrince853 (CS GROUP), tests/numerical_cowell_propagator_reference.rs
MODELLED Niveau de traînée de Cowell + entrées absolues d'éphéméride du Soleil et de la Lune et de densité niveau de traînée caractérisé ≈ 333 m / 24 h ; le non perturbé concorde avec Kepler en variables universelles à moins d'un mètre, énergie/moment ~1e-9 éphéméride intégrée de faible précision + Kepler analytique
MODELLED Lambert · Tsiolkovsky · porkchop aller-retour vers la vérité à deux corps ; ΔV < 0.01 % Izzo 2015 · équation de fusée · plancher analytique de Hohmann
MODELLED Détermination d'orbite (par lot de Gauss–Newton) inframétrique / mm·s⁻¹ sans bruit ; ~2 m à un plancher de bruit de 5 m deux corps + J2 sur un arc RK4
MODELLED Ajustement du modèle de forces par rapport à l'éphéméride précise de Galileo (arc complet) 0,61 m RMS 3D, 24 h, d/o-70, forces seules Orbite finale ESA0MGNFIN de l'ESA/ESOC (E11), vraies EOP finals2000A (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED)
MODELLED Ajustement du modèle de forces par rapport à l'éphéméride précise de Swarm-A (à dynamique réduite) 0,10 m RMS 3D (borne du niveau empirique, non une mesure) Orbite précise SW_OPER_SP3ACOM_2_ de l'ESA (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED)
MODELLED Ajustement du modèle de forces par rapport à LRO lunaire (échec honnête) 6,67 m à dynamique réduite, au-dessus de la cible de 5 m JPL Horizons LRO (NAIF −85) + GRAIL (Gravity Recovery and Interior Laboratory) GRGM660PRIM (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED)
MODELLED OD martienne en espace lointain (SRIF à dynamique réduite) ≈ 0,2 m Mars-LMO (FoM de simulation, non de mission réelle) OD synthétique en boucle fermée — validation de la machinerie d'estimation
MODELLED Dynamique martienne centrée sur le Soleil par rapport au DE440 du JPL 137 m @ arc de 1 jour (croît avec l'arc = n-corps non modélisé) JPL DE440 via ANISE (xval/anise-mars-od, conditionné au noyau) (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED)
VALIDATED Positionnement à point unique par rapport à une coordonnée IGS relevée (observations réelles) 5,7 m RMS 3D / 1,1 m à l'horizontale, SPP par code bifréquence sans ionosphère Relevé de la station IGS ABMF + éphémérides diffusées GPS, 2018-05-13 (tests/pvt_abmf.rs)
MODELLED UKF GNSS/INS fortement couplé 0,77 m RMS sur un passage LEO de 30 min dont une interruption de 120 s marche libre avec modèle de forces, dérivé à la main
MODELLED Navigation par carte de gravité sans GPS dérive INS de ~70 km → ~145 m récupérés Cible Quantum Wayfarer du NAVISP de l'ESA
MODELLED Navigation référencée au terrain (TERCOM/SITAN) dérive de 70 km → < 500 m (plancher de résolution de grille ~140 m) MNT SRTM .hgt ; dérive injectée à la main (vérification non circulaire)
MODELLED Champ principal IGRF-14 (degré/ordre 13) pôle ~80,7°N, dipôle ~29,7 µT, bande physique de 22–67 µT IAGA (Association internationale de géomagnétisme et d'aéronomie) igrf14coeffs.txt (semi-normalisé de Schmidt)
MODELLED Modulation du signal de navigation et poursuite de code auto-SSC BPSK = 2/(3·R_c) ; PSD d'aire unitaire ; gigue DLL C/A inframétrique à 45 dB-Hz Ancres SSC/PSD en forme fermée + formule de bruit thermique DLL de Kaplan & Hegarty
MODELLED Correcteur différentiel CR3BP halo/NRHO STM = différences finies ; l'orbite se referme à la précision machine ; NRHO L2 9:2 ≈ 6,57 j / périlune ≈ 3 250 km vérification de la STM par différences finies + NRHO australe L2 9:2 publiée (≈ 6,56 j / ≈ 3 370 km) — CR3BP, non une véritable éphéméride de Gateway
MODELLED Intégrité ARAIM bi-constellation mode de panne à l'échelle de la constellation sur de vrais GPS + Galileo Rapport technique (TR) ARAIM de l'UE / DO-316 ; Celestrak gps-ops 2021-07-28 (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED)
VALIDATED Géométrie GNSS / DOP (GDOP/PDOP/HDOP/VDOP/TDOP) concordance à 1e-6 en relatif sur 8 géométries (bien conditionnée → quasi singulière) gnss_lib_py 1.0.4 (Stanford NAV Lab) — bibliothèque indépendante (tests/dop_reference.rs)
VALIDATED Métriques d'évaluation de détecteurs d'apprentissage automatique (AUC/ROC/confusion/Pd-Pmd/précision/F1) comptes exacts + < 1e-9 sur 5 jeux de données × 24 seuils scikit-learn 1.9.0 (Pedregosa et al., JMLR — Journal of Machine Learning Research — 2011) — bibliothèque indépendante (tests/eval_metrics_reference.rs)
VALIDATED AUC ROC de détection d'anomalies sur de la vraie télémétrie ESA OPS-SAT l'AUC reproduit scikit-learn à < 1e-9 ; AUC du détecteur par comptage de pics ≈ 0.85 sur la partition de test étiquetée roc_auc_score de scikit-learn sur la partition de test OPSSAT-AD (Ruszczak et al. 2025, CC BY 4,0) — vraie télémétrie OPS-SAT (tests/opssat_ad_reference.rs)
VALIDATED Noyaux numériques de l'arbitrage quantique (ajustement NNLS de l'ADEV · bandes de cohérence χ² · Q d'horloge de van Loan) NNLS + Q exacts ; χ² < 5e-4 à ddl de fonctionnement ≥ 48 scipy 1.17.1 — optimize.nnls / stats.chi2.ppf / linalg.expm (tests/scipy_reference.rs)
VALIDATED Métriques de dérive télécom MTIE / MDEV / TDEV (ITU-T G.810/G.823/G.8261/G.811 — les recommandations du Secteur de la normalisation des télécommunications de l'Union internationale des télécommunications) MTIE (9 facteurs de moyennage, exacte au bit près) et MDEV + TDEV (8 facteurs, < 1e-9 en relatif) sur la série LCG (générateur congruentiel linéaire) NIST SP 1065 allantools 2024,06 mtie / mdev / tdev — bibliothèque indépendante (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs)
VALIDATED Méthodes d'étude d'arbitrage MCDA — les quatre familles de décision, neuf agrégateurs validés en externe (WSM · WPM · WASPAS · MOORA · COPRAS · TOPSIS · VIKOR · PROMETHEE II · ELECTRE I) plus pondération de priorité par comparaison par paires AHP scores / classements / matrices de concordance reproduits à < 1e-9 pymcdm + pyDecision (bibliothèques MCDA tierces indépendantes) + RI (indice aléatoire) de Saaty / valeurs propres SciPy-LAPACK (tests/mcda_*_reference.rs)
VALIDATED Enveloppe Doppler LEO à partir de l'orbite et de la porteuse Maximum d'Iridium à 5 % près du ±36 kHz publié ; Xona Pulsar X1 dans le 32–34 kHz publié Résultats de test PNT LEO du RNTF ; Leclère, Marathe & Reid, arXiv:2509,19551 (tests/leo_doppler_reference.rs)
MODELLED Convergence PPP avec augmentation LEO 7,4 → 4,8 / 3,2 / 2,7 / 2,3 min avec 60 / 96 / 192 / 288 satellites LEO, monotone ; NEES du filtre dans la bande χ² tendance comparée à Li et al., J. Geod. 93:749 (2019) (9,6 → 7,0 / 3,2 / 2,1 / 1,3 min) ; constellations et bruit non reproduits
MODELLED Niveau de protection temporel conditionnel (erreur de temps non détectée limitée par le holdover sous leurrage) la composition reproduit la récurrence de covariance multipas clock_state ; étalonnée sur un vrai leurrage enregistré Scalaires JammerTest 2024 (Zenodo 15911589) + formes fermées de van Loan / CUSUM (examples/tpl_jammertest)
MODELLED Notation de résilience PNT + instabilité de décision 35 tests de référence dérivés à la main ; artefact d'étude déterministe à l'octet près (graine fixe) Correspondance DHS RPCF v2.0 + formes fermées de Dirichlet / tau de Kendall / Hill-N2 — architectures synthétiques, non une certification
MODELLED Étude de l'écart d'optimisme des dégradations RF (lois d'échelle + prédicteur par laisser-un-de-côté) significativité par hypothèse nulle de permutation ; artefact déterministe à l'octet près (5 graines) corpus synthétique ancré sur des paramètres — les métriques d'évaluation sont VALIDATED par rapport à scikit-learn (ci-dessus) ; l'étude est MODELLED
CI Reproductibilité multiplateforme entrée identique bit à bit + références de forme (golden) sur 3 OS (systèmes d'exploitation) Matrice CI Linux / macOS / Windows, références SHA-256 (golden)
CI Couverture de test ~95 % de lignes sur src/ hors src/*_data.rs et src/main.rs, contrôlé à ≥ 85 % cargo-tarpaulin (moteur LLVM)

Comment une capacité gagne son étiquette : une exigence renvoie à un module dans src, à un test dans tests, à une référence externe (jeu de données réel, implémentation de référence indépendante, ou vecteurs publiés), à un état — avec un garde-fou imposé par la CI selon lequel aucune capacité ne peut être vérifiée sans référence externe. Comptes en direct : 176 vérifiées, 221 modélisées, 4 du partenaire, 401 au total
Comment une capacité gagne son étiquette — l'invariant imposé par la CI : pas de référence externe ⇒ ne peut pas être validée · SVG

Comment chaque affirmation est étayée : la colonne des lignes validées est 176 sur 176 ExternalDataset par construction (imposé par la CI) ; les lignes modélisées sont honnêtement étiquetées InternalConsistency, ReferenceImpl ou ExternalDataset ; les lignes du partenaire n'ont aucune référence Kshana
Pire erreur de position SGP4/SDP4 par rapport à la référence AIAA 2006-6753 par régime, échelle logarithmique : chaque régime est très en dessous de la tolérance AIAA, pire cas 4,12 mm dans le régime d'espace lointain non résonant
En haut : chaque ligne validée est étayée par un jeu de données externe, par construction. En bas : SGP4 concorde avec la référence officielle dans chaque régime (pire cas 4,12 mm). SVG · SVG

État de vérification sur l'ensemble des 401 capacités : 176 vérifiées (par rapport à une référence externe), 221 modélisées, 4 détenues par le partenaire
176 vérifiées · 221 modélisées · 4 du partenaire — SVG

Domaines de capacités#

Chaque capacité de la carte publique, par domaine, avec son étiquette de registre. Le tableau des domaines est écrit par tools/gen_readme_blocks.py à partir de web/capabilities.json, le même fichier que lit la carte de tout du Studio.

Capacités de Kshana par domaine et maturité : capacités publiques validées et modélisées par domaine, tracées à partir de web/capabilities.json par tools/gen_validation_figures.pyCapacités de Kshana par domaine et maturité : capacités publiques validées et modélisées par domaine, tracées à partir de web/capabilities.json par tools/gen_validation_figures.py

Le tableau complet, domaine par domaine avec chaque capacité et son étiquette, est docs/CAPABILITY-DOMAINS.md.

Installation#

Une ligne suffit pour obtenir l'outil en ligne de commande : cargo install kshana. Chaque canal livre la v0.40.0 à partir du même commit étiqueté.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Canal Installation Guide
Essayer dans le navigateur ouvrez https://kshana.dev Guide du Studio
Ligne de commande (Rust) cargo install kshana Utilisation de la ligne de commande
Bibliothèque Rust cargo add kshana Référence de l'API sur docs.rs
Python pip install kshana Guide de l'API Python
JavaScript et WebAssembly npm install kshana Guide npm et WebAssembly
Assistant IA (serveur MCP, cargo) cargo install kshana-mcp Guide du serveur MCP
Image Docker docker run --rm -i ghcr.io/ashfordeou/kshana-mcp Guide du serveur MCP : Docker
Cursor (un clic) Ajouter à Cursor (npx) · Ajouter à Cursor (Docker) · npx -y kshana-mcp@0.40.0 Tous les extraits d'installation MCP
VS Code (un clic) Installer dans VS Code (npx) · Installer dans VS Code (Docker) · npx -y kshana-mcp@0.40.0 Tous les extraits d'installation MCP
npx npx -y kshana-mcp@0.40.0 Tous les extraits d'installation MCP
uvx / pipx uvx kshana-mcp==0.40.0 Tous les extraits d'installation MCP
Homebrew brew install ashfordeOU/tap/kshana-mcp Tous les extraits d'installation MCP
Scoop scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket && scoop install kshana-mcp Tous les extraits d'installation MCP
winget winget install AshfordeOU.KshanaMcp Tous les extraits d'installation MCP
Binaire précompilé téléchargez kshana-mcp-<target> depuis la version publiée et vérifiez-le avec SHA256SUMS Tous les extraits d'installation MCP
Registre MCP officiel recherchez io.github.ashfordeOU/kshana-mcp Tous les extraits d'installation MCP
Distant (HTTP en flux continu), auto-hébergé kshana-mcp --http 127.0.0.1:8080 Guide d'auto-hébergement
Plugin d'IDE JetBrains Settings → Plugins → Marketplace → recherchez « Kshana » (ID du module d'extension dev.kshana.ide) Guide du plugin
Module d'extension Signal K npm install signalk-kshana-trust Guide du module d'extension Signal K
Module d'extension OpenCPN téléchargez l'archive tar du module d'extension depuis la version publiée Soumission au catalogue OpenCPN
Tableau de bord Grafana importez kshana-grafana-*.json depuis la version publiée Source du tableau de bord
Image de la version de référence docker pull ghcr.io/ashfordeou/kshana-reference-build Intégrations maritimes

Kshana sur le JetBrains Marketplace Se compile avec Rust 1,88 ou plus récent, la rust-version de Cargo.toml

MCP est le Model Context Protocol. Épinglez une version avec cargo install kshana --version 0.40.0, pip install kshana==0.40.0 ou npm install kshana@0.40.0. Pour compiler depuis les sources, voir Installer et compiler sous Référence.

Exécuter un scénario depuis Python et depuis WebAssembly
import json, kshana

toml = open("clock-holdover.toml").read()
result = json.loads(kshana.run(toml))
print(kshana.version(), result["quantum"]["fom"]["holdover_s"], result["classical"]["fom"]["holdover_s"])
# 0.40.0 6600.0 2610.0

Outre run, le module expose run_full (JSON, SVG et le résumé en une ligne à la fois), run_typed, validate_toml, list_kinds / scenario_kinds et error_kind ; voir docs/PYTHON_API.md.

Le paquet npm est le moteur entier compilé en WebAssembly. Dans Node.js, passez le binaire à initSync ; dans un navigateur, await init() le récupère (voir README.npm.md).

import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, version } from "kshana";

const wasm = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasm) });

const toml = readFileSync("clock-holdover.toml", "utf8");
const result = JSON.parse(run(toml));
console.log(version(), result.quantum.fom.holdover_s, result.classical.fom.holdover_s);
// 0.40.0 6600 2610
console.log(summary(toml));

Architecture#

Un moteur ouvert se trouve au centre, et chaque surface l'exécute : la ligne de commande, la bibliothèque Rust, Python, WebAssembly et Kshana Studio, le serveur MCP, l'image Docker et le module d'extension JetBrains. Le même fichier de scénario donne les mêmes octets sur chacune. Kshana Pro se place au-dessus comme une surcouche distincte qui dépend du moteur et ne le fait jamais diverger.

L'architecture de Kshana : un moteur ouvert au centre, kshana 0.40.0 sous l'AGPL-3.0, avec api::run_toml, une répartition typée sur chaque type de scénario, et le registre de vérification de 401 capacités (176 VALIDATED, 221 MODELLED, 4 PARTNER). Autour, chaque surface exécute le même moteur : ligne de commande (cargo install kshana) ; bibliothèque Rust (cargo add kshana) ; Python (pip install kshana) ; WebAssembly + Kshana Studio (npm install kshana) ; serveur MCP (cargo install kshana-mcp) ; image Docker (ghcr.io/ashfordeou/kshana-mcp) ; module d'extension JetBrains (Marketplace : « Kshana »). En dessous, Kshana Pro, une surcouche propriétaire qui dépend du moteur ouvert comme bibliothèque, ne le fait jamais diverger et n'ajoute aucun modèle physique.L'architecture de Kshana : un moteur ouvert au centre, kshana 0.40.0 sous l'AGPL-3.0, avec api::run_toml, une répartition typée sur chaque type de scénario, et le registre de vérification de 401 capacités (176 VALIDATED, 221 MODELLED, 4 PARTNER). Autour, chaque surface exécute le même moteur : ligne de commande (cargo install kshana) ; bibliothèque Rust (cargo add kshana) ; Python (pip install kshana) ; WebAssembly + Kshana Studio (npm install kshana) ; serveur MCP (cargo install kshana-mcp) ; image Docker (ghcr.io/ashfordeou/kshana-mcp) ; module d'extension JetBrains (Marketplace : « Kshana »). En dessous, Kshana Pro, une surcouche propriétaire qui dépend du moteur ouvert comme bibliothèque, ne le fait jamais diverger et n'ajoute aucun modèle physique.
À l'intérieur du moteur : les couches de domaine et le registre de vérification L'architecture de Kshana en couches. Cinq portes d'entrée (ligne de commande, Python, JavaScript et WebAssembly, le serveur MCP et le module d'extension JetBrains) atteignent un seul api::run_toml, une répartition typée sur 92 types de scénario. En dessous se trouvent huit couches de domaine : temps et référentiels, horloges et synchronisation temporelle, inertiel et fusion, GNSS et intégrité, astrodynamique, PNT LEO, Lune, Mars et espace lointain, et missions et études, sur un cœur partagé, le tout recoupé par le module de vérification, la matrice vérifiée par machine de 401 capacités qui est la source unique de vérité pour chaque étiquette.L'architecture de Kshana en couches. Cinq portes d'entrée (ligne de commande, Python, JavaScript et WebAssembly, le serveur MCP et le module d'extension JetBrains) atteignent un seul api::run_toml, une répartition typée sur 92 types de scénario. En dessous se trouvent huit couches de domaine : temps et référentiels, horloges et synchronisation temporelle, inertiel et fusion, GNSS et intégrité, astrodynamique, PNT LEO, Lune, Mars et espace lointain, et missions et études, sur un cœur partagé, le tout recoupé par le module de vérification, la matrice vérifiée par machine de 401 capacités qui est la source unique de vérité pour chaque étiquette.

Un seul moteur, de nombreuses portes d'entrée. Un cœur Rust unique (kshana) exécute chaque scénario, atteint par une CLI, une extension Python, un module WebAssembly dans le navigateur, un serveur MCP pour agents d'IA, et un module d'extension d'IDE JetBrains — tous convergeant vers une seule répartition api::run_toml. À l'intérieur, les paquets de capteurs se branchent sur une interface commune de modèle d'erreur ; à côté se trouvent une couche de référentiels (précession–nutation IAU 2006/2000A et réduction GCRS↔ITRS fondée sur le CIO), une couche d'astrodynamique/numérique (SGP4/SDP4 analytique et un propagateur numérique de Cowell avec son modèle de forces EGM2008/perturbations, la conception de manœuvres et la détermination d'orbite), une couche d'intégrité/GNSS (RAIM/ARAIM, SBAS, le domaine de mesure, le brouillage, le cislunaire), une couche de fusion / PNT alternatif (les estimateurs GNSS/INS et les appariements de cartes de gravité/terrain/magnétisme), une couche d'espace lointain et lunaire (PNT martien radiométrique et la suite PNT lunaire, son niveau de preuve par élément dans la matrice — temps LTC, VLBI, OD + horloge conjointes, réalisation de référentiel, volume de service, PNT différentiel, interopérabilité), une couche d'analyse de mission (budgets de lancement / rentrée / couverture / pointage / passage / liaison et l'environnement de météorologie spatiale), et la couche ouverte d'études de résilience et d'apprentissage automatique (notation de résilience RPCF, l'écart d'optimisme des dégradations RF, et le démonstrateur de PNT à technologie quantique) dont les artefacts reproductibles s'appuient sur les noyaux validés.

Deux crates autonomes, exclues de l'espace de travail, se trouvent à côté du cœur — mcp/kshana-mcp (le serveur MCP, construit sur le SDK rmcp édition 2024) et xval/anise-frames (le recoupement des référentiels ANISE/SPICE, qui tire des dépendances MPL-2.0 (Mozilla Public License 2,0)) — tenues hors du graphe de dépendances de la crate publiée, de Cargo.lock, de la barrière de licences et de la compilation MSRV (version minimale de Rust prise en charge) par la liste exclude du Cargo.toml racine. Le module d'extension JetBrains (ide/jetbrains) est un projet Kotlin distinct. Voir docs/ARCHITECTURE.md pour l'ensemble complet des diagrammes.

Les diagrammes restitués (flux du moteur, carte des modules, distribution) sont dans docs/ARCHITECTURE.md.

Diagrammes#

Les diagrammes sont des sources Mermaid dans docs/diagrams/, restituées en SVG et PNG dans docs/assets/diagrams/ (tools/render-diagram-chromium.sh <name> sous Linux, les deux autres scripts render-diagram ailleurs), et un enregistrement lie chaque PNG au SVG exact dont il provient. Des tests figent les comptes qu'ils énoncent. Les graphiques des sections ci-dessus sont tracés par des outils à partir d'exécutions du moteur ; ceux-ci montrent comment les parties s'assemblent.

Le système : six portes d'entrée (ligne de commande, Python, WebAssembly et npm avec Kshana Studio, serveur MCP avec modules d'extension et compétences, module d'extension JetBrains, intégrations) appellent toutes une seule répartition sur chaque type de scénario, qui exécute un moteur composé du cœur partagé, de paquets de capteurs et de référentiels, et de modèles de domaine, et écrit un résultat et un graphique reproductibles
Une répartition, un moteur, une sortie reproductible · SVG · source system-overview.mmd

Les surfaces : un moteur déterministe hors ligne alimente la ligne de commande, la bibliothèque Rust, Python, WebAssembly et npm, et le serveur MCP ; le Studio s'exécute sur la compilation WebAssembly, les commandes de module d'extension et les compétences sur le serveur MCP, les intégrations et les kits de déploiement sur la ligne de commande, et le module d'extension JetBrains sur la bibliothèque
Chaque surface, à partir du même moteur · SVG · source surfaces.mmd

À l'intérieur d'une exécution : un fichier de scénario avec sa graine et sa chronologie GNSS alimente le moteur, qui à chaque pas de temps fait évoluer le modèle d'erreur, exécute l'estimateur et note les chiffres de mérite, et écrit un résultat et un graphique reproductibles
La boucle interne d'une exécution · SVG · source engine-flow.mmd

Confiance du récepteur : un journal ou un flux de récepteur est ingéré en observables par époque et en indicateurs propres du récepteur, passe les moniteurs, et devient un score de confiance à titre consultatif avec une bande et des motifs, qui alimente le Studio, la télémétrie, un paquet de preuves signé, la notation Jammertest et bench, et le rapport de compliance
D'un journal de récepteur à un score de confiance et à ce qui l'utilise · SVG · source trust-flow.mmd

L'aller-retour de laboratoire : un scénario est exporté avec ses événements et ses conditions de test, un opérateur extérieur à Kshana rejoue un fichier à travers un simulateur de laboratoire, le journal du récepteur est noté par rapport aux événements énoncés, et l'aller-retour de preuves relie le scénario, les conditions, les condensats du journal et la note en un paquet signé
Du scénario au paquet signé ; Kshana ne produit ni ne rejoue jamais de signal · SVG · source lab-round-trip.mmd

Kshana Studio : le navigateur exécute localement le moteur compilé en WebAssembly sans rien téléverser, prend des scénarios fournis ou un scénario ou un journal que vous ouvrez, et montre le résultat dans la vue Simple, la vue Avancée et les pages de tâches, les exportations étant enregistrées par l'utilisateur
Comment le Studio s'exécute, en local · SVG · source studio-flow.mmd

Le flux de test et de publication : des barrières locales (formatage, clippy, la vérification d'absence d'attribution, le cliquet de couverture de documentation, et scripts/gate.sh, qui exécute la suite complète et des exécutions répétées et écrit le reçu que vérifie le hook de pré-push) mènent à une pull request exécutée en CI seule et à une CI complète au vert ; le propriétaire avance main en avance rapide jusqu'au commit au vert et une étiquette annotée y est posée après la vérification de synchronisation des versions ; le workflow de publication vérifie la suite complète sur le commit étiqueté avant que quoi que ce soit soit publié, compile les binaires avec un SBOM, des sommes de contrôle et une provenance de compilation, publie sur crates.io, PyPI, npm, le registre de conteneurs, le registre MCP et le JetBrains Marketplace, interroge chaque registre jusqu'à ce qu'il serve la nouvelle version, et déclenche la compilation du site depuis l'étiquette ; un chemin distinct réservé au site déclenche le workflow des pages avec l'étiquette main et est refusé à moins que rien en dehors de web/ et .github/ n'ait changé depuis la dernière version
Flux de test et de publication, des barrières locales à une version vérifiée et au chemin réservé au site · SVG · source release-flow.mmd · docs/RELEASING.md

La carte des modules : la ligne de commande, Python, WebAssembly, le serveur MCP et le module d'extension JetBrains appellent la répartition typée sur chaque type de scénario, qui atteint le cœur partagé, le temps et les référentiels, les paquets de capteurs, l'astrodynamique, l'intégrité, la détection de leurrage, la fusion, l'espace lointain et lunaire, la résilience, et les modules d'arbitre et de benchmark, le tout garanti par la matrice de vérification
Où se trouve le code · SVG · source module-map.mmd

Distribution : un dépôt livre la crate cœur, le serveur MCP, le module d'extension d'IDE et les crates de recoupement vers crates.io, PyPI, npm, GitHub Releases, le bac à sable Pages, le registre de conteneurs, le registre MCP et le JetBrains Marketplace, avec une archive Zenodo
Ce qui est livré où, et ce qui le vérifie · SVG · source distribution.mmd

Assistant IA#

kshana-mcp est un serveur MCP : votre assistant exécute le vrai moteur et relit son JSON, au lieu de deviner les calculs. Chacun de ses 49 outils est une fine enveloppe autour d'une fonction publique de la bibliothèque kshana, de sorte qu'aucune logique de simulation ne réside dans le serveur.

Installer le serveur MCP#

À titre consultatif, pas un équipement de navigation homologué : l'opérateur reste responsable de la navigation. Le serveur s'exécute sur votre ordinateur ; rien n'est envoyé à Ashforde OÜ.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Canal Commande ou bouton Nécessite Forme épinglée
Cursor (un clic) npx (Node) · Docker Node, ou Docker kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
VS Code (un clic) npx (Node) · Docker · Insiders (npx) Node, ou Docker kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
npx npx -y kshana-mcp@0.40.0 Node 18+ kshana-mcp@0.40.0
uvx / pipx uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 Python 3,9+ avec uv ou pipx kshana-mcp==0.40.0
Docker docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.40.0 Docker ghcr.io/ashfordeou/kshana-mcp:0.40.0
Homebrew brew install ashfordeOU/tap/kshana-mcp brew formule pour v0.40.0
Scoop scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket puis scoop install kshana-mcp Scoop (Windows) manifeste pour v0.40.0
winget winget install AshfordeOU.KshanaMcp winget (Windows) --version 0.40.0
cargo cargo install kshana-mcp --version 0.40.0 Rust 1,88+ kshana-mcp 0.40.0
Binaire précompilé la page de la version : kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], vérifié par SHA256SUMS et gh attestation verify aucun v0.40.0
Registre MCP io.github.ashfordeOU/kshana-mcp (trouvé par les clients compatibles avec le registre) un client compatible avec le registre 0.40.0
À distance (streamable HTTP) kshana-mcp --http 127.0.0.1:8080, auto-hébergé : voir docs/deploy/mcp-http.md votre propre hôte v0.40.0

kshana-mcp sur Glama, son score de qualité de serveur MCP

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

La configuration par client est dans docs/integrations.md. Le serveur est répertorié dans le registre MCP officiel sous le nom io.github.ashfordeOU/kshana-mcp.

Les 49 outils

Scénarios et rapports

Outil Ce qu'il fait
run_scenario Exécuter un scénario à partir d'une définition TOML (Tom's Obvious, Minimal Language)
list_scenario_kinds Les 92 types de scénario intégrés, avec leurs descriptions et leurs champs obligatoires et facultatifs — pour que l'agent puisse construire un scénario valide
validate_scenario Contrôle préalable : analyser le TOML et détecter son type, sans l'exécuter
list_example_scenarios Les scénarios de référence fournis, en JSON
get_example_scenario Le texte TOML d'un scénario de référence fourni, octet pour octet le fichier sous scenarios/
report_scenario Exécuter un scénario et renvoyer son rapport
animate_scenario Exécuter un scénario et renvoyer sa série temporelle sous forme d'animation
sky_geometry Géométrie du ciel sous un horizon dépendant de l'azimut : les satellites visibles et masqués, le DOP, la covariance est-nord-haut et l'ellipse d'erreur horizontale ; ou un préréglage d'horizon avec sa provenance

Exportation et interopérabilité

Outil Ce qu'il fait
list_export_formats Quels formats d'interopérabilité s'appliquent à un scénario (czml, kml, geojson, stk, sigmf), la raison lorsque l'un ne s'applique pas, et la spécification que suit chaque écrivain
export_interop Exporter un scénario en CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, éphéméride STK (Systems Tool Kit) .e, ou SigMF (Signal Metadata
import_route Écrire un itinéraire GeoJSON LineString dans un scénario qui suit une trace de points de passage (terrain-nav, terrain-slam, gravity-map, combined-altpnt) et renvoyer le nouveau TOML
export_sp3 Exporter la constellation d'un scénario orbit en éphéméride précise SP3-c (Standard Product 3, révision c)
export_omm Exporter les éléments d'un scénario orbit en catalogue OMM (Orbit Mean-elements Message) CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2
export_oem Exporter la série d'états d'un scénario orbit en éphéméride CCSDS OEM (Orbit Ephemeris Message) 2,0 — la position TEME (vrai équateur, équinoxe moyen) et
export_table_csv Exécuter un scénario et renvoyer son tableau de reproductibilité en CSV (valeurs séparées par des virgules) — le tableau stable à l'octet près que la CLI (interface en ligne de commande) écrit sous le nom <scenario>.table.csv
export_test_bench Le mouvement du véhicule et les événements d'un scénario pour un simulateur GNSS de laboratoire (kshana bench-export)

Confiance du récepteur et du navire

Outil Ce qu'il fait
assess_receiver_log Évaluer la confiance d'un vrai journal de récepteur GNSS (système mondial de navigation par satellite)
assess_vessel_stream Noter un extrait NMEA 0183 borné (au plus 2 Mio et 20 000 époques
assess_vessel_log Un journal NMEA 0183 de navire (au plus 4 Mio) en exécution par lot, avec le TOML de session énonçant les limites du navire
create_evidence_pack Un paquet de preuves signé pour une fenêtre du journal d'un navire (kshana receiver-trust evidence)
attach_evidence_timestamp Lier un jeton d'horodatage RFC 3161 (base64 des octets .tsr) à un paquet, en mémoire (kshana evidence attach-timestamp)
verify_evidence_pack Vérifier un paquet (kshana evidence verify)
generate_training_nmea NMEA 0183 de passerelle synthétique pour la formation des équipages à partir d'un TOML nmea-scenario (brouillage, décrochage de position, leurrage temporel, retard de rejeu) avec le journal d'instructeur (kshana-nmea-training/1)
build_interference_map Une carte d'interférences GNSS à partir de rapports de position ADS-B ou AIS sous forme de texte CSV (au plus 4 Mio)
route_exposure La part de la longueur d'un itinéraire dans des cellules dégradées, non dégradées, non évaluées et non observées d'une ou plusieurs cartes d'interférences, éventuellement dans une plage de dates
trust_telemetry Un flux de confiance (lignes JSON) ou un résultat receiver-trust restitué sous forme de texte Prometheus, de lignes syslog CEF ou LEEF ou d'une charge utile JSON OTLP, avec les encodeurs kshana trust-telemetry
jammertest_import Lit le catalogue d'essais et le plan de transmission Jammertest publiés (NPRA/jammertest-plan, MIT) comme vérité planifiée (kshana jammertest import) : les créneaux d'une zone d'essai deviennent des événements de confiance du récepteur avec l'identifiant du catalogue et l'année dans chaque libellé. Des créneaux planifiés, non des heures d'émission enregistrées ; aucun champ de contact du plan n'est lu. MODELLED. Voir docs/JAMMERTEST.md.
jammertest_score Note un journal de récepteur par rapport à ce calendrier (kshana jammertest score) : par essai, la latence de détection, les alarmes manquées et le temps de rétablissement, et les fausses alarmes en dehors de tous les créneaux. Journaux texte sous forme de log, binaires (ubx, sbf) sous forme de log_base64. Un paquet signé exige une clé : ligne de commande. À titre consultatif seulement ; MODELLED.
fit_imu_log Paramètres d'accéléromètre et de gyroscope des scénarios hybrid et fusion ajustés à partir d'un journal d'IMU immobile (CSV ou EuRoC) par écart-type d'Allan, avec une table [accel_classical] prête à coller et le SHA-256 du journal (kshana imu-fit). Texte en entrée, JSON en sortie ; MODELLED.

IQ GNSS (fichiers du répertoire de travail ; désactivé en mode HTTP)

Outil Ce qu'il fait
iq_signals La configuration de la couche IQ GNSS
iq_info Décrire un enregistrement IQ (en phase et en quadrature) du répertoire de travail sans le traiter
iq_scene Générer une scène IQ GNSS multi-satellites dans le répertoire de travail (kshana iq scene)
iq_acquire Acquisition par FFT (transformée de Fourier rapide) d'un ou plusieurs PRN (codes de pseudo-bruit) sur un enregistrement (kshana iq acquire), éventuellement derrière des étages d'entrée
iq_track Acquérir, puis poursuivre avec le banc de DLL/PLL/FLL (boucles à verrouillage de délai, de phase et de fréquence) (kshana iq track), avec les boucles issues d'un `kshana.loop-desig
iq_frontend Appliquer le DSP (traitement numérique du signal
iq_sweep Rejouer un enregistrement IQ du répertoire de travail sur plusieurs conceptions de boucle de poursuite (kshana iq sweep)
iq_monitor Exécuter les moniteurs de détection d'interférences et de leurrage sur un enregistrement IQ du répertoire de travail (kshana iq monitor)
iq_labfit Ajuster le modèle de perte d'accrochage de la boucle de poursuite à des exécutions de laboratoire (kshana iq labfit) à partir d'un scénario iq-labfit dont les journaux sont en ligne (text ou base64
iq_test_conditions Valider un fichier kshana.test-conditions/1 donné sous forme de texte et renvoyer les conditions résolues avec leur empreinte
iq_campaign Exécuter une campagne de rejeu en laboratoire (kshana iq campaign)
iq_campaign_status L'avancement du dossier de sortie d'une campagne

Correspondance de compliance

Outil Ce qu'il fait
compliance_report La correspondance avec le cadre public, remplie à partir de documents de résultats donnés sous forme de texte (kshana compliance-report)
compliance_mapping Les tables de correspondance statiques (ou, avec sources, les documents sources qu'elles citent, avec leurs versions et leurs URL) au format Markdown, introduites par la même déclaration
list_standards_packs Les paquets de normes (kshana standards-pack list) : des ensembles de scénarios notés pour les profils d'essai du cadre DHS Resilient PNT, IMO MSC.1/Circ.1575 et ICAO Doc 9849 Appendix F
run_standards_pack Un paquet exécuté par rapport à des seuils énoncés avant l'exécution : chaque essai est MET, NOT MET ou NEEDS INPUT ; MODELLED, n'évalue aucun produit
lunanet_afs_check Le signal LunaNet Augmented Forward Signal vérifié par rapport à LNIS V5 AD1 Volume A (LSIS-AFS V1.0) : les codes par rapport aux tables imprimées, ou un flux de symboles par rapport au format de trame ; le LDPC et le CRC-24Q des sous-trames 2 à 4 ne sont pas vérifiés
create_round_trip_pack Le paquet signé d'aller-retour en laboratoire : scénario, document kshana.test-conditions/1, journal du récepteur et score liés par empreinte

Benchmark

Outil Ce qu'il fait
score_benchmark Une soumission kshana-bench notée par rapport à un fichier de vérité, tous deux en texte JSON (kshana bench score, bench/SPEC.md) : le fichier de résultat avec la version de la spécification, la partition, les condensats d'entrée et les métriques de la tâche. MODELLED ; décrit un journal ou un corpus, jamais un produit.
render_leaderboard Fichiers de résultats kshana-bench rendus sous forme de page de classement statique (texte HTML), chacun validé d'abord.

Éditions#

Tout le moteur est gratuit. Kshana Pro et les études sur mesure s'adressent aux programmes qui ont besoin de plus, et toute voie payante commence par un message : il n'y a aucun prix ici.

Gratuit Kshana Pro Étude sur mesure
Ce que c'est tout le moteur ouvert, les 92 types de scénario, sans restriction de fonctionnalités une surcouche propriétaire sur le même moteur, sous contrat une étude MODELLED de la résilience PNT de votre système, réalisée pour vous
Licence AGPL-3.0 (GNU Affero General Public License, version 3), ou une licence commerciale propriétaire contrat
Pour commencer installer ou ouvrir kshana.dev demander une évaluation de Pro demander une étude

Ce qu'est Pro, selon les termes de docs/PRO.md :

Un sur-ensemble strict de Kshana ouvert. Pro dépend du moteur ouvert comme d'une bibliothèque et ne le duplique jamais. Tout type de scénario ouvert s'exécute dans Pro sans changement, et un scénario ouvert s'exécute dans Pro sans aucune licence.

Aucune physique nouvelle. Pro n'ajoute aucun modèle physique et n'en modifie aucun. Chaque nombre de Pro provient d'exécutions du moteur ouvert ; un chiffre de Pro est donc aussi digne de confiance que le type de scénario ouvert dont il provient, et jamais davantage.

Pro répond aux questions suivantes d'un programme : quelle conception faire voler (un optimiseur de conception et son front de Pareto), quel est le degré de certitude de la réponse (incertitude et sensibilité), et si la mission satisfait ses exigences (un dossier de mission, la traçabilité des exigences, des études de compromis, une vérification de régression des scénarios, des jumeaux numériques d'horloge, un dossier d'étude et un service sur site). Il surveille aussi une campagne de chiffres et fait échouer un pipeline lorsque l'un d'eux se dégrade, teste des plans de signaux candidats par rapport aux signaux ouverts de navigation par satellite dans les deux sens (coexistence spectrale), et met des études en file d'attente dans un service de tâches sur site doté d'un registre de livraison chaîné par empreintes. Chacun est décrit, avec ce qu'il produit et ce qu'il ne fait pas, dans docs/PRO.md. Rien de ce que produit Pro n'est une certification, et une étude sur mesure n'en est pas une non plus.

Ce que Kshana Pro lit dans le moteur ouvert, et l'assistance d'Ashforde® OÜ

Sur quoi repose Kshana Pro. Chaque partie de Pro travaille à partir du moteur ouvert et le laisse inchangé :

  • L'optimiseur de conception, l'étude d'incertitude et le dossier de mission exécutent des scénarios du moteur ouvert par l'interface publique du moteur et calculent chaque nombre à partir des résultats des exécutions. Chaque sortie conserve le niveau VALIDATED, MODELLED ou PARTNER que le moteur ouvert a attribué à chaque chiffre, jamais un niveau supérieur.
  • Les jumeaux numériques d'horloge utilisent le modèle d'horloge du moteur ouvert et son estimateur de déviation d'Allan : un jumeau est calibré sur le budget d'Allan publié du dispositif, puis vérifié en estimant la déviation d'Allan du jumeau avec l'estimateur ouvert.
  • Les études de compromis exécutent chaque option d'architecture comme un scénario du moteur ouvert, sans changement, et classent les options selon une figure de mérite lue dans le résultat de chaque exécution.
  • La surveillance de campagne lit ses chiffres dans les résultats des exécutions du moteur ouvert des scénarios d'un paquet, et les compare à la dernière exécution réussie.
  • La coexistence spectrale lit chaque nombre physique dans des exécutions du moteur ouvert des types leo-signal et constellation-design, et n'ajoute que la somme sur les satellites en vue et le classement des plans.
  • Le service de tâches sur site exécute des scénarios ouverts et Pro avec le même moteur et stocke chaque résultat tel que l'exécution l'a renvoyé.
  • Les paquets de preuves consignent, pour chaque exécution, l'empreinte du scénario que le moteur ouvert appose sur son résultat, de sorte qu'un chiffre d'un paquet peut être reproduit en réexécutant son scénario.
  • Outillage d'ingénierie système et de programme. L'outillage d'ingénierie système fondée sur les modèles (MBSE) et de programme de Kshana Pro vérifie les exigences d'un programme par rapport à des exécutions du moteur ouvert : il importe des exigences au format de valeurs séparées par des virgules (CSV), ou sous la forme d'un sous-ensemble documenté du Requirements Interchange Format (ReqIF) ou d'un texte Systems Modeling Language version 2 (SysML v2), évalue chaque critère d'acceptation, avec son unité, par rapport aux valeurs qu'une exécution a écrites, et produit une matrice de références croisées de vérification (VCRM), un modèle SysML v2, un rapport d'impact des changements et un paquet de preuves hors ligne. Il ne réexécute et ne recalcule rien, et ne lit que ce que le moteur ouvert publie : le result.json de chaque exécution (les champs qu'un critère nomme, leurs unités, l'estampille de reproductibilité composée de l'empreinte du scénario, de la graine, de la version du moteur et de la version du schéma, ainsi que l'étiquette de l'exécution et les niveaux de ses chiffres), son report.json (type, enregistrement de reproductibilité et étiquettes de capacités), le fichier de scénario (son empreinte, son type, sa graine et ses paramètres), le schéma des unités des champs (l'unité, la provenance et le niveau de preuve de chaque champ) et la matrice de vérification (l'étiquette VALIDATED, MODELLED ou PARTNER de chaque capacité).

Assistance et services professionnels#

Kshana est gratuit et open source sous l'AGPL-3.0 et développé et maintenu professionnellement par Ashforde® OÜ (Estonie). Le moteur ouvert est complet et utilisable seul. Pour les organisations qui ont besoin de plus, Ashforde® OÜ propose :

  • Assistance commerciale et intégration — intégration de Kshana dans votre chaîne d'outils, scénarios sur mesure et correctifs prioritaires.
  • Modèles de capteurs sur mesure — calibrés sur votre matériel, y compris des modèles de résilience soumis à contrôle des exportations, maintenus dans une surcouche privée.
  • Kshana Pro — outillage propriétaire d'ingénierie système fondée sur les modèles (MBSE) et de programme, qui vérifie les exigences d'un programme par rapport à des exécutions du moteur ouvert et produit une matrice de références croisées de vérification (VCRM), un modèle Systems Modeling Language version 2 (SysML v2), un rapport d'impact des changements et un paquet de preuves hors ligne. Il ne réexécute rien et ne lit que les sorties publiées du moteur : le result.json et le report.json de chaque exécution, le fichier de scénario, le schéma des unités des champs et les étiquettes de la matrice de vérification (la liste complète se trouve sous Éditions).
  • Outillage Kshana Pro de conception, d'incertitude et de mission — le front de Pareto d'un espace de conception, l'incertitude et la sensibilité sur des milliers d'exécutions, et un dossier de mission en une commande avec une matrice de vérification et un PDF ; voir docs/PRO.md.
  • Surveillance de campagne, coexistence spectrale et service de tâches de Kshana Pro — un pipeline qui échoue lorsqu'un chiffre surveillé se dégrade, des plans de signaux testés par rapport aux signaux ouverts de navigation par satellite dans les deux sens, et une file de tâches sur site avec un registre de livraison chaîné par empreintes ; voir docs/PRO.md.
  • Formation et conseil sur l'analyse de performance PNT quantique/classique.

Voilà le modèle open-core : le moteur est, et reste, sous licence ouverte ; l'activité qui le fait vivre repose sur l'expertise, l'assistance et les extensions propriétaires — pas sur des frais de licence. Contact : contact@ashforde.org · ashforde.org.

Recherche#

Les études fondées sur le moteur ouvert sont publiées sur arXiv. Chacune nomme la commande du moteur qui la sous-tend, de sorte que ses nombres peuvent être régénérés à partir d'un exemple de scénario ou d'étude versionné.

Recherches fondées sur le moteur ouvert : six articles sur arXiv, chaque carte nommant l'article, sa date et sa catégorie, ainsi que la commande du moteur qui régénère ses nombres. Les mêmes six articles, avec liens et commandes, figurent dans le tableau ci-dessous.Recherches fondées sur le moteur ouvert : six articles sur arXiv, chaque carte nommant l'article, sa date et sa catégorie, ainsi que la commande du moteur qui régénère ses nombres. Les mêmes six articles, avec liens et commandes, figurent dans le tableau ci-dessous.
Article Ce qu'il montre Commande du moteur
Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics
arXiv:2606,22054 · doi:10.48550/arXiv.2606.22054
La baisse du score d'un détecteur d'interférence GNSS lorsque les conditions changent peut être prédite à partir des seules statistiques en distribution, sur un banc d'essai synthétique ouvert puis sur des enregistrements de terrain ouverts. cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json
A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing
arXiv:2606,24210 · doi:10.48550/arXiv.2606.24210
Un récepteur de synchronisation temporelle GNSS soumis à du leurrage n'a aucune borne inconditionnelle finie sur l'erreur de temps non détectée ; l'article en donne donc une borne conditionnelle, calibrée sur un leurrage enregistré par voie radio issu de la campagne publique JammerTest 2024. cargo run --release --example tpl_jammertest
How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting
arXiv:2607,05415 · doi:10.48550/arXiv.2607.05415
Un score de résilience composite unique n'est une base stable pour une décision que lorsqu'une conception domine ; lorsque des conceptions se disputent la première place, la seule repondération peut changer le gagnant. cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json
Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination
arXiv:2607,02566 · doi:10.48550/arXiv.2607.02566
La télémétrie à l'intérieur d'une constellation lunaire laisse non observable la position absolue d'une station de surface ; un délai d'interférométrie à très longue base (VLBI) depuis la Terre la rend observable lorsque la constellation est clairsemée, et l'affine lorsqu'elle est riche. le type lunar-joint-od-clock : kshana example lunar-joint-od-clock > s.toml && kshana s.toml
The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis
arXiv:2607,06212 · doi:10.48550/arXiv.2607.06212
Les constellations prévues de quatre à six satellites donnent une mauvaise géométrie au pôle Sud lunaire, et quelques balises de télémétrie en surface la corrigent bien plus économiquement que davantage de satellites. le type lunar-beacon : kshana example lunar-beacon > s.toml && kshana s.toml
Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever
arXiv:2610,23871 · doi:10.48550/arXiv.2610.23871
La dilution de précision n'est pas définie pour un suivi cislunaire par télémétrie seule, car la vitesse n'est pas observable à un instant donné ; l'article utilise donc le grammien d'observabilité sur quatre orbites rétrogrades distantes planes : la télémétrie seule est de rang 2 sur 4 à un instant donné et requiert un arc d'environ 2,09 h pour devenir entièrement observable, le conditionnement s'améliorant à mesure que l'arc s'allonge ; la vitesse de distance (Doppler) donne immédiatement le rang 4 ; et l'estimation conjointe d'une station avec les états et les horloges des satellites reste de rang déficient d'une unité, à moins qu'une observable interférométrique externe ne soit ajoutée. Les exigences relèvent de budgets de longueur d'arc, de conditionnement et de type de mesure, et non du DOP. le type cislunar-observability : kshana scenarios/cislunar-observability.toml (son voisin cislunar-arc-recovery teste le seuil avec un estimateur indépendant par différences finies)

Les trois exemples d'étude écrivent des artefacts déterministes à l'octet près (graines fixes) qui consignent la version du moteur, les graines et une empreinte de configuration. Les trois articles lunaires et cislunaires reposent sur la suite lunaire (le niveau de preuve de chaque élément figure dans la matrice de vérification) ; leurs affirmations de géométrie et de dilution de précision sont aussi recoupées avec des références indépendantes distinctes dans tests/validate_p*.rs. Plus de détails dans Artefacts d'étude reproductibles sous Référence.

Citer#

Si vous utilisez Kshana dans un travail universitaire ou technique, veuillez citer la version utilisée, avec le scénario et la graine. CITATION.cff contient les métadonnées lisibles par machine, et GitHub en tire un bouton « Cite this repository ». Chaque version est archivée sur Zenodo ; le DOI (Digital Object Identifier) de concept 10.5281/zenodo.20528627 renvoie toujours à la dernière version.

Baweja, C. (2026). Kshana — a PNT-resilience simulator with quantum-sensor performance models. Ashforde OÜ. https://doi.org/10.5281/zenodo.20528627

Les articles ci-dessus :

Baweja, C. (2026). Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics. arXiv:2606,22054. https://doi.org/10.48550/arXiv.2606.22054

Baweja, C. (2026). A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing. arXiv:2606,24210. https://doi.org/10.48550/arXiv.2606.24210

Baweja, C. (2026). How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting. arXiv:2607,05415. https://doi.org/10.48550/arXiv.2607.05415

Baweja, C. (2026). Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination. arXiv:2607,02566. https://doi.org/10.48550/arXiv.2607.02566

Baweja, C. (2026). The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis. arXiv:2607,06212. https://doi.org/10.48550/arXiv.2607.06212

Baweja, C. (2026). Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever. arXiv:2610,23871. https://doi.org/10.48550/arXiv.2610.23871

Licence#

Kshana est sous double licence : la AGPL-3.0-only de GNU (LICENSE), ou une licence commerciale d'Ashforde® OÜ pour une intégration fermée à laquelle l'AGPL ne convient pas. LICENSING.md explique laquelle s'applique. Les contributions sont placées sous licence entrante AGPL et accordent aussi à Ashforde® OÜ le droit de les inclure dans l'édition commerciale ; signez chaque commit avec git commit -s (voir CONTRIBUTING.md). « Kshana » et ses marques sont des marques d'Ashforde® OÜ : la licence couvre le code, pas le nom, veuillez donc renommer les forks.

Référence#

La documentation longue, repliée. Chaque document est listé dans Documentation.

Installer et compiler depuis les sources

Installer et compiler#

Nécessite une chaîne d'outils Rust (≥ 1,88, le champ rust-version de Cargo.toml ; développé avec la 1,93).

git clone https://github.com/ashfordeOU/kshana
cd kshana
cargo build --release
cargo test          # all tests pass
Utilisation : la ligne de commande en détail

Usage#

Exécutez n'importe quel scénario ; la CLI s'aiguille sur le champ kind du scénario et écrit <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html et <scenario>.report.json à côté de lui — ainsi que <scenario>.table.csv pour les types qui publient un tableau. Le rapport (une page HyperText Markup Language (HTML) et un document JSON de même contenu) comporte un résumé exécutif, chaque entrée avec son unité, les résultats et les graphiques, les tableaux de balayage, de Monte-Carlo ou de chaîne d'une campagne, une chronologie des événements, l'étiquette VALIDATED / MODELLED / PARTNER et la source de chaque capacité utilisée par l'exécution, ce qui n'est pas modélisé, et un enregistrement de reproductibilité (version du moteur, condensats Secure Hash Algorithm 256-bit (SHA-256), graine, plateforme et commande exacte). Il s'imprime en un fichier PDF (Portable Document Format) propre depuis le navigateur sur papier A4 ou Letter ; le moteur n'écrit lui-même aucun PDF. Voir docs/REPORTS.md.

cargo run -- scenarios/clock-holdover.toml
cargo run -- scenarios/imu-deadreckoning.toml
cargo run -- scenarios/timetransfer.toml
cargo run -- scenarios/hybrid-pnt.toml
cargo run -- scenarios/orbit-gnss-challenged.toml
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- scenarios/orbit-rinex.toml
cargo run -- scenarios/integrity-raim.toml

# Export a propagated constellation to an SP3-c precise-ephemeris file:
cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3

# Export the constellation's mean elements to a CCSDS OMM catalogue (one OMM
# message per TLE-defined satellite, with its real NORAD id / COSPAR designator):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-omm gps.omm

# Export the velocity-carrying state to a CCSDS OEM 2.0 ephemeris (GMAT/Orekit/STK):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-oem gps.oem

# Export the geometry for a globe, a map or a mission-analysis tool: CZML, KML,
# GeoJSON, STK .e, or SigMF for the spectrum kind (every format that applies):
cargo run -- scenarios/jamming-demo.toml --export all

--export <czml|kml|geojson|stk|sigmf|all|list> écrit à côté du scénario des fichiers CZML (le Cesium Language), KML (Keyhole Markup Language), GeoJSON (Request for Comments 7946), des éphémérides .e Ansys STK (Systems Tool Kit) et des enregistrements SigMF (Signal Metadata Format), et --import-route <route.geojson> injecte une ligne GeoJSON dans les types qui suivent une trajectoire. Chaque format est validé par rapport à sa spécification publiée, et un scénario auquel un format ne s'applique pas en explique la raison : voir docs/INTEROP.md.

Autres modes de la CLI — analyser un scénario, fournir des données réelles d'orientation de la Terre, ou exécuter une suite entière :

# Lint a scenario without running it (checks the kind + required fields):
cargo run -- --validate scenarios/integrity-raim.toml

# Feed a real IERS Earth-orientation file (finals2000A) for frame precision:
cargo run -- scenarios/orbit-sgp4-gps.toml --eop tests/fixtures/agency/eop/finals2000A_2022001.txt

# Run a SUITE of scenarios into one aggregated, stamped study artifact
# (writes <suite>.study.json + <suite>.study.html next to the manifest):
cargo run -- --study scenarios/quantum-pnt-demonstrator.suite.toml

# Animate a run's time series: an animated SVG, a self-contained HTML player, and a
# numbered SVG frame sequence with manifest.json (see docs/ANIMATION.md):
cargo run -- scenarios/campaign-jam-spoof-holdover-integrity.toml --animate all

Export d'animation. --animate svg|html|frames|all écrit <scenario>.animation.svg (images clés Cascading Style Sheets (CSS), sans script), <scenario>.animation.html (lecture, pause, défilement, vitesse et panneaux synchronisés, sans ressource externe) et <scenario>.frames/ (frame_0000.svg, … plus manifest.json avec le nombre d'images par seconde et la durée). Une campagne rejoue ses phases et ses alarmes, une exécution de spectre sa cascade ; le thème suit prefers-color-scheme et prefers-reduced-motion affiche l'image finale. Il restitue les propres échantillons de l'exécution, identiques à l'octet près lors d'une nouvelle exécution, et n'ajoute aucune preuve. Voir docs/ANIMATION.md.

Un manifeste de suite est un petit fichier TOML (Tom's Obvious, Minimal Language) — un title et un tableau scenarios = [ … ] de chemins de scénarios — que le moteur exécute à tour de rôle, en regroupant chaque résultat (avec ses étiquettes MODELLED / VALIDATED) dans un unique artefact d'étude autodescriptif. Voir scenarios/quantum-pnt-demonstrator.suite.toml.

Rôle d'interopérabilité. Kshana est la couche de simulation de performance qui se place à côté de la chaîne d'outils de post-traitement, et non un remplacement de celle-ci : fournissez sa sortie RINEX à RTKLIB ou gLAB pour une solution de position, et utilisez sa sortie SP3 comme produit d'orbite précise pour des outils comme Ginan — Kshana répond à la question quelle résilience une architecture PNT donnée procure avant que vous ayez de vrais signaux, dans des formats que ces outils savent déjà ingérer (--export-sp3, ou export_sp3 = true dans un scénario orbit, écrit <scenario>.sp3). La même orbite peut être publiée sous forme d'éléments moyens CCSDS OMM de la filière des normes (--export-omm, ou export_omm = true, écrit <scenario>.omm) — un message OMM 502,0 KVN (notation clé = valeur) par satellite défini par TLE, portant le vrai numéro de catalogue NORAD (North American Aerospace Defense Command), la désignation internationale COSPAR (Committee on Space Research) et l'époque de chaque objet, pour tout consommateur compatible OMM, au lieu d'un jeu d'éléments à deux lignes sur mesure.

Exemple de sortie (holdover d'horloge — remarquez comment les figures de mérite d'intégrité et de sécurité sont rapportées) :

scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote scenarios/clock-holdover.result.json, scenarios/clock-holdover.chart.svg, scenarios/clock-holdover.report.html, and scenarios/clock-holdover.report.json

L'erreur de synchronisation temporelle au 95e centile (p95) de l'horloge optique est de 1.20e-4 ns : le résumé affiche les petites valeurs avec leurs chiffres significatifs plutôt que de les arrondir à 0.0. security indique n/a (no attack) parce que ce scénario ne configure aucune attaque, il n'y a donc rien à détecter. Le résultat JSON porte néanmoins la borne analytique de détectabilité du leurrage de chaque horloge dans fom.security (0,997 pour l'horloge optique, 0,000 pour l'horloge atomique à puce, dont le propre bruit sur la fenêtre de surveillance dépasse la spécification de 20 ns), et son bloc figure_tiers marque ce chiffre applicable: false. Le type de scénario spoof note la détection par rapport à une attaque injectée. figure_tiers attribue aussi à chaque chiffre rapporté son niveau de vérification — VALIDATED (vérifié par rapport à une référence indépendante) ou MODELLED — et la ligne de la matrice de vérification dont le niveau est tiré. Le scénario d'orbite rapporte en outre un bloc de géométrie — fraction d'échantillons avec une solution, meilleure et médiane dilution de précision de position (PDOP) et précision de position — à côté du résultat d'horloge.

Lisez attentivement ces deux nombres. security est une borne analytique de détectabilité du leurrage dérivée de la stabilité de chaque horloge — elle n'a de sens que face à un scénario de leurrage configuré et n'est pas un détecteur RAIM multisatellite. integrity désigne ici l'autocohérence du filtre (fraction des échantillons de la coupure situés dans sa propre borne en k sigma), et non un chiffre d'intégrité HPL/VPL aéronautique. Voir docs/INTEGRITY.md.

Pour une véritable intégrité autonome du récepteur, le type de scénario integrity (scenarios/integrity-raim.toml) exécute un RAIM réel par instantané et par séparation de solutions (de style ARAIM) sur la géométrie de constellation propagée : il calcule les niveaux de protection (HPL/VPL) horizontaux et verticaux à chaque époque et rapporte la fraction d'époques qui respectent les limites d'alerte configurées, avec un diagramme d'intégrité de Stanford pour la classification erreur par rapport au PL (niveau de protection).

Artefacts d'étude reproductibles

Quatre études ouvertes régénèrent chacune un artefact déterministe à l'octet près (graine fixe) à partir d'une seule commande — les nombres derrière les études sur le croisement quantique contre classique, l'écart d'optimisme des perturbations RF, la notation de la résilience PNT et le niveau de protection de la synchronisation temporelle :

# Quantum-vs-classical resilience crossover map (writes paper/crossover/*.json):
cargo run --release --bin crossover_study -- paper/crossover

# RF-impairment optimism-gap study (13-detector panel, scaling laws, LOO predictor):
cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json

# Framework-aligned PNT-resilience scoring + decision-instability study:
cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json

# Conditional Timing Protection Level, calibrated on a real recorded spoof:
cargo run --release --example tpl_jammertest

Chaque artefact consigne la version du moteur, les graines et une empreinte de configuration, et porte une étiquette MODELLED/VALIDATED honnête. Les sondes sur données réelles (*_probe) exécutent le même pipeline sur des enregistrements que vous fournissez localement ; aucun jeu de données n'est livré dans le dépôt. L'étude de l'écart d'optimisme des perturbations RF est rédigée dans la prépublication arXiv:2606,22054, et le niveau de protection conditionnel de la synchronisation temporelle (tpl_jammertest ci-dessus) dans la prépublication arXiv:2606,24210 (voir Citer).

Les études publiées sur le PNT lunaire (arXiv:2607,06212 DOP des balises de surface, arXiv:2607,02566 observabilité par VLBI et arXiv:2610,23871 observabilité par longueur d'arc cislunaire) voient leurs affirmations de géométrie, de dilution de précision, de prédiction en temps réel du référentiel et des paramètres d'orientation de la Terre (EOP), d'orbites rétrogrades distantes et de télémétrie RF recoupées indépendamment dans tests/validate_p*.rs avec des références distinctes (scipy.special.j1, une résolution DOP NumPy indépendante par (HᵀH)⁻¹, une nouvelle analyse NumPy des mêmes lignes finals2000A de l'IERS, et la NASA/JPL Three-Body Periodic Orbit Database). Ce sont des vérifications de régression supplémentaires sur la suite lunaire modélisée ; elles ne changent pas le décompte de la matrice vérifié par machine.

Format de scénario

Format de scénario#

Les scénarios sont du TOML déclaratif. Un champ kind de premier niveau sélectionne le paquet — cinquante au total (clock est la valeur par défaut si le champ est omis) : inertial, timetransfer, hybrid, hybrid-ukf, fusion, gnss-ins, orbit, ephemeris, gnss-sim, integrity, lunar-integrity, lunar-time-offset, spoof, spoof-detect, jamming, sweep, sweep-nd, gravity-map, terrain-nav, terrain-slam, combined-altpnt, pvt, mars-pnt, impairment-eval (banc d'évaluation de la détection par apprentissage automatique des perturbations RF — corpus synthétique étiqueté + harnais ROC/AUC indépendant du détecteur + écart d'optimisme en distribution / hors distribution), quantum-trade (compromis PNT quantique contre classique avec ingestion d'ADEV mesurée + enveloppe de résilience hors GNSS ; MODELLED), space-weather (indices solaires/géomagnétiques + température exosphérique de Jacchia-71 + densité thermosphérique pilotée par l'activité sur l'atmosphère statique ; MODELLED), oem-interop (passerelle d'import/aller-retour CCSDS OEM pour les éphémérides GMAT/Orekit/STK ; MODELLED), le trio d'analyse de mission launch-window (azimut de lancement à deux corps / changement de plan / opportunités), reentry (corridor de rentrée balistique d'Allen-Eggers), eo-coverage (géométrie de fauchée / GSD / accès / revisite en observation de la Terre), space-packet (CCSDS 133,0 TM/TC — télémesure/télécommande — mise en trame Space Packet — structure exacte des bits, aller-retour vérifié), et attitude-budget (couple de gradient de gravité à 3 degrés de liberté + budget d'erreur de pointage en RSS), passes (prédiction des passages de lever/coucher en station sol — AOS/TCA/LOS, élévation maximale, accès), et link-budget (équation de liaison CCSDS/DSN à sens unique — FSPL / Eb·N₀ / marge / fermeture) ; telecom-timing (erreur de temps en holdover, MTIE et TDEV vérifiés par rapport aux gabarits ITU-T) ; spectrum (toute la bande L du GNSS comme une seule densité spectrale de puissance : une cascade fréquence-temps sous une chronologie scénarisée de brouilleur à onde continue, à bande étroite, à balayage ou à bruit adapté, le rapport brouilleur sur signal par bande et la densité de puissance porteuse sur bruit effective à partir du coefficient de séparation spectrale, et l'entrée et la sortie d'enregistrements Signal Metadata Format (SigMF) avec estimations spectrales de Welch ; les spectres des signaux VALIDATED par rapport aux valeurs des manuels, le scénario de brouilleur MODELLED ; voir docs/SPECTRUM.md ; le même type trace des panneaux des bandes UHF, S et C avec des signaux conçus pour l'orbite terrestre basse) ; leo-signal (conceptions de signaux de positionnement, navigation et synchronisation temporelle en orbite terrestre basse pour n'importe quel système : spectres à bande limitée, gigue de poursuite de code et précision de télémétrie, recherche d'acquisition et durée, séparation spectrale par rapport au GPS et à Galileo, tolérance au brouillage et compromis de l'UHF à la bande C, à partir de préréglages publics comme Xona Pulsar, Iridium, Starlink et CentiSpace ou de conceptions en ligne ; les formes closes et le Doppler LEO VALIDATED, les conceptions MODELLED ; voir docs/LEO-SIGNAL.md) ; solar-system (le Soleil, les planètes, Pluton, la Lune et sept grandes lunes à une même époque — positions, constantes, temps de lumière et trajectoires orbitales ; positions des planètes VALIDATED par rapport à JPL Horizons) et body-pnt (positionnement autour de n'importe lequel de ces corps avec une constellation de navigation locale et une liaison d'espace lointain depuis la Terre ; MODELLED) ; campaign (des types existants composés en une chronologie de mission enchaînée avec transmission de l'état entre les phases, un balayage de paramètres, un ensemble Monte-Carlo à graine, ou plusieurs scénarios sous une même condition partagée ; MODELLED, voir docs/CAMPAIGNS.md) ; constellation-design (motifs Walker delta et étoile, listes d'éléments et conceptions multicouches avec préréglages GPS, Galileo, BeiDou et GLONASS, et couverture et dilution de précision sur une grille de latitude/longitude ; le générateur et le DOP global GPS VALIDATED par rapport aux documents de service publiés, voir docs/CONSTELLATION-DESIGN.md) ; leo-pass (un passage de satellite de positionnement, navigation et synchronisation temporelle (PNT) en orbite terrestre basse (LEO) et son bilan de liaison bande par bande, à partir de n'importe quelle constellation et de n'importe quelle conception de signal : angles de visée, Doppler et taux de Doppler, affaiblissements ITU-R dus à la pluie, aux gaz, à la scintillation et à la pénétration des bâtiments, densité de puissance porteuse sur bruit par rapport aux satellites GNSS MEO en vue, ionosphère du premier ordre et combinaisons sans ionosphère, et un bilan de solution à faible énergie, sondage de l'ionosphère à partir de chaque paire de bandes, et moniteurs de leurrage par cohérence du Doppler et de la géométrie du passage et par cohérence entre bandes ; les termes ITU-R et l'enveloppe Doppler d'utilisateur statique VALIDATED, le passage MODELLED, voir docs/LEO-PASS.md) ; leo-navmsg (le message d'éphéméride et d'horloge diffusé d'un satellite PNT en orbite terrestre basse (LEO), pour n'importe quelle orbite et porteuse : un ajusteur d'une orbite de vérité intégrée vers le jeu képlérien de Galileo, ce jeu avec des polynômes de correction le long de la trace, transverses et radiaux, le modèle à 22 paramètres de Liu et al. 2025 ou le polynôme ECEF à horloge nulle ATOMIC ; erreur de distance dans le signal dans l'espace (SISRE) en fonction de l'intervalle d'ajustement et de la période de mise à jour, une vérification de continuité d'une mise à jour en cours de passage, la propre trame binaire documentée de Kshana avec un contrôle de redondance cyclique CRC-24Q et un budget de quantification, et un bloc de style RINEX-4 étiqueté extension de Kshana ; les poids SISRE, l'algorithme utilisateur de Galileo et le CRC-24Q VALIDATED, les ajustements MODELLED ; préréglages facultatifs pour Xona Pulsar, Iridium, Starlink, CentiSpace, un système représentatif en bande C, ATOMIC et Celeste IOD ; voir docs/LEO-NAVMSG.md) ; le trio PNT fusionné MEO + LEO leo-pvt (positionnement Doppler à partir de la vitesse de distance en orbite terrestre basse (LEO), solutions conjointes de pseudodistances GNSS + LEO avec biais inter-systèmes et DOP en fonction du nombre de satellites LEO, couverture polaire et arctique, et transfert de temps LEO vers l'UTC — sur n'importe quelle constellation, avec des préréglages facultatifs comme les signaux d'opportunité de Xona Pulsar, Iridium et Starlink ; l'enveloppe Doppler LEO VALIDATED par rapport aux chiffres publiés d'Iridium et de Xona), leo-ppp (convergence du positionnement ponctuel précis avec GNSS seul et avec augmentation LEO, comparée à Li et al. 2019) et ntn-positioning (positionnement par réseau non terrestre 5G à partir de la borne de Cramér-Rao de la largeur de bande du signal), MODELLED hormis cette enveloppe, voir docs/LEO-PNT-FUSION.md ; leo-pnt-chain (un système LEO-PNT de bout en bout : une conception leo-signal portée par une bande leo-pass, le C/N0 du passage et l'erreur de distance dans le signal dans l'espace du message de navigation transmis à une solution fusionnée leo-pvt et à une convergence leo-ppp, chaque transmission étant listée ; MODELLED, voir docs/LEO-PNT.md, qui est aussi la vue d'ensemble de chaque type et scénario LEO-PNT, y compris les campagnes de résilience, un scénario par domaine d'expérimentation et un par secteur d'utilisateur final) ; la suite PNT lunaire lunar-vlbi, lunar-joint-od-clock, lunar-frame-realisation, moonlight-service-volume, lunar-differential-pnt, lunar-interop-export ; le démonstrateur PNT quantique quantum-time-transfer, quantum-gnss-free-nav, quantum-anomaly-detect ; et les types de recherche sur la sécurité des signaux, le cislunaire et la résilience en couches lunar-attack-surface, realtime-frame-eop, lunar-time-budget, hybrid-optical-rf, cislunar-observability, conflict-resilience — le trio d'analyse de mission et ces types plus récents étant tous MODELLED (chacun avec un noyau en forme close validé ; voir la matrice). Champs communs : seed, une grille [time], une chronologie de disponibilité [gnss] (le pilote de la coupure), et des blocs par capteur avec des chaînes provenance citant la source de chaque chiffre. Exemple (horloge) :

seed = 42
threshold_ns = 20.0
[time]
step_s = 10.0
duration_s = 7200.0
[gnss]
windows = [
  { t0 = 0.0,   t1 = 600.0,  state = "nominal" },  # 10 min GNSS sync
  { t0 = 600.0, t1 = 7200.0, state = "denied"  },  # ~1.8 h outage
]
[clock_quantum]
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (arXiv:1503.08457)"
y0 = 5.0e-17
q_wf = 1.0e-30   # white FM:  q_wf = sigma_y(1s)^2
q_rw = 0.0       # random-walk FM
drift = 0.0      # linear aging (per second)
[clock_classical]
id = "csac-sa45s"
provenance = "Microchip SA65 / SA.45s CSAC datasheet sigma_y(1s)=3e-10"
y0 = 5.0e-10
q_wf = 9.0e-20
q_rw = 0.0
drift = 0.0

Champs facultatifs (désactivés en leur absence) : une horloge peut ajouter flicker_floor (plancher d'Allan du bruit de fréquence en 1/f — modulation de fréquence) ; un capteur inertiel peut ajouter gyro_bias et q_arw (biais du gyroscope et marche aléatoire angulaire), ainsi que bias_instability et q_aa (le plancher d'Allan d'instabilité de biais et la marche aléatoire d'accélération) — ensemble, un budget d'erreur d'accéléromètre à axe unique (1 degré de liberté) (VRW/ARW — marche aléatoire de vitesse/angulaire — et instabilité de biais). C'est le budget d'erreur qu'exécute le paquet de scénarios inertial livré. Par ailleurs, la bibliothèque comporte désormais un navigateur à composants liés à 3 axes vérifié (src/inertial/{attitude,mechanization,imu_errors}.rs) : attitude par quaternion avec compensation du coning/sculling, une mécanisation NED complète (termes de rotation de la Terre et de transport, gravité de Somigliana WGS-84), et un modèle déterministe d'erreurs de centrale inertielle dans lequel le facteur d'échelle, le désalignement, la sensibilité à g, la quantification et la rampe de vitesse sont modélisés (IEEE Std 952-1997, la norme IEEE de spécification et de procédure d'essai des gyroscopes, §A.2 ; Groves 2013 §4,3). Ce chemin à 3 axes est maintenant raccordé à un paquet GNSS/INS à couplage lâche exécutable (kind = "gnss-ins") : un EKF à 15 états d'erreur discipline la solution à composants liés par rapport à des solutions bruitées tant que le GNSS est disponible, puis poursuit en roue libre pendant la coupure, en rapportant l'erreur horizontale fusionnée par rapport à la dérive de l'INS seul en boucle ouverte. Une mise à jour pseudodistance à couplage serré est aussi disponible (elle forme l'innovation dans le domaine des distances, et continue donc de corriger avec moins de quatre satellites). Un scénario de holdover d'horloge peut ajouter runs (> 1) pour exécuter un ensemble Monte-Carlo — chaque figure de mérite est alors rapportée sous forme de moyenne avec une dispersion du 5e au 95e centile, et le graphique grise la bande de confiance de l'erreur (voir scenarios/clock-ensemble.toml).

Un scénario fusion (mêmes blocs que hybrid) exécute deux estimateurs de Kalman indépendants — un pour l'état de l'horloge, un pour l'état de position — disciplinés par le GNSS et assistés par un transfert de temps optique, et rapporte une figure de mérite combinée de holdover. Les deux blocs ne partagent aucune covariance croisée : c'est une paire empilée de budgets d'erreur, et non un véritable filtre conjoint couplé horloge + position (la covariance entre blocs est un élément de la feuille de route). Voir scenarios/fusion-pnt.toml.

Un scénario spoof injecte un leurrage temporel — l'un des quatre types [attack.shape] (linear_ramp, step_jump, meaconing, replay ; un simple rate_ns_per_s reste accepté comme rampe linéaire) — et exécute le détecteur de leurrage de chaque horloge. Le détecteur est un test d'énergie χ²₁ / de Neyman–Pearson bilatéral sur la statistique de surveillance assistée par l'horloge : le seuil est fixé à partir d'un budget cible de fausses alarmes target_pfa, et la probabilité de non-détection P_md est rapportée à la fois en forme close et par Monte-Carlo (mc_runs essais par hypothèse — les deux concordent à quelques ×1/√N près). La figure de mérite de sécurité est 1 − P_md à l'amplitude opérationnellement nuisible (spécification), de sorte qu'une horloge calme qui détecte un leurrage de la taille de la spécification obtient ≈ 1 et qu'une horloge bruitée qui le manque souvent obtient moins (voir scenarios/spoof-attack.toml, scenarios/spoof-meaconing.toml).

Un scénario gnss-sim est une simulation dans le domaine des mesures : pour chaque satellite visible, il synthétise la pseudodistance ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath et le Doppler L1, avec l'ionosphère monofréquence de Klobuchar ([iono], IS-GPS-200 §20.3.3.5.2.5) et la troposphère zénithale de Saastamoinen projetée par la fonction de projection de Niell (1996) ([tropo]). Les résidus alimentent le RAIM par instantané pour obtenir les HPL/VPL à chaque époque, et la pseudodistance, le Doppler, le C/N₀ et les corrections iono/tropo de chaque satellite sont émis dans le tableau JSON gnss_measurements. C'est un simulateur direct (il génère des mesures à partir d'une vérité connue), et non un récepteur/solveur — une exécution sans bruit reproduit la géométrie plus les corrections au niveau sous-millimétrique (voir scenarios/gnss-sim-raim.toml).

Un scénario jamming modélise l'interférence RF comme un bilan de liaison : un [jammer] (position ECEF, power_dbw d'émission, type) augmente le rapport brouilleur sur signal chez un [receiver] qui observe une [constellation] Walker. À partir de la géométrie (affaiblissement en espace libre et gain de l'antenne de réception selon la direction), il calcule le J/S de chaque satellite, le C/N₀ effectif par l'équation anti-brouillage standard (gain de traitement par désétalement × le facteur de séparation spectrale Q ; Kaplan & Hegarty §9,4), et signale la perte d'accrochage sous un seuil de poursuite configurable — en rapportant une figure de mérite availability_under_jamming. Un brouilleur à large bande de 10 W à 1 km neutralise entièrement le récepteur (J/S ≈ 72 dB) ; le même brouilleur à 100 km ne fait que dégrader les liaisons (voir scenarios/jamming-demo.toml).

Un scénario sweep réalise une étude de compromis : il fait varier un parameter (threshold_ns, duration_s, quantum_q_wf ou classical_q_wf) de start à stop sur steps points selon une scale lin ou log, enregistre une metric (par exemple holdover_s) pour les deux horloges, et trace les deux courbes. Le scénario de base se place sous [base] (voir scenarios/sweep-clock-stability.toml).

Un scénario sweep-nd généralise cela à n'importe quel paquet et à un nombre quelconque d'axes : il fait varier des clés TOML pointées d'un scénario [base] (de n'importe quel kind) sur le produit cartésien des [[axes]], réexécute chaque nœud de la grille, et enregistre des metrics données sous forme de chemins JSON pointés dans le résultat (par exemple classical.fom.holdover_s). Il fonctionne pour chaque paquet parce qu'il opère à la frontière TOML/résultat ; les exécutions natives évaluent la grille en parallèle (sans dépendance supplémentaire, wasm retombe sur le séquentiel) et la sortie est déterministe et ordonnée par lignes (voir scenarios/sweep-nd-inertial.toml).

Un scénario orbit dérive la chronologie [gnss] de la géométrie au lieu de la rédiger — donnez une orbite [user], une [constellation], un mask_deg d'élévation et les deux blocs d'horloge. Il rapporte aussi la précision de position à partir de la géométrie des satellites ; le paramètre facultatif sigma_uere_m (erreur de distance équivalente utilisateur à 1 sigma, 1 m par défaut) convertit la dilution de précision de position en un sigma de position. L'orbite de l'utilisateur peut être rendue excentrique avec eccentricity et argp_deg, et j2 = true ajoute la dérive séculaire due à l'aplatissement de la Terre (voir scenarios/orbit-molniya.toml). La constellation peut aussi être réelle : donnez à [constellation] un bloc tle d'ensembles d'éléments à deux lignes et les satellites en sont extraits (voir scenarios/orbit-real-tle.toml). Ajoutez un ou plusieurs blocs [[constellations]] pour du multi-GNSS (par exemple GPS + Galileo ; voir scenarios/orbit-multignss.toml) :

kind = "orbit"
seed = 7
threshold_ns = 5.0
mask_deg = 10.0
sigma_uere_m = 1.0           # optional; position sigma = position-DOP * this
[time]
step_s = 60.0
duration_s = 86400.0
[user]                       # spacecraft (altitude in km, angles in deg)
altitude_km = 8000.0
inclination_deg = 0.0
[constellation]              # Walker-delta GNSS (GPS-like)
altitude_km = 20180.0
inclination_deg = 55.0
planes = 6
sats_per_plane = 4
phasing_f = 1.0
[clock_quantum]  # ... as above
[clock_classical]  # ... as above

Les types alt-PNT sans GPS naviguent sans aucun GNSS, en faisant correspondre une séquence de champ mesurée à une carte au moyen d'un filtre particulaire. Un scénario gravity-map fait voler une trace à travers un champ d'anomalie de gravité en harmoniques sphériques et la retrouve à partir de la lecture d'un gravimètre à atomes froids (scenarios/gps-denied-gravity-nav.toml) ; un scénario terrain-nav fait de même par rapport à un MNT d'élévation SRTM (TERCOM/SITAN, scenarios/terrain-nav.toml) ; et un scénario combined-altpnt fusionne gravité + magnétisme IGRF + terrain dans un seul filtre (scenarios/combined-altpnt.toml).

Un scénario lunar-integrity évalue le PNT cislunaire : il exécute une passe de niveau de protection ARAIM au pôle Sud lunaire par rapport à un ensemble de relais LunaNet/LNIS et rapporte honnêtement l'écart d'intégrité — un σ_URE lunaire d'environ 30 m fait monter le niveau de protection bien au-dessus d'une limite d'alerte de 50 m, de sorte que le service est indisponible selon des règles d'intégrité de type aéronautique (scenarios/lunanet-araim.toml).

Un scénario lunar-time-offset rapporte le taux d'horloge relativiste Terre–Lune — la base d'une échelle de Temps coordonné lunaire (LTC/TCL). Une identité post-newtonienne de premiers principes additionne la différence de potentiel propre (potentiel du géoïde L_G de l'IAU moins le potentiel propre de la surface de la Lune) et le terme cinétique de la Lune (Doppler du second ordre) pour obtenir un taux séculaire de ≈ 57 µs/jour, rapporté avec la plage publiée de 56–59 µs/jour ; il donne aussi le décalage LTC−TT accumulé sur un horizon et un ensemble à variance inverse (une horloge papier lunaire). MODELLED — le chiffre principal dépend de la référence (géoïde terrestre contre sélénoïde lunaire, fenêtre de moyennage), ce qui explique qu'une plage, et non un nombre unique certifié, soit rapportée (scenarios/lunar-time-offset.toml).

Voir scenarios/ pour au moins un exemple travaillé de chaque type (92 types, 193 fichiers de scénario .toml + 1 manifeste de suite — plusieurs types fournissent plus d'un exemple). Tous les types n'ont pas un fichier portant leur nom : lunar-integrity → scenarios/lunanet-araim.toml et gravity-map → scenarios/gps-denied-gravity-nav.toml en sont deux parmi plusieurs. Listez les types répartissables à tout moment avec les erreurs de cargo run -- --validate <file>, le list_kinds() de Python, ou l'outil MCP list_scenario_kinds.

Sortie

Sortie#

L'artefact de résultat est un JSON versionné et autodescriptif : séries temporelles par pas, figures de mérite notées, spécifications des modèles actifs (avec provenance), graine, une empreinte du scénario — de sorte que tout graphique peut être reproduit à partir du fichier — et, pour chaque horloge, une adev_curve ([{tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi}]) : la déviation d'Allan chevauchante sur des temps de moyennage espacés par octaves — la manière standard de lire la stabilité d'une horloge — désormais avec une bande de confiance à 95 % propre au type de bruit pour chaque point (le type en loi de puissance de l'enregistrement est identifié à partir de sa pente d'Allan modifiée, et l'intervalle du χ² utilise les degrés de liberté effectifs correspondants du NIST SP 1065). Le terrain de jeu du navigateur la restitue sous forme de graphique log-log « Clock stability (ADEV) ». (MDEV, TDEV et HDEV sont disponibles comme estimateurs de la bibliothèque ; la courbe du résultat exporté est l'ADEV chevauchante.) Chaque champ, avec ses unités et un renvoi à sa source, est documenté dans docs/SCHEMA.md.

Chaque graphique est autodescriptif. Le terrain de jeu du navigateur, l'export *.chart.svg de la CLI et la fiche de résultats HTML (HyperText Markup Language) apposent tous sur chaque image de graphique un pied de page qui indique Kshana v<version> · scenario <hash> · kshana.dev. Le scenario <hash> correspond aux 12 premiers caractères hexadécimaux de l'empreinte du scénario de l'exécution — un condensat SHA-256 (le Secure Hash Algorithm sur 256 bits) de la définition canonique du scénario (graine, seuils, paramètres des modèles, fenêtres GNSS, …) ; les rapports d'intégrité et lunaires, qui ne portent pas d'empreinte propre, se rabattent sur un SHA-256 de la source du scénario. C'est la même empreinte que celle affichée dans le résumé d'une ligne et dans le JSON du résultat, de sorte qu'un graphique enregistré ou collé porte toujours sa version, le scénario exact qui l'a produit (pour une reproduction bit à bit) et la source — modifiez une entrée quelconque et l'empreinte change.

Les figures de mérite suivent les figures de mérite PNT opérationnelles standard :

Figure de mérite Comment Kshana la calcule
Performance de synchronisation temporelle (paquets horloge/orbite) erreur de phase d'horloge RMS + 95e centile sur la coupure, en nanosecondes (timing_rms_ns) — une métrique de synchronisation temporelle, pas de position
Performance de positionnement (paquets inertiel/hybride) erreur de position à 1 degré de liberté RMS + 95e centile sur la coupure, en mètres (pos_rms_m) ; axe unique. Une exécution unique est marquée monte_carlo: false ; définissez runs = N pour un ensemble Monte-Carlo qui rapporte pour chaque métrique la moyenne, la dispersion et l'IC (intervalle de confiance) bootstrap à 95 %. Toujours pas un CEP/2DRMS 2D (erreur circulaire probable / deux fois la racine de la distance quadratique moyenne) ni une précision pondérée par le DOP (cela demande le modèle à 3 axes — feuille de route)
Autonomie durée de holdover — temps dans la spécification après la perte du GNSS (quantifié sur la grille : une borne inférieure)
Résilience pente de croissance de l'erreur pendant la coupure
Disponibilité fraction de l'exécution avec une solution dans la spécification
Intégrité autocohérence du filtre — fraction des échantillons de la coupure dont l'erreur reste dans la propre borne en k sigma du filtre de Kalman. Pas un chiffre d'intégrité aéronautique HPL/VPL/RAIM (voir docs/INTEGRITY.md)
Sécurité borne analytique de détectabilité du leurrage dérivée de la stabilité de l'horloge — la petitesse et la lenteur d'un leurrage temporel qu'un moniteur de cohérence à horloge unique pourrait signaler. N'a de sens qu'avec une attaque configurée ; pas un détecteur RAIM multisatellite

Ces termes sont nouveaux pour vous ? Chacun est défini en langage clair dans le glossaire.

Organisation du dépôt

Organisation du dépôt#

kshana/
├── src/                                       # the kshana core crate (library + CLI)
│   ├── api.rs · main.rs · lib.rs              # typed dispatch (92 kinds) + CLI + crate root
│   ├── python.rs · wasm.rs                    # optional PyO3 / wasm-bindgen bindings
│   ├── types.rs · scenario.rs · allan.rs      # shared core (time grid, GNSS timeline, Allan)
│   │
│   ├── models.rs · estimator.rs · kalman.rs   # Pack 1 — clock holdover + integrity
│   ├── security.rs · detection.rs · spoof.rs · spoof_monitors.rs  # spoof detection
│   ├── filter_health.rs · fom.rs · fom_label.rs · report.rs · chart.rs · run.rs  # health · FoM scoring + labelling · output
│   ├── suite.rs · study.rs                     # scenario suites + aggregated multi-scenario study artifacts (`--study`)
│   ├── inertial/                              # Pack 2 — strapdown INS (attitude · mechanization · imu_errors · quantum_imu)
│   ├── timetransfer.rs · timetransfer_adv.rs · timegeo.rs  # Pack 3 — TWSTFT/CV/PPP/optical, Sagnac
│   ├── hybrid.rs · ensemble.rs · sweep.rs     # Pack 4 — fused PNT, Monte-Carlo, trade sweeps
│   │
│   ├── timescales.rs · jd2.rs · ephem.rs      # time systems, two-part JD, Sun/Moon ephemeris
│   ├── precession.rs · nutation.rs · cio.rs   # IAU 2006/2000A precession-nutation + CIO GCRS↔ITRS
│   ├── frames.rs · *_data.rs                  # TEME↔ECEF + generated nutation/CIO/EGM2008/IGRF tables
│   │
│   ├── orbit.rs · sgp4.rs · tle.rs · walker.rs   # geometry, SGP4/SDP4, TLE, Walker design
│   ├── propagator.rs · forces.rs · gravity_sh.rs · integrator.rs  # Cowell + perturbations (EGM2008 d/o70, GR) + RK4/DOPRI
│   ├── maneuver.rs · batch_ls.rs · orbit_determination.rs  # burns/Lambert/porkchop, Gauss-Newton, OD
│   ├── cr3bp.rs · lunar.rs · lunar_frame.rs · lunar_od.rs  # Earth–Moon CR3BP + halo/NRHO STM corrector, cislunar/LunaNet ARAIM, MCI↔MCMF, lunar OD
│   ├── lunar_time.rs · lunar_vlbi.rs · lunar_combination.rs · lunar_frame_realise.rs · lunar_service.rs · lunar_dpnt.rs · lunar_interop.rs  # tiers per piece in the matrix lunar PNT suite — LTC time · geodetic VLBI · joint OD+clock · frame realisation · Moonlight service-volume · differential PNT · LunaNet/IOAG interop export
│   ├── body.rs · mars_frame.rs · ephem_provider.rs · radiometric.rs · ccsds_tdm.rs  # deep-space: multi-body · Mars frame · ephemeris seam · radiometric obs + CCSDS-TDM
│   ├── deepspace_od.rs · clock_state.rs · mars_atmos.rs · mars_pnt.rs · linkbudget.rs · gse_sim.rs  # SRIF OD · onboard clock · Mars drag · relay-PNT · link budget · GSE sim
│   │
│   ├── fusion/                                # GNSS/INS — EKF · UKF · tightly_coupled(17) · coupled · closed_loop
│   ├── raim.rs · sbas.rs                      # RAIM/ARAIM HPL/VPL, SBAS DO-229E PLs + L1/L5 iono-free
│   ├── gnss_sim.rs · ionex.rs · pvt.rs · jamming.rs  # measurement domain · ionosphere maps · single-point positioning · jamming
│   ├── navsignal.rs                            # nav-signal PSD (BPSK-R/BOC) · spectral-separation → anti-jam Q · DLL code-tracking jitter · multipath envelope
│   ├── gravimeter.rs · igrf.rs · mapmatch.rs · particle_filter.rs · altpnt/  # gravity/magnetic/terrain alt-PNT
│   ├── rinex.rs · rinex_obs.rs · glonass.rs · sp3.rs · oem.rs · omm.rs · permalink.rs  # interop formats
│   ├── launch.rs · reentry.rs · eo_payload.rs · attitude_budget.rs · passes.rs · space_packet.rs  # mission-analysis budgets + CCSDS Space Packet
│   ├── space_weather.rs · holdover.rs · tpl.rs   # space-weather environment · GNSS-denied clock-holdover calculator · conditional Timing Protection Level (under spoofing)
│   ├── resilience/                              # framework-aligned PNT-resilience scoring + decision-instability study (RPCF · Dirichlet · Kendall-τ · diversity collapse · assurance report)
│   ├── impairment_eval.rs · impairment_study.rs · impairment_ml.rs · eval_stats.rs  # Machine-learning RF-impairment eval testbed · optimism-gap study · LR/MLP detectors · bootstrap/DeLong/Spearman stats
│   ├── sdr.rs · realdata/                       # software-defined-receiver front end (IQ/IF → E/P/L taps → SQM) + real-data ingest adapters (RINEX · UBX · GnssLogger · JammerTest · Yunnan · SatGrid)
│   ├── crossover.rs · quantum_trade.rs · frugal.rs · integrity_impact.rs  # quantum-vs-classical crossover map · PNT trade · cost-per-coverage ROI · integrity impact
│   ├── quantum_devices.rs · quantum_faults.rs · quantum_nav_od.rs · qtrade.rs · timetransfer_chain.rs · representativeness.rs  # Quantum-Enabled PNT demonstrator — device error models · fault catalogue · GNSS-free quantum OD · unified trade harness · quantum time-transfer chain · representativeness / gaps-to-flight ledger
│   ├── interchange.rs · verification.rs          # KIF artifact envelope · machine-checked verification matrix
│   └── bin/crossover_study.rs · bin/validation_report.rs  # crossover-study artifact generator · release validation-summary HTML
│
├── mcp/kshana-mcp/        # standalone, workspace-EXCLUDED crate — the MCP server (+ Dockerfile, server.json)
├── ide/jetbrains/         # standalone Kotlin/Gradle IntelliJ-Platform plugin
├── xval/                  # standalone, workspace-EXCLUDED external cross-checks: anise-{frames,lunar-od,mars-od,service-geometry} (Rust ANISE/SPICE DE440) + orekit-passes (Java Orekit)
│
├── examples/            # reproducible study generators: tpl_jammertest · resilience_report · optimism_study + real-data probes (jammertest_probe · yunnan_probe · satgrid_probe · texbat_probe · ingest_realdata)
├── paper-artifacts/     # byte-deterministic study artifacts, regenerable from examples/ (optimism-study.json · resilience-study.json); raw datasets stay out
├── scenarios/            # one cited .toml per kind + geometry-driven + GPS-denied
├── scripts/              # reproducibility + repo-hygiene + SBOM guards
├── docs/                 # CONCEPTS, ARCHITECTURE, CAPABILITY, VALIDATION, PROVENANCE, GLOSSARY, …
├── web/                  # the WebAssembly playground + kshana.dev site
├── tools/                # table generators (EGM2008 · IGRF · nutation · CIO) + fetch_tles.sh
├── .github/workflows/    # ci · release · publish · wheels · pages · mcp-publish · jetbrains-plugin · frame-xval
├── pyproject.toml        # Python packaging (maturin)
├── CHANGELOG.md          # Keep a Changelog + SemVer
└── CITATION.cff · ROADMAP.md · CONTRIBUTING.md · SECURITY.md
FAQ (foire aux questions)

FAQ#

Dois-je comprendre la physique quantique pour l'utiliser ? Non. Si vous savez exécuter une ligne de commande, vous savez exécuter Kshana. Commencez par le guide en langage clair ; cherchez les termes dans le glossaire.

S'agit-il d'une conception de matériel quantique ou d'un logiciel de vol ? Non. C'est un simulateur de performance. La fidélité au matériel quantique provient de modèles d'erreur publiés, pas de cet outil. Voir Ce que c'est / n'est pas.

Les résultats quantiques sont-ils réalistes, ou du marketing ? Chaque paramètre est cité d'après une fiche technique ou un article, chaque modèle est validé par rapport à une relation de manuel, et la maturité est étiquetée honnêtement dans VALIDATION.md — y compris le fait qu'aucune horloge optique au strontium n'a volé. Le moteur est neutre : le quantique et le classique utilisent le même code avec des nombres publiés différents.

Puis-je compter sur l'accord de deux exécutions ? Oui — les exécutions sont déterministes : scenario + seed + engine version → bit-identical output, garanti par scripts/check-reproducible.sh.

Puis-je l'utiliser depuis Python ou dans un navigateur ? Oui — voir Installer : les exemples Python et WebAssembly s'y trouvent. Les deux appellent le même moteur.

Comment modéliser mon propre capteur ? Écrivez un scénario .toml avec les chiffres publiés de votre capteur dans les champs provenance. Voir Format de scénario et les exemples dans scenarios/.

Est-il gratuit pour un usage commercial ? Oui — sous l'AGPL-3.0, y compris dans un cadre commercial, tant que vous respectez le copyleft de l'AGPL (notamment : si vous modifiez Kshana et l'offrez via un réseau, vous devez offrir à ces utilisateurs votre source modifiée). Si cela ne vous convient pas — par exemple si vous devez intégrer Kshana dans un produit propriétaire ou exploiter un service réseau fermé — une licence commerciale est disponible auprès d'Ashforde® OÜ ; voir LICENSING.md et Assistance.

Dépannage

Dépannage#

cargo build échoue avec une ancienne chaîne d'outils. Kshana nécessite Rust ≥ 1,88. Mettez à jour avec rustup update.

La compilation de l'extension Python échoue à l'édition de liens sur macOS (Undefined symbols … _Py…). Une extension Python résout ses symboles au chargement. maturin définit automatiquement le bon indicateur de l'éditeur de liens — utilisez maturin develop --features python plutôt qu'un simple cargo build.

La compilation Python se plaint que l'interpréteur est plus récent que ce que PyO3 connaît. Définissez PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 (les wheels abi3 sont compatibles vers l'avant entre versions de CPython).

La compilation WebAssembly ne trouve pas la cible. Installez-la une fois avec rustup target add wasm32-unknown-unknown, puis wasm-pack build --target web -- --features wasm.

Où est passée ma sortie ? Chaque exécution écrit <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html et <scenario>.report.json à côté du fichier .toml d'entrée, et aussi <scenario>.table.csv pour les types qui publient un tableau. Tous sont ignorés par git par conception.

Gestion des versions et publications

Gestion des versions et publications#

Kshana suit le versionnage sémantique. Tant que la version est antérieure à 1.0, le schéma public des scénarios et des résultats peut encore changer ; les changements incompatibles sont signalés explicitement dans le CHANGELOG.md. Chaque résultat est reproductible à partir de scenario + seed + engine version.

Chaque étiquette vX.Y.Z publie automatiquement tous les canaux, dans un ordre unique — la suite de tests complète s'exécute d'abord sur le commit étiqueté, rien n'est publié tant qu'elle ne passe pas, et ensuite le pipeline vérifie que chaque registre sert bien la nouvelle version (docs/RELEASING.md). Les canaux :

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.

Canal Installer / obtenir Sommaire
crates.io cargo install kshana · kshana = "0.35" Bibliothèque Rust + CLI
crates.io cargo install kshana-mcp le serveur MCP
PyPI (Python Package Index) pip install kshana wheels abi3 (Linux/macOS/Windows) + sdist (distribution des sources)
npm npm install kshana module WebAssembly + enveloppe JS
ghcr.io docker run -i ghcr.io/ashfordeou/kshana-mcp image OCI (Open Container Initiative) multi-architecture — aucune chaîne d'outils nécessaire
npm npx -y kshana-mcp@0.40.0 lanceur : télécharge le binaire de la version, vérifie SHA256SUMS, l'exécute
PyPI uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 le même lanceur pour Python
Homebrew · Scoop · winget brew install ashfordeOU/tap/kshana-mcp · scoop install kshana-mcp · winget install AshfordeOU.KshanaMcp le binaire kshana-mcp, généré à partir du SHA256SUMS de chaque version
registre MCP officiel découvert automatiquement par les clients MCP io.github.ashfordeOU/kshana-mcp (image OCI, paquets npm et PyPI)
JetBrains Marketplace IDE → Plugins → rechercher « Kshana » le plugin d'IDE Kshana — PNT simulator
Zenodo DOI une archive citable de chaque version
kshana.dev ouvrir dans un navigateur Kshana Studio, l'application WebAssembly dans le navigateur, reconstruite à partir de chaque étiquette de version (de sorte que la version affichée est la version exécutée)

La version du crate / de l'image / du registre du serveur MCP suit celle du moteur (il embarque la bibliothèque) ; le plugin JetBrains a sa propre version (il appelle votre binaire kshana installé).

Feuille de route

Feuille de route#

Voir ROADMAP.md pour la feuille de route par phases, CHANGELOG.md pour l'historique des versions publiées, et docs/CAPABILITY.md pour la feuille de route par capacité. L'ordre de priorité est le suivant : d'abord les preuves de synchronisation temporelle et de holdover pour les infrastructures critiques (gabarits télécoms, holdover plus long avec vieillissement et bruit de scintillation, ingestion de données d'horloge mesurées) ; ensuite la méthode neutre de comparaison quantique contre classique (résultats étiquetés MODELLED jusqu'à ce que les données mesurées d'un partenaire les promeuvent) ; et navigation lunaire / cislunaire et en espace lointain maintenue, non étendue comme priorité. La réduction de référentiel précise ITRF est maintenant livrée — la chaîne complète GCRS↔ITRS IAU 2006/2000A fondée sur le CIO (mouvement du pôle + nutation sous la seconde d'arc), vérifiée bit à bit par rapport à SOFA/ERFA et recoupée indépendamment avec ANISE (SPICE en Rust pur) à ≤ 3,6 m sur l'orbite GNSS. Les éléments à court terme comprennent la fusion de phase de la porteuse à couplage serré et la mise à disposition du navigateur GNSS/INS à couplage lâche/serré dans davantage de paquets ; le moteur de navigation radiométrique en espace lointain / sur Mars est arrivé dans v0.17.0 (validé en simulation). La couche de physique quantique est un élément P2 : l'accéléromètre CAI est désormais simulé à partir des premiers principes (phase de Mach–Zehnder, bruit de projection, décroissance du contraste, couplage des vibrations), tandis que les capteurs d'horloge/de transfert de temps sont encore pilotés par des coefficients publiés d'Allan/de budget de bruit. Le TEME&harr;ECEF fondé sur le GMST, les systèmes de temps IERS à secondes intercalaires (UTC/TAI/TT/UT1), la propagation d'orbite SGP4/SDP4 (v0.7.0, validée par rapport aux vecteurs AIAA 2006-6753) et le paquet de fusion gnss-ins exécutable ont tous été livrés, et la vitesse inertielle est exposée en aval. Un détecteur stochastique actif de leurrage temporel (test d'énergie de Neyman–Pearson / χ²₁ avec P_fa/P_md Monte-Carlo et une figure de mérite de sécurité de 1−P_md), un modèle de brouillage par bilan de liaison (J/S → C/N₀ effectif → perte d'accrochage), la disponibilité multiconstellation, un budget d'erreur d'IMU à axe unique (1 degré de liberté), deux estimateurs de Kalman indépendants (horloge + position) rapportés comme une figure de mérite combinée, la géométrie réelle des constellations à partir des TLE, un rapport sous forme de fiche de résultats HTML, la disponibilité GNSS dérivée de la géométrie et la dilution de précision à partir d'orbites képlériennes avec excentricité et dérive J2, des bandes de confiance Monte-Carlo, des balayages de paramètres d'études de compromis, un terrain de jeu WebAssembly dans le navigateur, et des liaisons facultatives Python (PyO3) et WebAssembly (wasm-bindgen) ont été intégrés à main.

Contribuer

Contribuer#

Voir CONTRIBUTING.md. En bref : les tests passent (cargo test), les deux scripts de garde passent, Conventional Commits, et une entrée CHANGELOG.md [Unreleased] pour chaque changement visible par l'utilisateur. La participation est régie par notre code de conduite. Pour signaler un problème de sécurité, voir la politique de sécurité — merci de ne pas ouvrir de ticket public pour des vulnérabilités.

Documentation : chaque document, et à qui il s'adresse

Documentation#

Document Pour qui Contenu
Introduction aux concepts tout le monde, commencez ici ce que Kshana fait et pourquoi, de zéro jusqu'à la physique
Kshana Studio tout le monde exécuter le moteur dans votre navigateur (WebAssembly) ; notes de compilation et de déploiement
Glossaire tout le monde définitions en langage clair de chaque terme
Types de scénario tout le monde chaque type que le moteur distribue : ce qu'il fait, ses champs, un exemple de commande, ses lignes de registre et le graphique que le moteur écrit pour lui
Données de partenaires laboratoires et fabricants détenant des données mesurées quelles lignes MODELLED un enregistrement d'horloge ou d'IMU mesuré pourrait promouvoir, les formats, comment une soumission est vérifiée (kshana partner check), notée et créditée
Architecture développeurs / relecteurs carte des modules, pipeline du moteur, distribution et diagrammes
État de la validation relecteurs / auteurs de citations ce qui est validated et ce qui est not modeled, avec les preuves
Matrice de vérification relecteurs / auteurs de citations le registre de preuves vérifié par machine — chaque ligne de capacité avec son statut, son module, son test et sa référence indépendante externe, généré à partir de src/verification.rs
Justification de la modélisation relecteurs pourquoi chaque ligne modélisée n'a pas de référence indépendante externe, énoncé ligne par ligne
Provenance relecteurs / auteurs de citations chaque paramètre de capteur, modèle et jeu de données rattaché à sa source publiée, dans un seul tableau citable
Reproductibilité et provenance relecteurs / empaqueteurs garanties de déterminisme, figeage des références, SBOM (nomenclature logicielle), provenance de la compilation
Étiquettes de plateforme des wheels empaqueteurs la matrice des wheels Python abi3 — quelle étiquette de plateforme pip install kshana résout
Positionnement évaluateurs où Kshana se situe par rapport à RTKLIB/gLAB (complémentaire), et le niveau sans installation dans le navigateur
Kshana Pro évaluateurs / responsables de programme ce que la surcouche propriétaire Pro ajoute au même moteur : optimiseur de conception, incertitude et sensibilité, dossier de mission, surveillance de campagne, coexistence spectrale, service de tâches sur site, traçabilité des exigences ; ce que chacun produit et ce qu'il ne fait pas
Rapport technique · Article JOSS relecteurs / auteurs de citations / évaluateurs l'article de recherche étendu complet — architecture, modèles par domaine, validation, études de cas et limites — plus la soumission JOSS (Journal of Open Source Software) concise
Validation de SGP4 relecteurs / auteurs de citations accord avec la référence AIAA 2006-6753 (666 états, ~4 mm) et comparaison directe avec le crate indépendant sgp4 (accord à moins du micron / 4,12 mm)
Validation du modèle de forces relecteurs / auteurs de citations le moteur à forces complètes (src/precise_od.rs) ajusté à des éphémérides d'agences — méthodologie et résidus validés
Guide des TLE réels utilisateurs piloter des scénarios à partir de vrais TLE de constellations Celestrak / Space-Track (par opposition à l'ensemble Walker synthétique fourni)
Figure de mérite d'intégrité évaluateurs ce que signifient les chiffres integrity / security — et ce qu'ils ne sont pas par rapport aux HPL/VPL aéronautiques
Référence ARAIM relecteurs / intégrateurs l'implémentation ouverte du niveau de protection ARAIM MHSS — la projection du biais nominal b_k, σ_URA contre σ_URE, et les probabilités a priori des modes de défaillance
Modèles quantiques · détails relecteurs la couche de physique de l'interféromètre à atomes froids, et les cas où les coefficients sont encore tirés de tables
Compliance évaluateurs Périmètre algorithmique de DO-229E / DO-316, et ce qui n'est pas une déclaration de respect de la norme
Confiance maritime marins / intégrateurs le score de confiance GNSS de 0 à 100 pour les NMEA d'un navire, ses moniteurs et ses limites (à titre consultatif, pas un équipement de navigation homologué)
Flux NMEA de formation formateurs maritimes NMEA de passerelle synthétiques avec brouillage et leurrage scénarisés et un journal d'instructeur ; texte seulement, jamais pour la navigation réelle
Carte des interférences analystes / marins où des aéronefs et des navires ont signalé des données de navigation dégradées, et dans quelle mesure un itinéraire est touché
Paquets de preuves opérateurs / assureurs dossiers techniques signés d'un événement de confiance et manière d'en vérifier un
Télémétrie de confiance équipes d'exploitation / de sécurité le flux de confiance sous forme de métriques Prometheus, d'événements SIEM et d'OpenTelemetry, avec un tableau de bord Grafana
Intégrations maritimes propriétaires de bateaux / intégrateurs le plugin Signal K, le mode passerelle d'OpenCPN et la version de référence
Test bench fabricants de récepteurs rejouer un scénario exporté dans un simulateur de laboratoire et évaluer le journal du récepteur
Correspondance de compliance évaluateurs cadres de résilience publics rapprochés des sorties de Kshana, avec sources et lacunes ; kshana compliance-report
Notebooks utilisateurs tutoriels exécutables avec leur texte rendu
Normes et interopérabilité intégrateurs les formats d'échange GNSS / dynamique de vol / agences que Kshana lit et écrit (RINEX, SP3, CCSDS OEM/OMM/TDM/Space-Packet, …)
Fusion PNT en orbite basse utilisateurs / évaluateurs positionnement, navigation et synchronisation temporelle fusionnés MEO + LEO : Doppler, pseudodistance conjointe, convergence PPP, 5G NTN, couverture polaire et transfert de temps LEO sur toute constellation ; les préréglages optionnels et leurs sources publiques
Campagnes utilisateurs / évaluateurs composer des scénarios : chronologies de mission enchaînées, balayages de paramètres, ensembles Monte Carlo et exécutions à conditions partagées, avec les identités de composition que les tests fixent
Catalogue des scénarios utilisateurs / intégrateurs chaque type de scénario pouvant être lancé, avec ses champs TOML obligatoires et facultatifs — généré à partir de api::list_scenario_kinds()
Schéma des résultats intégrateurs chaque champ du JSON de résultat, avec ses unités et un pointeur vers la source
API Python utilisateurs de Python la surface de liaison PyO3 — appeler le moteur, les types de scénario et de résultat, et des exemples
Affirmations et réalité relecteurs le registre de résolution des affirmations excessives + la garde de CI (tests/no_overclaims.rs) qui le maintient résolu
Feuille de route tout le monde la feuille de route par phases — ce qui a été livré et ce qui vient ensuite
Serveur MCP · Plugin JetBrains agents / utilisateurs d'IDE exécuter Kshana depuis un assistant d'IA ou un IDE JetBrains
Guide de l'agent · Surfaces agents / intégrateurs quel outil répond à quelle question, ce qu'il faut conserver avec chaque réponse ; où chaque capacité est accessible (CLI, Rust, Python, WASM, MCP, plugin, JetBrains, notebooks) et pourquoi une cellule est N/A
Journal des modifications tout le monde historique des versions publiées (Keep a Changelog + SemVer, gestion sémantique de version)
Contribuer contributeurs compilation, gardes, discipline de test et de citation, DCO (Developer Certificate of Origin)
Gouvernance contributeurs / communauté comment Kshana est gouverné — qui décide, comment, et la frontière entre ouvert et fermé
Code de conduite communauté conduite attendue (Contributor Covenant)
Politique de sécurité auteurs de signalements comment signaler une vulnérabilité ; note sur le double usage
Références principales

Références principales#

Références indépendantes et normes de validation — les autorités externes auxquelles les vérifications de Kshana sont rattachées :

  • Vallado, Crawford, Hujsak & Kelso — Revisiting Spacetrack Report #3 (AIAA 2006-6753 ; données de test) : le jeu de vérification SGP4/SDP4 auquel Kshana concorde à 4,12 mm, et les exemples de référentiels résolus par rapport auxquels la chaîne TEME→ITRF est vérifiée.
  • IAU SOFA / ERFA — les routines de référence de temps et de référentiel par rapport auxquelles la nutation IAU 2000A et la réduction CIO GCRS↔ITRS sont validées bit à bit.
  • Petit & Luzum (dir.) — IERS Conventions (2010), IERS TN (Technical Note) 36 (orientation de la Terre, mouvement du pôle et normes de référentiel).
  • Riley — Handbook of Frequency Stability Analysis, NIST SP 1065 (relations de la déviation d'Allan et série de référence NBS14 ; NBS = l'ancien National Bureau of Standards des États-Unis).
  • Pedregosa et al. — scikit-learn: Machine Learning in Python, JMLR 12 (2011) : les implémentations de référence de ROC/AUC, de matrice de confusion et de précision/rappel/F1 auxquelles la plateforme d'évaluation des perturbations RF est rapproché exactement (tests/eval_metrics_reference.rs).
  • Virtanen et al. — SciPy 1,0, Nature Methods 17 (2020) : optimize.nnls, stats.chi2 et linalg.expm — les routines de référence par rapport auxquelles l'ajustement NNLS de l'ADEV mesurée du compromis quantique, les bandes de cohérence du χ² et la covariance du bruit de processus d'horloge de van Loan sont validés (tests/scipy_reference.rs).
  • Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024) : utilisé à la fois comme antériorité ouverte (voir Comparaison et antériorité ouverte ci-dessous) et comme référence indépendante du DOP à laquelle le calcul de GDOP/PDOP/HDOP/VDOP/TDOP est rapproché à 1e-6 près (tests/dop_reference.rs).
  • Montenbruck & Gill — Satellite Orbits: Models, Methods and Applications (Springer) : les modèles de forces à la base de l'ajustement du modèle de forces aux éphémérides précises des agences.
  • Howell — Three-dimensional, periodic, halo orbits, Celestial Mechanics 32(1) (1984), doi:10.1007/BF01358403 ; Zimovan-Spreen, Howell & Davis — Near rectilinear halo orbits and nearby higher-period dynamical structures, Astrodynamics 6 (2022), doi:10.1007/s42064-021-0125-x (les familles halo/NRHO que le correcteur différentiel CR3BP reproduit).

Physique des dispositifs et des méthodes — les sources citées derrière les modèles de capteurs :

  • Origlia, Schiller, Bongs et al. — arXiv:1503,08457 (horloge à réseau optique de strontium, objectif spatial).
  • Oelker et al., Nature Photonics (2019) — doi:10.1038/s41566-019-0493-4 (horloge Sr de laboratoire, 4,8×10⁻¹⁷).
  • Templier et al., Science Advances (2022) — arXiv:2209,13209 (triade d'accéléromètres quantiques hybrides).
  • Groves, Principles of GNSS, Inertial, and Multisensor Integrated Navigation — tutoriel de l'IEEE AESS (Aerospace and Electronic Systems Society) (dépôt Discovery de l'University College London) (croissance de l'erreur d'estime).
  • Giorgetta et al., Nature Photonics 7, 434 (2013) — arXiv:1211,4902 ; Deschênes et al., Phys. Rev. X 6, 021016 (2016) — APS (American Physical Society) (transfert optique bidirectionnel de temps et de fréquence ; la liaison optique inter-satellites modélise son budget de non-réciprocité d'après ces travaux).
  • Betz — Binary Offset Carrier Modulations for Radionavigation, NAVIGATION 48(4) (2001), doi:10.1002/j.2161-4296.2001.tb00247.x (la modulation BOC et la théorie de séparation spectrale derrière src/navsignal.rs).
  • Kaplan & Hegarty (dir.) — Understanding GPS/GNSS: Principles and Applications (3e éd., Artech House, 2017) : l'équation du C/N₀ effectif en anti-brouillage et la gigue de bruit thermique du suivi de code par DLL précoce–tardif que les modèles de signal de navigation et de brouillage utilisent.

Comparaison et antériorité ouverte — les outils et les études par rapport auxquels Kshana se situe :

  • Humphreys et al. — TEXBAT (le Texas Spoofing Test Battery ; ION — Institute of Navigation — GNSS 2012) : les paramètres de la batterie de tests de leurrage par rapport auxquels le détecteur multicouche est caractérisé.
  • González et al. — NaveGo (2017) : les profils d'erreur de navigation inertielle ouverts et validés utilisés comme référence de base classique.
  • Iiyama, Casadesús Vila & Gao — LuPNT (ION GNSS+ 2023, Stanford NavLab) : simulateur PNT lunaire ouvert.
  • Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024), doi:10.1016/j.softx.2024.101811 : analyse ouverte de données GNSS.
  • Li, Zaminpardaz, Kealy & Greentree — Quantum sensors for enhanced positioning and navigation: a comprehensive review, GPS Solutions 30(1) :62 (2026), doi:10.1007/s10291-026-02030-y.
  • Bertone et al. — Earth and Space Science 8(6) (2021), doi:10.1029/2020EA001454 : DO réduite-dynamique de GRAIL, le plancher d'accélération empirique que l'ajustement LRO reproduit.