Kshana · क्षण · el instante preciso
Un simulador de código abierto para la resiliencia de PNT (posicionamiento, navegación y temporización).
Estado de la integración continua en main
Cobertura de líneas cercana al 95 % de src/, medida en docs/COVERAGE.md y con un mínimo del 85 % exigido en la integración continua
176 de 401 capacidades VALIDATED frente a una referencia independiente externa, según la matriz de verificación
Estado de la puerta de calidad de SonarQube Cloud
Versión v0.40.0
Licencia: AGPL-3.0-only
DOI 10.5281/zenodo.20528627, el registro conceptual de Zenodo de todas las versiones
Hay una licencia comercial disponible en Ashforde® OÜ, véase Ediciones
kshana en crates.io, la versión publicada actual
kshana en PyPI, la versión publicada actual
kshana en npm, la versión publicada actual
Abrir Kshana Studio · Instalar · Capacidades · Evidencias · Investigación · Documentación · Cómo citar
Contenido
- Ensaye el minuto en que el GNSS se apaga
- Novedades de 0,40, Novedades de 0,39, Novedades de 0,38 y 0,38 en detalle: puntuación de jammertest, los indicadores propios del receptor, entradas de máquina, temporización y holdover, paquetes de normas, LunaNet AFS, la ida y vuelta de laboratorio, kshana-bench, el observatorio, exportadores, óptica, navegación de usuarios espaciales e infraestructura lunar
- Kshana Studio y cada página de Studio
- Capacidades: la tabla de áreas, cada tipo de escenario por familia, cada comando, cada superficie
- Cómo funciona una ejecución, Misiones
- Evidencias: el registro, dominios de capacidades
- Instalar, Arquitectura (y los diagramas), asistente de IA
- Ediciones, Investigación, Cómo citar, Licencia
- Referencia: uso, formato de escenario, salida, estructura del repositorio, preguntas frecuentes, solución de problemas, versionado, hoja de ruta, contribuir, documentación
Ensaye el minuto en que el GNSS se apaga#
Kshana reproduce jamming, spoofing y holdover de reloj cuando fallan las señales GNSS (Sistema Global de Navegación por Satélite), y le dice cuánto tiempo mantiene un sistema la hora y la posición dentro de su presupuesto, y qué reloj o sensor aporta más margen. Es un único motor en Rust. Se ejecuta en un terminal, un cuaderno, un IDE (entorno de desarrollo integrado), un asistente de IA (inteligencia artificial) o en su navegador.
Cada ejecución es reproducible bit a bit a partir del escenario, la semilla y la versión del motor. Cada capacidad lleva una de tres etiquetas en un registro comprobado por máquina: VALIDATED (concuerda una referencia independiente externa), MODELLED (internamente coherente, y declarado en voz alta) o PARTNER (la posee un socio de hardware).
Estado: v0.40.0. Un sustrato de simulación validado y reproducible para la resiliencia de PNT. La temporización y el holdover van primero, porque ese dominio es el mejor validado. Kshana es un instrumento de estudio y de compromisos de diseño: no es hardware generador de señales de radiofrecuencia (RF) (no maneja ninguna radio y no transmite nada; su salida a nivel de señal son archivos de muestras IQ en banda base para receptores por software), no es un receptor GNSS de hardware ni certificado (su receptor por software es una herramienta de análisis) y no es un producto de vuelo. ¿Nuevo en el campo? Empiece por la introducción en lenguaje llano y el glosario.
Novedades de 0,40#
0,40 añade un presupuesto de errores a nivel de misión, etiqueta cada figura y tabla con su nivel de evidencia, lee registros de reloj medidos, comprueba envíos de socios de datos, estima dónde puede estar un emisor de interferencia y habla diecisiete idiomas además del inglés. El registro tiene ahora 401 filas: 176 VALIDATED, 221 MODELLED, 4 PARTNER. Ninguna fila se promovió a VALIDATED, y cada fallo que se indica a continuación queda fijado por una prueba.
- Hilo de misión. El tipo de escenario
mission-threadencadena fases desde el lanzamiento hasta la entrada (launch-ascent,leo-rendezvous,tli-and-cruise,entryy cuatro tipos de escenario lunares) con reglas de traspaso indicadas, un margen frente a los requisitos indicados y el eslabón más débil; un ejemplo de extremo a extremo de clase Artemis en 11 fases (segmentos terrestre y lunar), 92 tipos de escenario en total. Cada número es MODELLED. La propagación cislunar frente a la trayectoria pública de Artemis I no alcanza su umbral preregistrado (45,3 km y 0,25 m/s frente a 5 km y 0,05 m/s; la causa son pequeñas maniobras que el modelo no incluye), y el propagador lunar frente a la órbita de CAPSTONE no alcanza el suyo (136,8 km frente a 25 km al final de una revolución); la comparación con LRO se alcanza. Las filas siguen siendo MODELLED (Hilo de misión, segmento lunar). En el Studio, el hilo se lee en/studio/mission-thread/. - Etiquetas de evidencia. Cada figura y tabla que escribe una ejecución lleva el nivel y los identificadores de fila del registro en que se apoya, leídos de la matriz.
- Relojes medidos. Se leen ocho formatos de registro de reloj (
docs/CLOCK-LOG-FORMATS.md) y una serie ajustada puede conducir el holdover. Frente a umbrales preregistrados, el ajuste no alcanza F1(a) en cinco de seis registros y F2 en uno; ambos siguen siendo MODELLED (Registro de cambios). - Socios de datos.
kshana partner checkcomprueba el formato de un envío y no puntúa nada (docs/PARTNER-DATA.md). - Región del emisor.
kshana interference-map locateda una región y una elipse, nunca un punto aislado, a partir de informes ADS-B o AIS. Comparado una vez con los emplazamientos de transmisores de Jammertest 2025, el resultado es NOT ASSESSABLE para ambas fuentes (demasiado pocas sesiones programadas en los datos abiertos), de modo que la fila sigue siendo MODELLED (Mapa de interferencias). - Benchmark. La recampaña de 0,40 alcanza A3, D3 (ambos EXPLORATORY), R3 y R4; A2, D1 y R1 siguen NOT MET (Bench).
- Idiomas. nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja y zh-Hans, como traducciones automáticas que ningún hablante nativo ha revisado; el inglés es la referencia, y las ejecuciones en idiomas distintos del inglés tardan aproximadamente el doble (
docs/i18n.md).
Novedades de 0,39#
0,39 no añade ninguna función y no cambia ningún resultado; la salida del motor es la de 0,38. Corrige una cosa en la línea de comandos, actualiza dependencias de las herramientas de validación cruzada y expone los veredictos de los benchmark completos.
- Línea de comandos.
kshana kinds | head(cualquier salida estándar cerrada) ya no provoca un pánico: el programa termina en silencio con el estado 141, como hacen otras herramientas ante una tubería cerrada. Los demás errores de escritura se siguen informando. - Dependencies.
memmap20.9.11 en los dos bloqueos de validación cruzada de ANISE ypillow13.0.0 ycertifi2026.10.19 en las fijaciones del entorno de referencia independiente, todo bajoxval/: nada de lo que se distribuye ha cambiado. - kshana-bench, todos los veredictos. Frente a los umbrales preregistrados, tres son NOT MET, cada uno fijado por una prueba: A2 (
agc_k_sigmaAUC 0,766 frente a al menos 0,80), D1 (mayor brecha 0,0301) y la tarea (b) R1 (arrastrado, no vuelto a ejecutar). Ningún umbral se relajó (Bench).
Novedades de 0,38#
0,38 hace medible al árbitro neutral: puntúa registros de receptor frente a un calendario de pruebas publicado, lee más receptores y sensores, prueba sistemas de temporización y aporta un benchmark y un observatorio de interferencias. Sigue siendo de carácter consultivo: nada de esto está certificado, ningún resultado es una homologación y nada transmite. Cada fila indica lo que el registro contiene sobre ella (cómo se gana una etiqueta); un estado nombra solo lo que se comprobó, y la fila del registro y la página enlazada dicen lo que no.
| Novedades de 0,38 | Qué hace y por qué | Estado en el registro | Se lee |
|---|---|---|---|
| Puntuación de jammertest | kshana jammertest import lee el catálogo de pruebas y el plan de transmisión publicados por la NPRA como verdad programada; jammertest score puntúa un registro de receptor por prueba (latencia de detección, alarmas perdidas, falsas alarmas, tiempo de recuperación), como un paquete de evidencias firmado si usted aporta una clave |
MODELLED: una fila del registro. Los umbrales se preregistraron antes de cualquier ejecución puntuada; con los datos de JammerTest 2024 la regla de datos mínimos falló en ambas ejecuciones (4 y 7 ventanas puntuables frente a 10 exigidas), por lo que ningún umbral es evaluable y no se afirma nada | Jammertest |
| Las banderas propias del receptor | UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG y NovAtel RXSTATUS se leen en un self_report por época y se comparan con las alarmas de Kshana (ambos, solo el receptor, solo Kshana, ninguno); un lector de Septentrio SBF y una entrada --serial de solo lectura |
MODELLED; la coincidencia entre el detector de un receptor y el de Kshana no es validación | Confianza del receptor |
| Más receptores y sensores | RTKLIB .pos, NovAtel OEM7, C/N0 de RTCM 3 MSM4/MSM7 (de las tablas de pyrtcm con licencia BSD, no del texto de RTCM), flujos de monitor de GNSS-SDR, un registro de IMU como segundo sensor, un paquete de ROS 2, un puente gnss_lib_py y imu-fit para parámetros híbridos de sensor |
MODELLED: seis filas del registro; solo archivos de prueba escritos por nosotros, no se leyó ninguna captura de un receptor real, de una IMU, de una ejecución de GNSS-SDR ni de un grafo de ROS | Entradas de máquina |
| Pruebas de temporización y de holdover | el tipo holdover-test puntúa una prueba de holdover (GNSS retirado por el operador, holdover, recuperación) a partir de un registro medido de error de tiempo frente a las máscaras de la UIT-T, «medido frente a la máscara»; lectores de registros de linuxptp y chrony; las etapas de hardware y el campo lab-attestation |
MODELLED: dos filas del registro; las horas son declaración del operador, no verificadas | HIL de temporización, Seguridad del hardware |
| Paquetes de normas, LunaNet AFS, ciclo completo de laboratorio | paquetes puntuados para DHS RPCF, IMO MSC.1/Circ.1575 y ICAO Doc 9849 Apéndice F frente a umbrales declarados antes de la ejecución, «aporta evidencias a favor de»; una correspondencia con NIST IR 8323r1; un generador y verificador de códigos LunaNet AFS; un paquete firmado que enlaza el escenario, las condiciones de prueba, el registro del receptor y la puntuación de una ejecución de laboratorio | MODELLED para los paquetes y el ciclo completo; la comprobación de códigos AFS es VALIDATED frente a sus columnas de comprobación impresas (véanse las filas del registro) | Normas, LunaNet AFS |
| kshana-bench y el observatorio | tareas, particiones y métricas fijas para la detección de interferencias, la detección en IQ, la predicción de holdover y la brecha de optimismo, con un conjunto reservado sellado y una clasificación estática; un producto diario reproducible de interferencias con un retraso de 24 h, celdas gruesas y sin atribución | sin fila propia en el registro: puntúa envíos, y sus líneas base se etiquetan como MODELLED en los archivos de resultados; frente a los umbrales preregistrados se alcanzan el evaluador, C1 a C3 y D2, y tres umbrales son NOT MET (fijados por pruebas): A2 (agc_k_sigma AUC 0,766 frente a al menos 0,80 en la partición de prueba), D1 (mayor brecha 0,0301) y la tarea (b) R1 (arrastrado, no vuelto a ejecutar); véase xval/bench/RESULTS-v2.md |
Bench, Observatorio |
| Exportadores | telemetría de confianza como mensajes de descubrimiento y de estado MQTT de Home Assistant (solo publicación, sin credenciales), junto a Prometheus, CEF, LEEF y OTLP | MODELLED: una fila del registro | Telemetría de confianza |
| Margen del enlace óptico frente al tiempo | el tipo optical-atmosphere puede escribir una realización con semilla de la meteorología de un emplazamiento como serie de margen del enlace |
MODELLED: una fila del registro; un sorteo del modelo, no el clima | Atmósfera óptica |
Aspectos destacados de 0,37: registro de cambios. La lista completa de 0,38 está en el registro de cambios.
0,38 en detalle#
Cada capacidad de la tabla anterior, en pocas líneas: qué hace, un comando para ejecutarla, una imagen dibujada a partir de una ejecución real del motor y lo que el registro contiene sobre ella. Las imágenes las escribe tools/gen_figures_038.py en docs/figures/0.38/ (nunca se dibujan a mano): python3 tools/gen_figures_038.py las reescribe a partir de un motor compilado, y --check falla si una está obsoleta o su pie de figura aquí difiere. Cuando una entrada es un registro, es uno inventado que escribe el script, porque los registros reales de terceros nunca se incorporan al repositorio, y el pie de figura lo dice. Todo lo que sigue es de carácter consultivo: no certificado, no una homologación, y nada transmite. Un estado nombra lo que se comprobó y nada más; cómo se gana una etiqueta.
Puntuación de jammertest#
kshana jammertest import convierte el catálogo de pruebas y el plan de transmisión publicados por la NPRA en verdad programada, y kshana jammertest score puntúa un registro de receptor frente a ella: para cada prueba programada, si se detectó, con qué retraso y cuánto tardó el receptor en recuperarse, además de las falsas alarmas fuera de cada ranura. El catálogo se descarga, nunca se incorpora al repositorio.
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
Estado en el registro: MODELLED. Los umbrales se fijaron antes de cualquier ejecución puntuada; con los datos de JammerTest 2024 la regla de datos mínimos falló en ambas ejecuciones, por lo que ningún umbral es evaluable y no se afirma nada. Jammertest.
Las banderas propias del receptor#
UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG y NovAtel RXSTATUS se leen en un self_report por época y se sitúan junto a las alarmas de Kshana: ambos, solo el receptor, solo Kshana, o ninguno. Un lector de Septentrio SBF y una entrada --serial de solo lectura alimentan la misma comparación. Ninguno de los dos lados es verdad de referencia.
kshana receiver-trust session.toml # [log] format = "ubx", path = "receiver.ubx"
Estado en el registro: MODELLED. La coincidencia entre el detector de un receptor y el de Kshana no es validación. Confianza en el receptor.
Más receptores y sensores#
RTKLIB .pos, NovAtel OEM7, C/N0 de RTCM 3 MSM4/MSM7, flujos de monitor de GNSS-SDR, un registro de IMU como segundo sensor, un paquete de ROS 2 y un puente gnss_lib_py terminan todos en la misma cronología de receiver-trust. imu-fit lee de un registro de IMU estacionaria los parámetros de sensor que necesitan los escenarios híbridos y de fusión, de modo que un escenario puede ejecutarse con el sensor que realmente se tiene.
kshana imu-fit still.csv --format csv --axis x --expected-mean 0 --id bench-imu
Estado en el registro: MODELLED. Solo archivos de prueba escritos por nosotros; no se leyó ninguna captura de un receptor real, de una IMU, de una ejecución de GNSS-SDR ni de un grafo de ROS. Entradas de máquina.
Pruebas de temporización y de holdover#
El tipo holdover-test puntúa una prueba de holdover (GNSS retirado por el operador, holdover, recuperación) a partir de un registro medido de error de tiempo frente a las máscaras de la UIT-T, y lo dice con esas palabras: medido frente a la máscara. La alimentan lectores de registros de linuxptp y chrony; las etapas de hardware y el campo lab-attestation indican quién declaró qué.
kshana scenarios/holdover-test-example.toml
Estado en el registro: MODELLED. Las horas en que se retiró y se restableció el GNSS son declaración del operador, no verificadas. HIL de temporización, Seguridad del hardware.
Paquetes de normas#
Paquetes puntuados para los perfiles de prueba de PNT resiliente del DHS, IMO MSC.1/Circ.1575 e ICAO Doc 9849 Apéndice F, además de una correspondencia con NIST IR 8323r1 en compliance-report. Cada prueba ejecuta un escenario incluido y compara un campo de resultados con un umbral declarado antes de la ejecución; una prueba que necesita un registro de receptor se lista como necesitada de una entrada, no puntuada. La redacción es «aporta evidencias a favor de».
kshana standards-pack list
kshana standards-pack run imo-circ-1575
Estado en el registro: MODELLED. Un umbral alcanzado dice que un escenario modelado alcanzó un umbral declarado, nada sobre un producto; cada fallo se conserva y queda fijado por una prueba. Normas.
LunaNet AFS#
El generador de códigos de la señal directa aumentada de LunaNet (códigos Gold, Weil y terciarios, la trama del mensaje y su codificación de errores) y un verificador para un flujo de símbolos grabado o generado, fijado a una edición de la especificación.
kshana lunanet-afs-check spec
kshana lunanet-afs-check generate --frames 2 --out afs.sym
kshana lunanet-afs-check symbols afs.sym
Estado en el registro: VALIDATED para las comprobaciones de código y de sincronización, frente a los valores que imprime la especificación (que marca como TBC); una comprobación es NOT MET, conservada y fijada (una columna impresa del código terciario difiere: el documento imprime el mismo valor para dos PRN). No se comprueban las palabras LDPC y CRC de las subtramas 2 a 4. Las filas del registro dicen exactamente cuáles. LunaNet AFS.
Ciclo completo de laboratorio#
kshana.test-conditions/1 es una descripción publicada de lo que hizo un laboratorio (eventos, horas, potencias). kshana evidence round-trip enlaza el hash del escenario, el hash de las condiciones, el hash del registro del receptor y la puntuación en un único paquete firmado, y rechaza un paquete cuyas condiciones y escenario de puntuación discrepan sobre los eventos. Kshana nunca produce ni reproduce una señal: cómo llegó un escenario a un receptor es responsabilidad del operador.
kshana evidence --help
La imagen es la disposición de un paquete. Estado en el registro: MODELLED. Condiciones de prueba, Banco de pruebas.
kshana-bench#
Tareas, particiones y métricas fijas para la detección de interferencias, la detección en IQ, la predicción de holdover y la brecha de optimismo, con un conjunto reservado sellado y una clasificación estática. Puntúa envíos; no es un ranking de receptores.
kshana bench baseline --task d --split test --out results/
Estado en el registro: sin fila propia en el registro; las líneas base se etiquetan como MODELLED en los archivos de resultados. Frente a los umbrales preregistrados se alcanzan el evaluador, C1 a C3 y D2, y tres umbrales son NOT MET, cada uno fijado por una prueba: A2 (agc_k_sigma AUC 0,766 frente a al menos 0,80 en la partición de prueba), D1 (mayor brecha 0,0301) y la tarea (b) R1 (arrastrado de la campaña anterior, no vuelto a ejecutar). Las cifras están en xval/bench/RESULTS-v2.md. Bench.
Observatorio de interferencias#
Un producto por día UTC y región a partir de un archivo abierto de posiciones de aeronaves, sobre una cuadrícula gruesa fija: cada celda es degradada, no degradada o no observada (lo cual no es «despejada»). Se publica no antes de 24 h después de terminar el día, con las celdas pequeñas suprimidas y sin atribución de causa.
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/
La imagen son los días de muestra registrados, no un producto del observatorio. Estado en el registro: MODELLED: sin referencia independiente externa, sin verdad de referencia y sin atribución de causa; una celda no observada no se evaluó, lo cual no es lo mismo que despejada. Método del observatorio.
Exportadores#
Telemetría de confianza como texto Prometheus, CEF, LEEF, OTLP y mensajes de descubrimiento y de estado MQTT de Home Assistant. El comando publica solo en un destino que usted le dé y no guarda credenciales.
kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format cef
Estado en el registro: MODELLED. Telemetría de confianza.
Margen del enlace óptico frente al tiempo#
El tipo optical-atmosphere puede escribir una realización con semilla de la meteorología de un emplazamiento como serie de margen del enlace: episodios de nubes, una columna de agua líquida para cada uno, una muestra de centelleo por paso. La página de PNT óptico de Studio abre los escenarios optical-atmosphere.
kshana scenarios/optical-atmosphere-network.toml
Estado en el registro: MODELLED. Un sorteo del modelo, no el clima. Atmósfera óptica.
Nuevas vistas de Studio#
kshana.dev/studio incorpora una repetición del puente (dos ejecuciones lado a lado con un mismo reloj de misión, en /studio/replay/), una página de PNT óptico (/studio/optical/), una página de prueba de holdover (/studio/holdover/) y un visor del observatorio (/studio/observatory/). Ejecutan el mismo motor en el navegador, no se sube nada y llevan la misma declaración de carácter consultivo. Las imágenes de arriba las dibuja un script a partir de la propia salida del motor; no son capturas de pantalla de estas páginas.
Navegación de usuarios espaciales (gnss-ssv)#
Para una nave por encima, alrededor o muy por encima de las órbitas GNSS: cuántas señales GNSS puede usar, cuán intensas son, qué tan buena es la geometría y qué puede hacer con ellas un filtro de a bordo. Un tipo, cuatro modos, elegidos por las tablas del escenario: una capa de usuarios (la proporción de tiempo con una y con cuatro señales, por constelación), una trayectoria (señales, C/N0, dilución de la precisión y el medio de rayo rasante a lo largo de una órbita), una ejecución de navegación (un filtro de nueve estados sobre pseudodistancias, hasta la Luna) y una formación (navegación relativa de subordinados en torno a un jefe). La fuente pública para la comparación de disponibilidad es el folleto interoperable del Volumen de Servicio Espacial GNSS (UN OOSA ST/SPACE/75, del Comité Internacional sobre GNSS), que es en sí una simulación; se descarga, nunca se incorpora al repositorio. Página completa: 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
Estado en el registro: MODELLED, y la comparación con el folleto en su mayor parte falla. Los umbrales se fijaron antes de la ejecución. De ocho, solo se alcanzan S0 (el balance de enlace inverso, 13 de 13 valores) y S6 (la misión lunar). S1 a S5 y S7 son NOT MET: la geometría del volumen de servicio superior e inferior (43 de 52 y 48 de 52 celdas), el volumen de servicio superior de 15/20/25 dB-Hz, las seis misiones GEO, la misión HEO y el patrón paramétrico de lóbulos laterales frente a los patrones medidos de paneles GPS. Casi todos los fallos de S1 a S5 afectan a GLONASS, y el folleto imprime dos ángulos de referencia distintos para él; una variante de diagnóstico que usa el otro par lleva S1, S2 y S4 a todas las celdas, pero no sustituye la ejecución de referencia y ninguna fila es VALIDATED. El filtro absoluto de la ejecución de formación también es demasiado confiado (error normalizado al cuadrado medio muy por encima del valor de unos 3 que da un filtro coherente).
Navegación de usuarios espaciales, qué muestra la comparación.
Infraestructura lunar (lunar-infrastructure)#
La órbita y la superficie de la Luna como infraestructura de navegación y geodésica, en cinco estudios elegidos por study: od-consistency (una determinación de órbita a bordo con GNSS terrestre en una órbita de halo frente a una independiente desde tierra), carrier-phase (fijación de ambigüedad entera entre estaciones de superficie y un orbitador), frame-coestimation (el datum lunar a partir de mediciones de distancia desde estaciones terrestres con y sin enlaces con el orbitador), space-tie (desfases de láser, VLBI y GNSS en una misma nave frente al error de enlace local) y geodesy-sensitivity (qué familia de observables ve los números de Love h2, k2 y l2). El modelo es uno restringido de tres cuerpos con simplificaciones declaradas y entradas ilustrativas. Página completa: 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
Estado en el registro: MODELLED, y tres umbrales son NOT MET. La numérica se comprueba frente a programas independientes de numpy y scipy; nada se compara con una medición de una magnitud lunar, y nada es VALIDATED. Alcanzados: las dos soluciones de órbita son coherentes (q medio 5,81 frente a 6 esperado), y los enlaces con el orbitador elevan unas 111 veces el menor valor propio del datum, suponiendo una órbita conocida. No alcanzados: el error de modelo inyectado de 3e-10 m/s2 no se detecta (C3: la solución a bordo se conoce hasta unos 350 m, de modo que unos diez metros se esconden en su covarianza); no se logra la fijación entera (1 a 3 % de éxito a 25 dBi, y a los 12 dBi registrados el problema no puede plantearse); y la mitad de traza de G3 para añadir una familia de observables (la traza subió en 12 de 28 adiciones, cada vez porque la familia elevó el rango). Cada fallo queda fijado por una prueba. Infraestructura lunar.
Kshana Studio#
Abra kshana.dev/studio y todo el motor se ejecuta en su navegador, compilado a WebAssembly. Nada que instalar, y nada se sube. Studio tiene dos vistas del mismo motor, y un interruptor en la cabecera pasa de una a otra conservando el escenario, la vista y cualquier ajuste que haya cambiado.
La vista Simple es con la que se abre Studio. Parte de preguntas (cuántos satélites puedo ver, puedo confiar en mi posición, cuánto tiempo puede un reloj mantener la hora, qué le hace un jammer a mi receptor) y de un mapa de todo lo que puede hacer el motor, cada área con su proporción de métodos validados. Abra un escenario y la respuesta va primero: una frase llana, escrita para lo que mide ese escenario, luego sus cifras clave y un gráfico. Como máximo se muestran cinco ajustes, los que más cambian la respuesta; el resto espera bajo Ajustes avanzados. Cómo se calcula esto explica el método, y Para investigadores da las cifras propias del motor, el archivo de escenario, el código para ejecutarlo desde Python y la cita.

La vista Avanzada es el panel completo: la biblioteca de escenarios, cinco pasos numerados (Elegir, Ajustar, Ejecutar, Leer resultados, Compartir o exportar), las cifras clave con etiquetas PASS y FAIL donde la ejecución declara un umbral, y todos los paneles: resumen, gráficos, mapas, repetición, el informe del motor y exportaciones. Un cuadro de búsqueda llega a escenarios, dominios y los campos que contienen, y puede fijar hasta cuatro ejecuciones y compararlas lado a lado.
La pantalla inicial de la vista Simple, y la vista Avanzada tras una ejecución


El código fuente de Studio y sus notas de compilación están en web/README.md.
El sitio#
El resto de kshana.dev se construye a partir de los propios archivos de este repositorio y de ejecuciones del motor: misiones, capacidades, el registro de evidencias, la investigación publicada y las ediciones.

Capacidades#
Un solo motor cubre toda la cadena de fallo, desde el primer satélite interferido hasta el último nanosegundo de holdover del reloj. El motor tiene 92 tipos de escenario; kshana kinds los enumera y docs/SCENARIOS.md documenta cada campo.
| Capacidad | Qué responde |
|---|---|
| Espectro | cómo un jammer se apodera de la banda L del GNSS, banda por banda, segundo a segundo |
| Relojes y temporización | cuánto tiempo mantiene la hora cada reloj tras perder el GNSS |
| Constelaciones alrededor de cualquier cuerpo | cobertura, dilución de la precisión y disponibilidad alrededor de la Tierra, la Luna o Marte |
| Sistema solar | dónde está cada planeta, y el tiempo de luz de cualquier enlace |
| Navegación en órbita terrestre baja | una pasada, un enlace, un mensaje de navegación y una posición fusionada, etapa por etapa |
| Campañas | una misión encadenada, un barrido o un conjunto de Monte Carlo en un solo escenario |
| Animación | la serie temporal de una ejecución como dibujo animado, un reproductor o fotogramas |
| Informes | cada cifra con su unidad y su etiqueta, en HTML (lenguaje de marcado de hipertexto) y JSON (notación de objetos de JavaScript) |
| Exportaciones de interoperabilidad | órbitas y geometría para otras herramientas: SP3, CCSDS OMM y OEM, CZML, KML, GeoJSON, STK y SigMF |
| Confianza marítima | puede el puente confiar en esta posición: una puntuación de 0 a 100 y motivos para el NMEA de un buque, en vivo o desde un registro (de carácter consultivo, no un equipo de navegación homologado) |
| Flujos NMEA de formación | NMEA de puente sintético con jamming y spoofing programados y un registro del instructor, para la formación de tripulaciones (solo texto; nunca para los sistemas de navegación en servicio de un buque; de carácter consultivo, no un equipo de navegación homologado) |
| Mapa de interferencias | dónde informaron aeronaves y buques de datos de navegación degradados, y cuánto de una ruta afecta |
| Región del emisor | dónde, bajo supuestos indicados, puede estar una fuente de informes de posición degradados: regiones con una confianza indicada, un centroide con su elipse, nunca un punto (MODELLED; kshana interference-map locate) |
| Paquetes de evidencias | un registro técnico firmado y verificable sin conexión de una ventana de registro de un buque y de lo que el motor calculó a partir de ella, para un informe de incidente (de carácter consultivo, no un equipo de navegación homologado) |
| Telemetría de confianza | el flujo de confianza como métricas de Prometheus, eventos SIEM y OpenTelemetry opcional, con un panel de Grafana de ejemplo (deploy/grafana/kshana-gnss-trust.json) |
| Signal K y OpenCPN | la puntuación de confianza en el servidor Signal K de una embarcación y en OpenCPN, con una compilación de referencia para un ordenador pequeño junto al receptor (de carácter consultivo, no un equipo de navegación homologado) |
| Exportación para test bench | kshana bench-export: el movimiento del vehículo y los eventos de un escenario para un simulador GNSS de laboratorio (no se escribe ninguna señal), y cómo puntuar después el registro del receptor |
| Correspondencia de compliance e informe | kshana compliance-report: a qué filas de marcos públicos de resiliencia aporta evidencias a favor un conjunto de ejecuciones, y la brecha que queda |
| Cuadernos | tutoriales ejecutables: confianza de buques y flujos de formación, exposición de rutas en el mapa de interferencias, correspondencia de compliance y el banco de pruebas, GDOP cuántico frente a clásico |
| Verificador de Galileo OSNMA | los datos de navegación de qué satélites puede autenticar criptográficamente un receptor, y por qué falla una comprobación; Kshana no concede ningún derecho sobre los ICD IPRs de OSNMA de la UE (véase el AVISO en la página) |
Los formatos de exportación al completo: SP3 es Standard Product 3; CCSDS OMM y OEM son los Orbit Mean-elements Message y Orbit Ephemeris Message del Consultative Committee for Space Data Systems; CZML y KML son los lenguajes de marcado de Cesium y de Keyhole; STK es Systems Tool Kit; SigMF es el Signal Metadata Format.
Cada capacidad, dibujada a partir de una ejecución real: la cascada de banda L, el mapa de cobertura, el sistema solar y una pasada en órbita terrestre baja
Ejecute cualquiera de ellos con kshana example <scenario> > s.toml && kshana s.toml: los escenarios son l-band-waterfall-jamming, constellation-multi-gnss-coverage, solar-system-tour y leo-pass-iridium.
Las capacidades marítimas y de interferencia, dibujadas a partir de entradas sintéticas registradas: una puntuación de confianza, un mapa de interferencias con exposición de ruta, un flujo de formación y un paquete de evidencias
Los cuatro son datos inventados y de carácter consultivo: muestran el formato y el comportamiento del software, no cómo se comporta ningún receptor o sistema frente a interferencias. Ejecute el primero con kshana receiver-trust examples/maritime-trust/session.toml, el segundo con kshana route-exposure sobre las muestras de examples/interference-map/, el tercero con kshana nmea-scenario scenarios/training/coastal-drag-off.toml --out drag.nmea (solo para formación: nunca lo introduzca en equipos de navegación en servicio) y el cuarto como en docs/EVIDENCE-PACKS.md.
La tabla completa de capacidades, dominio por dominio
A continuación sigue el detalle completo dominio por dominio; para un registro de madurez por capacidad véanse docs/CAPABILITY.md y docs/VALIDATION.md.
| Dominio | Capacidad |
|---|---|
| Órbita y geometría | Propagación SGP4/SDP4 (validada hasta 4,12 mm frente a los 666 vectores AIAA 2006-6753); elementos de dos líneas reales (una instantánea de Celestrak gps-ops registrada y con fecha) o constelaciones sintéticas Walker-delta cuyos elementos medios realizan la fórmula i:T/P/F con menos de 1 km en una propagación de 24 h; visibilidad multiconstelación, dilución de la precisión: geométrica, de posición, horizontal, vertical y de tiempo (GDOP/PDOP/HDOP/VDOP/TDOP), validada hasta 1e-6 frente a gnss_lib_py 1.0.4, Stanford NAV Lab (Navigation and Autonomous Vehicles Laboratory), y disponibilidad GNSS; un optimizador de diseño de constelaciones sin gradiente, dimensionado del mínimo de satélites por franjas de cobertura, una herramienta de comparación multiconstelación y un barrido de diseño Walker que tabula cobertura / PDOP / tiempo de revisita sobre una rejilla de planos × satélites e informa de los diseños óptimos de Pareto. |
| Propagador numérico | Un propagador numérico de Cowell (src/propagator.rs) que complementa la vía analítica SGP4/SDP4, con un modelo de fuerzas jerárquico de siete perturbaciones (src/forces.rs): dos cuerpos + el campo zonal completo J2–J6 (los coeficientes armónicos zonales de achatamiento terrestre J2 a J6; el gradiente analítico exacto de su potencial perturbador), un geopotencial armónico esférico teseral EGM2008 opcional hasta grado/orden 70 (Earth Gravitational Model 2008; src/gravity_sh.rs; coeficientes reales de la NGA (National Geospatial-Intelligence Agency de EE. UU.), recurrencia de Legendre normalizada de Holmes–Featherstone, comprobada frente a las funciones de Legendre en forma cerrada y la identidad analítica de ∇V), la gravedad de tercer cuerpo del Sol y la Luna guiada por época (una efeméride incorporada de baja precisión, sin kernel DE/SPK: Development Ephemeris / SPICE Spacecraft and Planet Kernel), la presión de radiación solar (modelo de bola de cañón con sombra cónica de umbra y penumbra), la resistencia atmosférica (densidad exponencial por tramos de Vallado, atmósfera en corrotación), la corrección relativista post-newtoniana de Schwarzschild y el término de arrastre de marcos de Lense–Thirring (IERS: International Earth Rotation and Reference Systems Service, Conventions 2010 §10, lineal en el momento angular de la Tierra, ~1–2 órdenes por debajo de Schwarzschild), movido por una elección de dos integradores adaptativos (RK4, Runge–Kutta de cuarto orden, con duplicación de paso, o el par incrustado Dormand–Prince RK5(4)). Validado frente a Orekit 12,2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853: 278 épocas en LEO (órbita terrestre baja) + GTO (órbita de transferencia geoestacionaria), con los niveles de fuerzas conservativas coincidiendo hasta un caso peor de |Δr| 0,08 m en 24 h (tests/numerical_cowell_propagator_reference.rs); el nivel de resistencia atmosférica se caracteriza por separado (≈ 333 m / 24 h) y las entradas absolutas de efemérides del Sol y la Luna y de densidad siguen siendo, con honestidad, modeladas. Evidencia interna adicional (no validación externa): la órbita sin perturbar se comprueba frente a la solución exacta de Kepler en variables universales con error submétrico en 24 h, la energía y el momento angular se conservan hasta ~1e-9, y cada perturbación coincide con una firma en forma cerrada deducida a mano. |
| Maniobras y diseño de trayectorias | Nodos de ΔV impulsivos con propagación de covarianza de 6×6 (marcos de error de ejecución ECI, inercial centrado en la Tierra, / LVLH, vertical local y horizontal local), integración de maniobra finita comprobada frente a la ecuación del cohete de Tsiolkovsky en forma cerrada hasta < 0,01 %, un resolutor de Lambert de Izzo-2015 de una sola revolución, un propagador de Kepler exacto en variables universales y un barrido porkchop (lanzamiento × llegada) de C3 (energía de lanzamiento) / V∞ de llegada emitido como rejilla de contornos JSON: la capa de simulación de prestaciones por encima de GMAT/Orekit, con cada salida de Lambert cerrada ida y vuelta frente a la verdad de dos cuerpos y el mínimo del porkchop comprobado frente al suelo analítico de Hohmann. |
| Sistemas de tiempo y marcos de referencia | Escalas de segundos intercalares del IERS UTC / TAI / TT / UT1 (Tiempo Universal Coordinado, Tiempo Atómico Internacional, Tiempo Terrestre y el tiempo de rotación terrestre Tiempo Universal 1), una API (interfaz de programación de aplicaciones) de fecha juliana, el Ángulo de Rotación de la Tierra (ERA) de la IAU-2000 (Unión Astronómica Internacional), TEME ↔ ECEF basado en GMST (Tiempo Sidéreo Medio de Greenwich) (ecuador verdadero, equinoccio medio ↔ centrado en la Tierra y fijo a ella) con marcos geodésicos WGS-84 (World Geodetic System 1984), precesión IAU 2006 (Fukushima–Williams), nutación IAU 2000A/2000B completa, movimiento polar del IERS y la reducción GCRS↔ITRS IAU 2006/2000A basada en el CIO, sin equinoccio (CIO = Celestial Intermediate Origin): todo validado bit a bit frente a los vectores SOFA/ERFA, y comprobado de forma independiente frente a ANISE (la reimplementación en Rust puro de NAIF/SPICE; NAIF = Navigation and Ancillary Information Facility de la NASA, la Administración Nacional de Aeronáutica y del Espacio de EE. UU.): el GCRS→ITRS de kshana frente al ITRF93 de ANISE (International Terrestrial Reference Frame 1993) a partir del earth_latest_high_prec.bpc del JPL, con los mismos parámetros de orientación terrestre del IERS en ambos, coinciden hasta ≤ 0,86 m en tierra / ≤ 3,6 m en órbita GNSS (máx. 0,028″) en ocho épocas 2020–2023. |
| Inercial | INS strapdown de tres ejes: actitud por cuaterniones, mecanización NED (norte-este-abajo) en WGS-84, compensación de coning/sculling y un modelo determinista de errores de IMU (factor de escala, desalineación, sensibilidad a g, cuantización, deriva); un acelerómetro de interferómetro de átomos fríos de primeros principios (fase de Mach–Zehnder, ruido de proyección cuántica, decaimiento de contraste, acoplamiento de vibraciones) que deriva el coeficiente de paseo aleatorio de velocidad; y un filtro de partículas de remuestreo por importancia secuencial para navegación asistida por mapas (referenciada a terreno o gravedad) sin GPS. |
| PNT alternativo (sin GPS) | Un modelo de medición de gravímetro de átomos fríos cuyo suelo de ruido blanco (σ = ASD/√τ, ASD = densidad espectral de amplitud) se deriva de la física del acelerómetro CAI; un campo de anomalías de gravedad de armónicos esféricos de bajo grado y totalmente normalizado (comprobado frente a las funciones de Legendre en forma cerrada y a una anomalía de un solo término deducida a mano) más mascons sintéticos; el núcleo de síntesis de funcionales de gravedad (gravity_sh::gravity_magnitude / gravity_disturbance_mgal), el «lector de mapas» con el que se compara un navegador asistido por gravedad, se valida frente al estándar de gravedad normal GRS80 (Geodetic Reference System 1980), reproduce la gravedad normal de Somigliana en forma cerrada y los γ_e / γ_p publicados hasta 3.5e-12 y produce un mapa de perturbación físicamente acotado a partir del campo real EGM2008 del ICGEM (International Centre for Global Earth Models) (RMS, raíz cuadrática media, ≈ 26 mGal, máx. ≈ 89 mGal en d/o 70; tests/icgem_gravity_reference.rs); y un filtro de partículas de ajuste a mapas de gravedad que recupera una trayectoria sin GPS a partir de la secuencia de anomalías que atraviesa. Se extiende a la navegación referenciada a terreno (TERCOM/SITAN: ajuste de contornos del terreno / Sandia Inertial Terrain-Aided Navigation, frente a un DEM (modelo digital de elevación) .hgt de SRTM (Shuttle Radar Topography Mission), src/altpnt/terrain.rs), un campo geomagnético principal IGRF-14 (Campo Geomagnético de Referencia Internacional de 14.ª generación) hasta grado/orden 13 (src/igrf.rs, comprobado frente a la forma cerrada del dipolo inclinado y a diferencias finitas de ∇V), y un navegador combinado de gravedad + magnético + terreno que fusiona los tres canales escalares en un único filtro de partículas (la información es aditiva: ningún canal empeora la posición). Un benchmark de 60 minutos sin GPS (una interrupción de ~700 km / una hora en la que la solución inercial deriva hasta ~70 km) se recupera hasta ~145 m (< 500 m) con un ajustador jerárquico de grueso a fino: el objetivo Quantum Wayfarer del NAVISP (Navigation Innovation and Support Programme) de la ESA. |
| Fusión | EKF (filtro de Kalman extendido) de estado de error GNSS/INS de 15 estados débilmente acoplado con realimentación en lazo cerrado (el paquete gnss-ins); una actualización de pseudodistancia fuertemente acoplada que sigue corrigiendo con menos de cuatro satélites; un filtro acoplado de reloj + posición; un filtro de Kalman unscented (UKF, de puntos sigma) general para mediciones fuertemente no lineales; un navegador UKF GNSS/INS fuertemente acoplado (pseudodistancia + Doppler) cuya deriva orbital con modelo de fuerzas se comprueba por autoconsistencia hasta 0,77 m RMS en una pasada LEO curva de 30 minutos que incluye una interrupción GNSS de 120 segundos (una cifra de coherencia del filtro, no una validación con referencia independiente externa: este navegador sigue siendo MODELLED); y un UKF GNSS/INS fuertemente acoplado de 17 estados completo (posición, velocidad, error de actitud, sesgos de acelerómetro y giróscopo, sesgo y deriva del reloj) cuya navegación a estima cuántica CAI cubre una interrupción de 120 segundos con el paseo aleatorio de velocidad derivado del acelerómetro de átomos fríos. |
| Determinación de órbita | Recuperación de un estado orbital [r, v] a partir del seguimiento de distancias desde estaciones terrestres, componiendo el modelo de fuerzas de dos cuerpos + J2 y el integrador RK4 con un corrector por lotes de Gauss–Newton (determine_orbit_batch, submétrico / mm·s⁻¹ a partir de distancias sin ruido, ~2 m con un suelo de ruido de 5 m) y una variante secuencial con filtro de Kalman unscented (determine_orbit_sequential). |
| Observabilidad y teoría de la estimación | Una capa general y reutilizable de información de Fisher / Cramér–Rao (src/fim.rs): la matriz de información M = HᵀWH, la cota inferior de Cramér–Rao, el rango de observabilidad y el espacio nulo del defecto de datum (pseudoinversa de Moore–Penrose) y escalares de diseño de experimentos D/A/E/T-óptimos a partir de un resolutor de valores propios de Jacobi simétrico. Validado: valores propios frente a numpy.linalg.eigh, la covarianza de la CRLB frente a σ²(XᵀX)⁻¹ mediante numpy.linalg.inv y el DOP GNSS a partir de la matriz de información, todo coincidente hasta 1e-9 (tests/fim_observability_reference.rs), y además comprobado frente a las cotas en forma cerrada de Kay (1993) con logro de la CRLB por Monte Carlo. Sustenta el motor de DOP, la CRLB de geolocalización pasiva y el teorema de observabilidad de estaciones lunares absolutas (más abajo). |
| Lunar y cislunar | Un propagador del problema restringido circular de tres cuerpos (CR3BP) Tierra–Luna en el marco giratorio (constante de Jacobi conservada y los cinco puntos de Lagrange, src/cr3bp.rs), ahora con una matriz de transición de estado (STM) de 6×6 y un corrector diferencial de disparo único (cr3bp_jacobian, propagate_state_stm, differential_correct_halo) que produce órbitas halo / NRHO (órbita de halo casi rectilínea) genuinamente periódicas: la STM se valida frente a diferencias finitas, las órbitas corregidas se cierran hasta la precisión de máquina, y sembrar el estado de apoluna publicado reproduce la NRHO sur 9:2 de L2 (L2 = el segundo punto de Lagrange Tierra–Luna; la órbita de Gateway) con periodo ≈ 6,57 d / perilunio ≈ 3.250 km, coherente con los publicados ≈ 6,56 d / ≈ 3.370 km (una solución CR3BP, circular y sin Sol, no validada frente a una efeméride real de LANS (Lunar Augmented Navigation Service)/Gateway; la transformación selenocéntrica MCI/MCMF (inercial centrado en la Luna / centrado en la Luna y fijo a ella) de la órbita corregida es un trabajo posterior); además de la geometría de PNT cislunar de LunaNet / LNIS (LunaNet Interoperability Specification) (reducción MCI↔MCMF, coordenadas selenográficas) con una pasada de ARAIM en el polo sur lunar que saca a la luz con honestidad la brecha de integridad: un σ_URE (error de distancia del usuario) de ~30 m lleva el nivel de protección muy por encima de un límite de alerta de 50 m (src/lunar.rs, scenarios/lunanet-araim.toml); y un aumento del DOP con balizas de superficie (src/lunar_beacon.rs) que muestra cómo unas pocas balizas de medición de distancia de superficie levantadas aportan las filas de línea de visión de baja elevación y amplio acimut de las que carece un conjunto solo orbital y siempre cenital, colapsando el GDOP polar sur mal condicionado y, mediante un presupuesto de error de raíz de suma de cuadrados, la exactitud de posición realizada en metros (reutilizando el núcleo de DOP validado con gnss_lib_py y la forma cerrada de visibilidad con horizonte sin atmósfera; el análisis de la dilución de la precisión se expone en arXiv:2607,06212). |
| Conjunto de PNT lunar | Un conjunto de navegación lunar/cislunar apilado sobre el núcleo CR3BP, cada uno un tipo (kind) ejecutable: Tiempo Coordenado Lunar (lunar-time-offset, src/lunar_time.rs: la tasa secular LTC/TCL − TT (LTC = Lunar Coordinate Time; TCL = su forma francesa, Temps-Coordonnée Lunaire) a partir de la diferencia de autopotencial + término cinético, informada con la banda publicada de 56–59 µs/día); un observable geodésico de retardo de VLBI lunar (interferometría de base muy larga) (lunar-vlbi, src/lunar_vlbi.rs: un retardo y tasa de diferencia de dos distancias de campo cercano con línea de base terrestre, comprobado frente al Δ-DOR (delta differential one-way ranging) de onda plana del mismo código base en el límite de campo lejano, con derivadas parciales verificadas por diferencias finitas); un estimador por lotes de OD + reloj multitécnica conjunta (lunar-joint-od-clock, src/lunar_combination.rs: un ajuste de Gauss–Newton que fusiona VLBI + distancias locales lunares + distancias entre satélites) que lleva un resultado de observabilidad de información de Fisher: la medición de distancias interna sola deja un defecto de datum de sólido rígido de seis grados de libertad, de modo que la posición absoluta de una estación de superficie no es observable hasta que se añade un enlace con el marco terrestre: un retardo de VLBI con línea de base terrestre restablece la observabilidad para una constelación escasa y afina la cota de Cramér–Rao para una rica, y el datum absoluto se cierra con tres estaciones terrestres no colineales (el resultado de observabilidad se expone en arXiv:2607,02566); realización de marcos de referencia (lunar-frame-realisation, src/lunar_frame_realise.rs: un ajuste de datum de Helmert de 7 parámetros + un enlace de orientación WGCCRE de la IAU 2015; WGCCRE = el Grupo de Trabajo de la IAU sobre Coordenadas Cartográficas y Elementos de Rotación); un análisis de volumen de servicio de clase Moonlight/LCNS (LCNS = Lunar Communications and Navigation Services; moonlight-service-volume, src/lunar_service.rs: DOP / cobertura / disponibilidad + una envolvente HPL/VPL (nivel de protección horizontal/vertical) de ARAIM lunar generalizado, reutilizando el núcleo de DOP validado con gnss_lib_py y la maquinaria σ_URE≈30 m de LunaNet); PNT diferencial lunar (lunar-differential-pnt, src/lunar_dpnt.rs: un análogo lunar de GNSS diferencial / sistema de aumentación basado en satélites (SBAS): cancelación exacta del reloj de modo común + decorrelación espacial de primer orden frente a la línea de base, reutilizando el nivel de protección SBAS de DO-229E; DO-229E es el estándar de prestaciones operativas mínimas de la RTCA (antes Radio Technical Commission for Aeronautics) para receptores SBAS); y una exportación de interoperabilidad alineada con LunaNet/IOAG (IOAG = Interagency Operations Advisory Group; lunar-interop-export, src/lunar_interop.rs: CCSDS-OEM (Orbit Ephemeris Message) + ida y vuelta de la escala de tiempo lunar en el marco del cuerpo lunar IAU 2015, envuelto en el sobre KIF). Los niveles de evidencia de cada pieza están en la matriz de verificación: el Tiempo Coordenado Lunar, el estimador conjunto de OD + reloj, la realización de marcos de referencia y la geometría del volumen de servicio son VALIDATED (cada uno frente a la referencia independiente que nombra su fila, igual que la vía del núcleo del retardo VLBI); el observable VLBI, el resultado de observabilidad del defecto de datum, el PNT diferencial y la exportación de interoperabilidad son MODELLED. Los parámetros son valores ilustrativos de fuentes públicas: no validados frente a seguimiento real de VLBI o de Gateway, no afiliados ni respaldados por ninguna agencia, sin afirmación de TRL (nivel de madurez tecnológica) ni de herencia. |
| PNT de espacio profundo y de Marte | Un motor de navegación radiométrica abierto: tiempo de luz iterativo + retardo relativista de Shapiro, Doppler y distancia de dos, uno y tres sentidos (dos tramos de Moyer), razones de giro de transpondedor coherente, medición de distancia regenerativa/PN (pseudorruido) (CCSDS 414, el estándar de medición de distancia por pseudorruido) y Δ-DOR en el plano del cielo (CCSDS 506, el estándar Delta-DOR), con medios de plasma solar/tropo/iono; análisis y emisión de mensajes de datos de seguimiento CCSDS-TDM (503); un filtro de información de raíz cuadrada de dinámica reducida (RTN, radial, transversal, normal: aceleraciones empíricas + un reloj de a bordo de 3 estados + resistencia atmosférica de Marte) que hace determinación de órbita LMO de Marte hasta ≈ 0,2 m en un lazo cerrado sintético; un estimador conjunto de fusión de un sentido + dos sentidos; un núcleo de dinámica multicuerpo (Body{μ, re, zonals, gravity, IAU-pole}, gravedad GMM-3 de Marte (Goddard Mars Model 3), un marco de Marte fijo al cuerpo de la IAU, una costura EphemerisProvider enchufable, fechas julianas de dos partes + TT↔TDB (Barycentric Dynamical Time)); y el escenario de PNT con relé mars-pnt (una constelación de relés areoestacionarios MARCONI) con un simulador de prestaciones GSE de extremo a extremo (GSE = equipo de apoyo en tierra) (geometría → balance de enlace → observables → SRIF → covarianza). Validado por simulación (cifras de mérito de covarianza / lazo cerrado); la dinámica de Marte centrada en el Sol se comprueba frente a DE440 del JPL (137 m con un arco de 1 día, xval/anise-mars-od). La validación con datos reales de seguimiento de DSN/ESTRACK está en la hoja de ruta. |
| Sistema solar y PNT en torno a cualquier cuerpo | Una efeméride de todo el sistema solar sin kernel (src/ephem.rs, src/ephem_provider.rs): cada planeta a partir de los elementos keplerianos de Standish del JPL (Tabla 1, 1800–2050 d. C.; Tablas 2a/2b, 3000 a. C.–3000 d. C.) con el error nominal publicado de cada planeta, la Tierra y la Luna separadas mediante la serie lunar, y Fobos, Deimos, Ío, Europa, Ganímedes, Calisto y Titán a partir de elementos medios del JPL y del modelo de rotación de la IAU (Unión Astronómica Internacional); cualquier cuerpo respecto a cualquier otro en el ICRF (International Celestial Reference Frame). Body lleva ahora GM (parámetro gravitacional), radios, J2 (el segundo armónico zonal) donde está publicado y el polo y el meridiano origen de la IAU de dieciocho cuerpos. El tipo solar-system informa de posiciones, velocidades, constantes, tiempo de luz y distancia de uno y dos sentidos entre dos cuerpos cualesquiera (el resolutor radiométrico de tiempo de luz existente, con el retardo de Shapiro solar) y una traza orbital por cuerpo, lo bastante para dibujar un sistema solar interactivo; el tipo body-pnt sitúa un orbitador o un módulo de aterrizaje en torno a cualquier cuerpo (scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml) con una constelación Walker local, la maquinaria de dilución de la precisión y de Gauss–Newton y una distancia al espacio profundo desde la Tierra. Validado frente a JPL Horizons (DE441, JPL Development Ephemeris 441): de Mercurio a Saturno y la Tierra de la Tabla 1 dentro de dos veces el error nominal (peor caso 1,87×), los ocho planetas de las Tablas 2a/2b (peor caso 1,71×) y el tiempo de luz Tierra–Marte/Júpiter. Modelado: Urano y Neptuno de la Tabla 1 (2,0× y 5,2× el error declarado frente a DE441), Plutón, las lunas y los resultados de navegación de body-pnt. |
| PNT fusionado MEO + LEO | src/leo_fusion/: posicionamiento, navegación y temporización LEO independientes del sistema, sobre cualquier constelación (capas Walker, conjuntos de elementos, preajustes GNSS) y cualquier señal (portadora, tasa de chip, envolvente de C/N0, error de alcance de la señal en el espacio), con preajustes opcionales de un solo archivo que incluyen sus fuentes (Xona Pulsar X1/X5, Iridium STL, señales de oportunidad de Starlink, CentiSpace, un sistema representativo en banda C, el modelo de efemérides ATOMIC de reloj cero). leo-pvt: posicionamiento Doppler por lotes a partir de la velocidad de alcance (con uno o varios satélites, con estados de deriva del reloj y de velocidad, geometría along/cross-track de un solo paso y la solución especular), mínimos cuadrados ponderados conjuntos GNSS + LEO con sesgos entre sistemas por cada sistema y sigmas por señal aportados por quien llama, el DOP en función del número de satélites LEO, cobertura polar y ártica y transferencia de tiempo LEO a UTC en función de C/N0 y del oscilador. leo-ppp: un EKF (filtro de Kalman extendido) de PPP (posicionamiento preciso de punto) con ambigüedades flotantes, solo con GNSS y con LEO, su tiempo de convergencia y una prueba de consistencia NEES de chi cuadrado. ntn-positioning: posicionamiento 5G de red no terrestre a partir de la cota de Cramér-Rao del ancho de banda. Validado: la envolvente Doppler LEO frente a las cifras publicadas de Iridium y Xona. Modelado: el resto, con la tendencia de PPP comparada con Li et al. (2019) — véase docs/LEO-PNT-FUSION.md. |
| Integridad | RAIM (monitorización autónoma de la integridad por el receptor) instantáneo y de separación de soluciones (estilo ARAIM), con niveles de protección horizontal/vertical (HPL/VPL), detección y exclusión de fallos y diagramas de integridad de Stanford; un nivel de protección explícito de separación de soluciones de hipótesis múltiples (MHSS) con presupuesto de riesgo de integridad, que incluye el modo de fallo de toda la constelación en doble/multiconstelación (ARAIM de la UE (Unión Europea) / DO-316, el estándar de prestaciones de la RTCA para equipos GPS aeroportados con aumentación basada en la aeronave), ejercitado sobre una instantánea real de GPS + Galileo (scenarios/araim-gps-galileo.toml). El nivel de protección aplica la proyección unilateral de sesgo nominal b_k = Σ_i|s_i|·b_nom por modo de fallo y el sigma de integridad σ_URA (precisión de alcance del usuario; distinta del sigma de exactitud σ_URE, error de alcance del usuario) del mensaje de soporte de integridad — véase docs/ARAIM_REFERENCE.md. El núcleo de detección (los umbrales de χ²/χ² no central/normal y los multiplicadores K) está validado externamente frente a SciPy en 171 casos (tests/raim_reference.rs); la geometría reutiliza el núcleo de DOP validado con gnss_lib_py. La asignación del presupuesto de riesgo de integridad de ARAIM MHSS no tiene una referencia independiente numérica publicada y sigue siendo, con toda honestidad, modelada. |
| Aumentación (SBAS) | Niveles de protección SBAS / WAAS (WAAS = el Sistema de Aumentación de Área Amplia) en la forma de mínimos cuadrados ponderados de DO-229E (factores K de aproximación de precisión y en ruta) y la combinación libre de ionosfera de doble frecuencia L1/L5 (L1 y L5 son dos bandas de señal civil del GPS; IS-GPS-705, la especificación de interfaz del GPS para la señal L5, γ₁₅ ≈ 1,793) que sustenta DO-316 — src/sbas.rs. El algoritmo del nivel de protección está validado externamente frente a la bifurcación SBAS-PL de RTKLIB (RTKLIB = la biblioteca abierta de posicionamiento cinemático en tiempo real; PL = nivel de protección) (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, DO-229D — la revisión anterior de DO-229 — App. J) ejecutado sobre datos reales de EGNOS (Servicio Europeo de Navegación por Complemento Geoestacionario), reproduciendo su HPL con una diferencia inferior a 2e-3 m (tests/sbas_reference.rs); gLAB (el conjunto de herramientas del GNSS Laboratory) v6.0.0 confirmó la misma convención. |
| Relojes y temporización | Holdover con filtro de Kalman de dos estados (covarianza en forma de Joseph, salud de consistencia NIS/NEES — innovación normalizada al cuadrado / error de estimación normalizado al cuadrado); estabilidad de la familia Allan (ADEV / MDEV / TDEV / HDEV / MTIE — desviación de Allan, de Allan modificada, de tiempo y de Hadamard, y error máximo de intervalo de tiempo) con intervalos de confianza específicos de cada tipo de ruido y un ajuste completo de ley de potencias de cinco coeficientes según IEEE-1139 (IEEE Std 1139, las definiciones de metrología de frecuencia y tiempo del Institute of Electrical and Electronics Engineers) — los estimadores están validados con hardware real frente a Stable32: un patrón primario real de cesio 5071A frente a un máser de hidrógeno (556.990 muestras de fase, 16 factores de promediado, OADEV/OHDEV — desviación de Allan/Hadamard solapada — con 1e-3; tests/cs5071a_reference.rs) y la serie de regresión canónica PHASE.DAT de Stable32 (139 factores de promediado, OADEV/MDEV/TDEV con 1e-3; tests/phasedat_reference.rs); los estimadores ADEV/MDEV/TDEV y la métrica de deriva de telecomunicaciones MTIE se contrastan además con la biblioteca independiente allantools 2024,06 con una diferencia inferior a 1e-9 sobre la serie NIST SP 1065 (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs); correcciones geométricas (Sagnac, vista común GNSS); y los métodos operativos de transferencia — TWSTFT (transferencia bidireccional de tiempo y frecuencia por satélite) con la forma cerrada de Sagnac del BIPM (Oficina Internacional de Pesas y Medidas), vista común GNSS, transferencia de tiempo libre de ionosfera con PPP (posicionamiento preciso de punto), un enlace óptico en espacio libre con centelleo por turbulencia y una escala de tiempo (de papel) de conjunto de relojes por varianza inversa por debajo del mejor reloj contribuyente. Una calculadora de holdover del reloj sin GNSS (src/holdover.rs) expone el crecimiento del error de inercia de van Loan en forma cerrada como una inversión de holdover hasta el umbral — cuánto tiempo funciona un reloj libre antes de que su error de temporización supere el presupuesto — para clases representativas de relojes clásicos y cuánticos; modelado (contrastado con la recursión de covarianza multipaso de clock_state), y con la honestidad de señalar que, para un reloj muy estable, el holdover hasta un umbral estricto lo fija el suelo de ruido de tau largo supuesto, no el ADEV citado. Un nivel de protección de temporización condicional (src/tpl.rs) extiende el holdover al spoofing: una cota del error de tiempo no detectado, dada una comprobación cruzada independiente, que compone un suelo de monitor de k sigmas, la varianza de inercia de van Loan durante la latencia de detección y un tiempo hasta la alarma de CUSUM (suma acumulada). Calibrado sobre un spoofing real registrado (JammerTest 2024) y reproducible mediante cargo run --example tpl_jammertest; composición MODELLED (sin presupuesto de riesgo de integridad por hora), condicionada a la detección — no existe una cota incondicional finita. |
| Dominio de medición GNSS | Síntesis directa de pseudodistancia / Doppler con ionosfera Klobuchar (difundida) e IONEX / malla de TEC (formato de intercambio de mapas de la ionosfera / contenido total de electrones; medida) — que incluye un analizador de archivos IONEX, interpolación temporal entre mapas y el mapeo de oblicuidad de capa delgada en trayectoria oblicua —, troposfera Saastamoinen + Niell y RAIM instantáneo (HPL/VPL). |
| Resiliencia | Jamming de presupuesto de enlace (J/S → C/N₀ efectiva → pérdida de enganche — relación interferencia-señal, relación portadora-densidad de ruido — con el factor de separación espectral antiinterferencia Q ahora derivado de los espectros de potencia reales de la señal y del interferidor mediante src/navsignal.rs — Q = 1/(R_c·κ), contrastado en CI con la constante representativa anterior); un detector estocástico de spoofing de tiempo (prueba de energía de Neyman–Pearson / χ²₁ con P_fa/P_md en forma cerrada y por Monte Carlo y una figura de mérito (FoM) de seguridad de 1 − P_md); y un detector de spoofing multicapa que fusiona una prueba de paridad de consistencia RAIM (con el punto ciego de modo común modelado con honestidad), un monitor de potencia AGC de RF (control automático de ganancia) y un monitor de calidad de señal (SQM — monitorización de la calidad de la señal, early-minus-late); y un presupuesto de error de navegación inercial cuántica por estima (QuantumNavBudget, src/inertial/quantum_imu.rs) que compone el paseo aleatorio de velocidad de ruido blanco del interferómetro de átomos fríos con el sesgo residual (contrastado con el integrador independiente AccelModel) y el error de factor de escala en una cifra de deriva de posición durante el holdover — el gemelo inercial del holdover del reloj. Un motor de puntuación de resiliencia alineado con un marco (src/resilience/) asigna el comportamiento simulado de una arquitectura a subpuntuaciones por dimensión en las siete categorías de resiliencia propias de Kshana (no términos del DHS), alineadas con el Resilient PNT Conformance Framework del Departamento de Seguridad Nacional de EE. UU., y estudia después la estabilidad de decisión de cualquier puntuación compuesta única o nivel de madurez bajo un símplex de ponderación de Dirichlet y un conjunto de cinco amenazas — inestabilidad de rango de Kendall-τ, tasa de cambio del ganador top-1 y colapso de diversidad de modo común (Hill-N2), con un informe de garantía con hash de integridad (35 pruebas con referencia independiente derivada a mano). Reproducible mediante cargo run --example resilience_report; arquitecturas sintéticas MODELLED, una autoevaluación alineada con RPCF v2.0, no una certificación. Véase docs/RESILIENCE-CROSSWALK.md. |
| Geolocalización pasiva por RF | Geolocalización de emisores TDOA/FDOA (diferencia de tiempo/frecuencia de llegada; src/geolocation.rs) — localiza un interferidor o spoofer (o una fuente oportunista para PNT inverso) a partir de hiperboloides de diferencia de tiempo de llegada en una red de receptores, resueltos por mínimos cuadrados de Gauss–Newton; al añadir la diferencia de frecuencia de llegada con receptores en movimiento se recuperan conjuntamente la posición y la velocidad del emisor, con la cota de Cramér–Rao sobre la covarianza de posición derivada de la geometría de la red. MODELLED (referencias independientes de consistencia interna: viajes de ida y vuelta directo→inverso, la identidad J·CRLB = I, la monotonía del GDOP y el estimador que alcanza su propia CRLB bajo Monte Carlo) — un modelo de fuente puntual con línea de visión, sin términos de multitrayecto / NLOS (sin línea de visión), sesgo del reloj del receptor ni refracción. |
| Señal de navegación y seguimiento de código | El nivel de señal entre el presupuesto de enlace y el dominio de medida (src/navsignal.rs): densidades espectrales de potencia (PSD) de área unidad para BPSK-R(n) (modulación por desplazamiento de fase binaria con chips rectangulares) y sine-BOC(m,n) (portadora con desplazamiento binario); el coeficiente de separación espectral (SSC) κ = ∫ G_s·G_i df, que deriva el Q antiinterferencia que usa el modelo de jamming (Q = 1/(R_c·κ)) a partir de los espectros reales de señal/interferidor en lugar de una constante representativa; el ancho de banda RMS (de Gabor) (BOC > BPSK — la medida de información de distancia / de Cramér–Rao); la fluctuación por ruido térmico del seguimiento de código DLL early–late coherente (DLL = lazo de enganche de retardo; Kaplan & Hegarty; ~submétrica para C/A — el código de adquisición gruesa del GPS — a 45 dB-Hz); y la envolvente del error por multitrayecto (EML coherente, early-minus-late — supresión del correlador estrecho). Validado frente a anclajes de forma cerrada (SSC propio de BPSK = 2/(3·R_c), PSD de área unidad, fluctuación submétrica de C/A). Esto es análisis del desempeño de la señal, no diseño de hardware de antena / carga útil de RF (función de un socio de carga útil). |
| Interoperabilidad | Ingesta de efemérides de difusión multi-GNSS en RINEX-3 (GPS, Galileo, QZSS — el Sistema de Satélites Cuasi-Cenit de Japón —, BeiDou MEO/IGSO — órbita terrestre media / órbita geosíncrona inclinada — mediante IS-GPS-200, la especificación de interfaz del GPS; GLONASS, el Sistema Global de Navegación por Satélite de Rusia, mediante PZ-90 — el datum ruso Parametry Zemli 1990 — vector de estado RK4) utilizable como fuente de constelación (entra RINEX, sale geometría PNT); un analizador de observaciones RINEX-3 (pseudodistancia, fase de portadora, Doppler, intensidad de señal; se espera que el formato de observación 4,00 se analice, pero no está probado, y los archivos de navegación RINEX 4 se rechazan por su nombre en lugar de decodificarse mal) que ahora alimenta un solucionador de posicionamiento de punto único (SPP) (pvt) — entran observaciones de código reales, sale una posición del receptor real, validado con datos del IGS; un lector/escritor de efemérides precisas SP3-c/d con interpolación de Lagrange de orden 9; y exportación CCSDS OEM 2,0 + OMM (mensaje de elementos medios orbitales) para herramientas de dinámica de vuelo (GMAT, Orekit, STK — Systems Tool Kit); y análisis y emisión de mensajes de datos de seguimiento CCSDS-TDM (503) para el seguimiento radiométrico del espacio profundo. |
| Análisis de misión (ingeniería de sistemas) | Presupuestos de diseño de misión de primer orden, cada uno un tipo de escenario ejecutable: geometría de lanzamiento y ascenso de dos cuerpos (launch-window — acimut de lanzamiento sin Az = cos i/cos lat, inclinación mínima, bonificación por la rotación terrestre, Δv de cambio de plano en dogleg, oportunidades diarias; src/launch.rs); un corredor de reentrada balística de Allen–Eggers (reentry — deceleración máxima, velocidad/altitud de g máxima, velocidad de calentamiento máximo; src/reentry.rs); geometría de cobertura de observación de la Tierra (eo-coverage — franja / GSD (distancia de muestreo sobre el terreno) en nadir / acceso fuera de nadir / revisita mediante el triángulo espacial de SMAD (Space Mission Analysis and Design); src/eo_payload.rs); un presupuesto de error de actitud y apuntamiento en 3-DOF (tres grados de libertad; attitude-budget — par de gradiente de gravedad en el peor caso + presupuesto de apuntamiento RSS (raíz de la suma de cuadrados); src/attitude_budget.rs); predicción de pasos sobre estación terrestre (passes — AOS/TCA/LOS, adquisición de señal / momento de máximo acercamiento / pérdida de señal, elevación máxima, tiempo de acceso; src/passes.rs); y un presupuesto de enlace unidireccional sobre la ecuación de enlace de CCSDS 401 / DSN 810-005 (el estándar de radiofrecuencia y modulación del CCSDS / el manual de diseño de enlaces de la Red del Espacio Profundo; link-budget — FSPL (pérdida en el espacio libre), C/N₀, Eb/N₀ (relación energía por bit a densidad de ruido), margen, cierre; src/linkbudget.rs). Presupuestos analíticos de primer orden MODELLED — la capa previa al hardware por debajo de STK/GMAT/Basilisk, no un sustituto de 6-DoF ni radiométrico. |
| Análisis de decisión y compromisos (MCDA) | Un conjunto completo de análisis de decisión multicriterio (MCDA) (src/mcda/) que abarca las cuatro familias de métodos — agregación de valor (WSM, WPM, WASPAS — modelo de suma ponderada, modelo de producto ponderado, evaluación ponderada agregada de suma y producto), distancia al ideal (TOPSIS, Technique for Order of Preference by Similarity to Ideal Solution), programación de compromiso (VIKOR, del serbio para optimización multicriterio y solución de compromiso) y superación (PROMETHEE II, Preference Ranking Organization Method for Enrichment of Evaluations; ELECTRE I, del francés para eliminación y elección que expresan la realidad), además de MOORA de sistema de razones (Multi-Objective Optimization on the basis of Ratio Analysis) y COPRAS proporcional (Complex Proportional Assessment) — con ponderación de prioridades por comparación por pares AHP (Analytic Hierarchy Process) (razón de consistencia), un frente no dominado de Pareto, análisis de sensibilidad de los pesos y puntuación de utilidad multiatributo. Los nueve agregadores reproducen las bibliotecas independientes de terceros pymcdm (WSM / WPM / WASPAS / MOORA / TOPSIS / VIKOR / PROMETHEE II) y pyDecision (ELECTRE I, COPRAS) con una diferencia inferior a 1e-9, y el vector de prioridades de AHP + la razón de consistencia coinciden con la tabla de índice aleatorio de Saaty y con el solucionador de autovalores principales de SciPy/LAPACK con una diferencia inferior a 1e-9 (tests/mcda_*_reference.rs). VALIDATED — la capa de decisión bajo el motor de estudios de compromisos. |
| Entorno espacial | Un modelo de entorno de meteorología espacial (space-weather, src/space_weather.rs): índices de actividad solar (F10.7 / F10.7a centrada en 81 días — el flujo de radio solar de 10,7 cm) y geomagnética (Kp, el índice K planetario, con la tabla definicional Kp↔ap — siendo ap su amplitud planetaria lineal), la temperatura exosférica de Jacchia-1971 que impulsan (validada frente a los mínimo/medio/máximo solares publicados) y la densidad neutra termosférica corregida por actividad frente a la estática a una altitud dada — la dependencia de la densidad respecto del ciclo solar que omite la atmósfera estática USSA76 (Atmósfera Estándar de EE. UU. 1976). MODELLED: un acoplamiento de altura de escala de primer orden calibrado, no una atmósfera validada con datos (NRLMSISE — el modelo de exosfera de espectrómetro de masas y radar de dispersión incoherente del Laboratorio de Investigación Naval de EE. UU.). |
| Evaluación y estudio comparativo de aprendizaje automático | Un banco de pruebas de evaluación de detección de degradaciones de RF (impairment-eval, src/impairment_eval.rs): un corpus sintético etiquetado y con parámetros fundamentados (nominal / jamming / spoofing de tiempo / spoofing de posición / multitrayecto), un arnés de ROC/AUC (característica operativa del receptor / área bajo la curva) independiente del detector que puntúa cualquier detector (energy | agc | sqm | parity | fused) con Pd por clase (probabilidad de detección) a una Pfa objetivo (probabilidad de falsa alarma), y la brecha de optimismo dentro y fuera de la distribución (modo de cambio de distribución). Además, un compromiso PNT cuántico frente a clásico (quantum-trade, src/quantum_trade.rs) que cuantifica el beneficio de holdover de temporización/inercial de un reloj candidato a partir de una curva de ADEV medida frente a una línea base clásica, con la salvedad del suelo de tau largo incluida en el artefacto y una envolvente de resiliencia frente al tiempo sin GNSS. Las métricas de evaluación (AUC / confusión / Pd-Pmd, siendo Pmd la probabilidad de detección fallida) están validadas con coincidencia exacta frente a scikit-learn 1.9.0 — también con telemetría real de ESA OPS-SAT (el conjunto de datos de detección de anomalías OPSSAT-AD, Ruszczak et al. 2025, CC BY 4,0 — Creative Commons Atribución 4,0), donde el ROC AUC de Mann–Whitney de Kshana reproduce el roc_auc_score de scikit-learn con una diferencia inferior a 1e-9 en la partición de prueba reservada y un detector transparente de recuento de picos separa las anomalías etiquetadas con un AUC ≈ 0,85 (tests/opssat_ad_reference.rs) — y los núcleos numéricos del motor de compromisos (ajuste NNLS de ADEV — mínimos cuadrados no negativos —, bandas de consistencia χ², Q de reloj de van Loan) frente a scipy 1.17.1; las cifras de beneficio de dispositivo construidas encima siguen siendo características operativas MODELLED — nunca datos de campo/IQ (muestras en fase/cuadratura), sin veredicto de bueno/malo. Sobre la base del banco de pruebas, un estudio de brecha de optimismo más profundo (src/impairment_study.rs, impairment_ml.rs, eval_stats.rs) puntúa un panel de 13 detectores (energy/AGC/SQM/parity más detectores de regresión logística con semilla y de MLP — perceptrón multicapa — de una capa oculta), ajusta leyes de escala dentro y fuera de la distribución con una nula por permutación, y aprende un predictor leave-one-out de la degradación fuera de distribución a partir de estadísticos dentro de la distribución (cargo run --example optimism_study). Un front end de receptor definido por software (src/sdr.rs — IQ/IF (frecuencia intermedia) en bruto → tomas early/prompt/late del correlador → SQM) y adaptadores de ingesta de datos reales (src/realdata/ — RINEX, u-blox UBX (el protocolo binario de u-blox), GnssLogger, JammerTest, Yunnan, SatGrid) permiten ejecutar los mismos detectores sobre grabaciones suministradas localmente (no se incluye ningún conjunto de datos). El mapa de cruce de resiliencia cuántico frente a clásico bajo incertidumbre de parámetros (src/crossover.rs; cargo run --bin crossover_study) regenera los estudios de cruce inercial y de reloj que hay detrás de las figuras de Resultados. |
| Demostrador de PNT con tecnología cuántica | Tres áreas de aplicación ejecutables, MODELLED, detrás del motor abierto, cada una de las cuales emite un TradeEvidence honesto + un registro de representatividad / brechas hasta el vuelo (src/representativeness.rs): transferencia cuántica de tiempo de confianza (quantum-time-transfer, src/timetransfer_chain.rs — un presupuesto de extremo a extremo de reloj de red óptica + enlace fotónico frente a CSAC (reloj atómico de escala de chip) + bidireccional por RF, con un nivel de protección de temporización reutilizado, una FoM de seguridad frente a ataques de retardo/repetición (1 − P_md) y detección de anomalías del reloj + latencia de CUSUM); navegación cuántica sin GNSS (quantum-gnss-free-nav, src/quantum_nav_od.rs — una deriva inercial con interferómetro de átomos fríos frente a un INS de grado de navegación durante una interrupción del GNSS, con la honestidad de señalar que, sin una posición externa, el sesgo del acelerómetro no es observable y el error sigue creciendo); y detección de fallos/anomalías en sistemas cuánticos (quantum-anomaly-detect, src/quantum_faults.rs — un catálogo de fallos etiquetado con un ROC AUC con IC (intervalo de confianza) por bootstrap procedente de eval_stats, validado externamente, y un fallo mínimo detectable con una tasa de falsa alarma fija). Una biblioteca compartida de modelos de error de dispositivos cuánticos (src/quantum_devices.rs) y un arnés unificado de compromiso cuántico frente a clásico (src/qtrade.rs) los sustentan. Se reutilizan los núcleos validados sobre los que se apoyan (métricas de evaluación frente a scikit-learn, núcleos de compromiso frente a scipy); las cifras de beneficio de dispositivo construidas encima siguen siendo MODELLED — parámetros de dispositivo/enlace ilustrativos de fuentes públicas, modela la clase, sin TRL / herencia de vuelo / certificación, sin respaldo de ninguna agencia. |
| Ingeniería frugal e impacto en la integridad | Una perspectiva de ROI de coste por cobertura (retorno de la inversión) (src/frugal.rs) — coste por unidad de cobertura entregada para un compromiso de arquitectura — y una asignación detección fallida → impacto en la integridad (src/integrity_impact.rs) que convierte la tasa de detección fallida de un monitor en su contribución al riesgo de integridad. Presupuestos de apoyo a la decisión MODELLED, aditivos. |
| Intercambio de artefactos | El Kshana Interchange Format (KIF) (src/interchange.rs) — un sobre versionado y autodescriptivo que envuelve el resultado de un escenario con su tipo de escenario, la versión del esquema y las etiquetas MODELLED/VALIDATED, de modo que un artefacto almacenado se documente a sí mismo y los sobres más antiguos sigan siendo legibles con compatibilidad hacia adelante. |
Cada capacidad es accesible como API de Rust, como kind de escenario ejecutable, o ambos. La madurez de cada capacidad — validada, ejecutable o de biblioteca — se sigue en docs/CAPABILITY.md. Una matriz de verificación comprobada por máquina (src/verification.rs) presenta la referencia cruzada requisito → módulo → prueba → referencia independiente → estado, con invariantes de honestidad probados unitariamente que permiten una etiqueta validada solo cuando la respalda una referencia independiente externa — y que registran las capacidades de hardware/PA (garantía del producto) que Kshana deliberadamente no ofrece.
Los cuatro paquetes de sensores, tal como se publicaron por primera vez (resultados)
Resultados#
Cada escenario compara un sensor cuántico con su equivalente clásico a lo largo de una interrupción del GNSS de ~1,8 h. Las cifras son reproducibles (scenario + seed + version).
Lo que aportan los sensores cuánticos cuando falta el GNSS — clock-holdover · semilla 42 · dibujado con el motor 0.40.0, y cada figura anterior se vuelve a comprobar con el motor actual en cada compilación mediante tests/published_figures_still_reproduce.rs · SVG
La ventaja depende de la duración de la interrupción y de la vibración, con un punto de equilibrio explícito en el que gana el sistema clásico — mostrada con honestidad a lo largo de la escala de madurez tecnológica (las cifras del reloj óptico son objetivos de demostrador en tierra; ningún reloj óptico de estroncio ha volado):
Cruce de resiliencia cuántico frente a clásico — escala TRL del holdover del reloj (arriba) · mapa de ventaja inercial con contorno de punto de equilibrio (abajo). Regenerable mediante cargo run --release --bin crossover_study.
Error de posición de la navegación por estima durante una interrupción del GNSS: el sensor cuántico (azul) se mantiene plano cerca de la especificación; el sensor clásico (rojo) diverge hasta decenas de kilómetros. Generado por Kshana a partir de scenarios/imu-deadreckoning.toml.
| Paquete | Escenario | Cuántico | Clásico |
|---|---|---|---|
| 1 — Holdover del reloj | clock-holdover.toml (especificación de 20 ns) |
el reloj óptico aguanta toda la interrupción | el CSAC supera la especificación a mitad de la interrupción |
| 2 — Navegación inercial por estima | imu-deadreckoning.toml (especificación de 100 m) |
átomos fríos: ~41 m, aguanta toda la interrupción | grado de navegación: supera la especificación en ~350 s → decenas de km |
| 3 — Transferencia de tiempo (enlace óptico entre satélites) | timetransfer.toml |
óptico: medición de distancia de ~0,3 mm | RF (TWSTFT): medición de distancia de ~150 mm |
| 4 — Fusión híbrida (colofón) | hybrid-pnt.toml |
posición y temporización completas durante toda la interrupción | limitado en posición a ~350 s |
El colofón muestra la tesis de la fusión: la transferencia óptica de tiempo entre satélites mantiene enganchado incluso un reloj clásico, de modo que el sensor inercial queda aislado como el eslabón débil del conjunto clásico — es decir, inercial cuántico + temporización óptica en conjunto.
Holdover del reloj durante una interrupción del GNSS: el reloj óptico (azul) se mantiene dentro de la especificación de 20 ns durante toda la deriva; el reloj de escala de chip (rojo) la supera a mitad de la interrupción. Generado por Kshana a partir de scenarios/clock-holdover.toml.
Otro escenario, orbit-gnss-challenged.toml, deriva la disponibilidad del GNSS de la geometría orbital en lugar de ventanas definidas a mano: una nave espacial dentro de la capa del GNSS se propaga frente a una constelación Walker de tipo GPS, y el número de satélites visibles (línea de visión, ocultación por la Tierra, máscara de elevación) fija el estado de la solución de posición en cada paso. A lo largo de un día el usuario tiene solución de posición solo ~59 % del tiempo; el reloj cuántico mantiene una solución de temporización de 5 ns durante todos los huecos (disponibilidad 1.0), el reloj de escala de chip solo ~0.83.
Error de temporización a lo largo de un día con la disponibilidad del GNSS derivada de la geometría orbital: el número de satélites visibles (línea de visión, ocultación por la Tierra, máscara de elevación) fija el estado de la solución de posición en cada paso, de modo que el reloj debe sostener cada hueco — el reloj óptico mantiene la especificación de 5 ns mientras que el reloj de escala de chip la supera. Generado por Kshana a partir de scenarios/orbit-gnss-challenged.toml.
La constelación también puede darse como conjuntos reales de elementos de dos líneas (TLE). Un TLE completo (línea 1 + línea 2) se propaga con el modelo SGP4/SDP4 completo — que incluye la resistencia atmosférica y los términos lunisolares de espacio profundo y de resonancia de 12 h / 24 h que importan para las órbitas GNSS de ~12 h — validado frente a los vectores oficiales AIAA 2006-6753 con un caso más desfavorable de ≈ 4 mm. scenarios/orbit-sgp4-gps.toml incluye una instantánea real de Celestrak gps-ops de la constelación GPS operativa (2021-07-28, 30 satélites) y exige sumas de comprobación de TLE válidas — los conjuntos de elementos de dos líneas son datos abiertos del catálogo del Servicio Espacial de EE. UU. / 18.º Escuadrón de Defensa Espacial, redistribuidos por Celestrak (Dr. T. S. Kelso, celestrak.org); se actualizan con scripts/fetch_tles.sh. Un bloque con solo la línea 2 conserva la propagación analítica de dos cuerpos (scenarios/orbit-real-tle.toml); las dos formas pueden mezclarse en una misma constelación. Una constelación también puede construirse a partir de un bloque de registros de efemérides de difusión GPS en RINEX-3 — el formato que decodifica un receptor — propagados con el algoritmo de usuario de IS-GPS-200 y procesados con la misma geometría (scenarios/orbit-rinex.toml).
Qué es y qué no es, en detalle
Qué es y qué no es#
Es: un motor determinista y con pocas dependencias que abarca toda la pila PNT — geometría orbital, navegación inercial, fusión GNSS/INS, integridad, relojes y temporización. Ejecuta un escenario (a menudo una interrupción del GNSS), hace evolucionar modelos de error de sensores calibrados a través del estimador adecuado y puntúa el resultado frente a las figuras de mérito operativas, emitiendo un resultado JSON (JavaScript Object Notation) reproducible y un gráfico SVG, desde una biblioteca de Rust, una interfaz de línea de comandos (CLI), una extensión de Python, un módulo WebAssembly en el navegador, un servidor Model Context Protocol (MCP) para agentes de IA o un complemento para IDE (entorno de desarrollo integrado) de JetBrains.
No es: hardware de vuelo, un diseño de carga útil cuántica, un receptor completo de señales GNSS, un simulador de señales de radiofrecuencia (RF) ni un banco de pruebas con hardware en el bucle, ni un producto de aviónica certificado — y no sustituye a MATLAB/Simulink, STK (Systems Tool Kit) ni Orekit; se sitúa junto a ellos e intercambia archivos con ellos. La fidelidad del hardware cuántico procede de modelos de error publicados, no de esta herramienta. La madurez detallada de cada capacidad está documentada en docs/CAPABILITY.md.
No es (todavía): un motor de física de interferometría atómica completo (la mayoría de los sensores cuánticos consumen coeficientes publicados de Allan/presupuesto de ruido; el acelerómetro CAI (interferómetro de átomos fríos) tiene una capa de primeros principios — fase de Mach–Zehnder, ruido de proyección, decaimiento del contraste y acoplamiento de vibraciones, además de sistemáticos de Coriolis y de desplazamiento por luz — pero los sistemáticos de frente de onda y la resolución de la ambigüedad de franjas siguen siendo una capa de hoja de ruta P2 (fase 2 de la hoja de ruta, la capa de física cuántica), véase ROADMAP.md y docs/QUANTUM-MODELS.md); un receptor GNSS certificado o de hardware (resuelve una posición PVT (posición, velocidad y tiempo) de punto único a partir de observaciones de código RINEX (Receiver Independent Exchange Format) reales — validado con datos reales del IGS (International GNSS Service) — y su capa de IQ (kshana iq, desde 0.31.0) adquiere y sigue en software muestras de banda base grabadas o generadas, como receptor de análisis: no controla hardware de radio ni transmite, no es un receptor certificado y no hace posicionamiento por fase de portadora (RTK ni PPP)); ni una suite completa de diseño de misiones (tiene bloques de construcción de Lambert / porkchop / maniobra / determinación de órbita, pero es la capa de simulación de desempeño por encima de GMAT (General Mission Analysis Tool)/Orekit, no un sustituto). Asumir este alcance es deliberado. Si necesita presupuestos de error de interferómetros de átomos fríos de primeros principios (p. ej., de nivel CARIOQA-PMP — Cold Atom Rubidium Interferometry in Orbit for Quantum Accelerometry, Pathfinder Mission Preparation — o validación al estilo X-37B), consulte la hoja de ruta P2 y póngase en contacto para colaborar.
Navegación en órbita terrestre baja#
Los satélites de órbita terrestre baja (LEO) pasan rápido y con mucha señal. El tipo de escenario leo-pnt-chain sigue un sistema a través de cada etapa: la señal, el paso y su enlace, el mensaje de navegación, y la solución fusionada de posición, velocidad y tiempo (PVT) y el posicionamiento preciso de punto (PPP). Cada etapa pasa sus cifras a la siguiente. Véase docs/LEO-PNT.md.
Todos los tipos de escenario por familia#
Los tipos de escenario del motor, clasificados por familias. Cada familia tiene una página con una entrada por tipo (la descripción y los campos del motor, un comando de ejemplo, cifras destacadas de una ejecución, las filas de la matriz de verificación que lo nombran y el gráfico que escribe el propio motor) y una hoja de contactos de esos gráficos; docs/KINDS.md los indexa todos. La tabla la escribe tools/gen_readme_blocks.py y las páginas tools/gen_kinds_index.py, y ambos fallan si el motor incorpora un tipo que ninguna familia nombra.
| Familia | Qué responde | Tipos | Ejecutar uno |
|---|---|---|---|
| Relojes, temporización y holdover | cuánto tiempo mantiene la hora un reloj sin GNSS y cómo se comporta un sistema de temporización frente a sus máscaras | clock, sweep, sweep-nd, telecom-timing, slot-timing, timetransfer, time-transfer-budget, holdover-test, quantum-time-transfer |
kshana scenarios/clock-holdover.toml |
| Sensores inerciales, de fusión y cuánticos | navegación por estima y fusión de sensores durante una interrupción del GNSS, con sensores clásicos y cuánticos | 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 alternativo sin GPS | navegar a partir de la gravedad, el terreno y otros campos cuando falta el GNSS | gravity-map, terrain-nav, terrain-slam, combined-altpnt, conflict-resilience |
kshana scenarios/combined-altpnt.toml |
| Constelaciones, cobertura y geometría | dónde están los satélites, quién los ve y qué calidad tiene la geometría, alrededor de la Tierra, la Luna o Marte | orbit, ephemeris, constellation-design, solar-system, body-pnt, mars-pnt, passes |
kshana scenarios/orbit-gnss-challenged.toml |
| Mediciones GNSS, posicionamiento e integridad | pseudodistancias, soluciones de posición, niveles de protección y el entorno espacial | integrity, gnss-sim, pvt, araim-reference-check, space-weather, realtime-frame-eop |
kshana scenarios/integrity-raim.toml |
| Jamming, spoofing y el espectro | cómo llega la interferencia a un receptor y si se detecta | jamming, spoof, spoof-detect, tracking-loop, spectrum, impairment-eval |
kshana scenarios/jamming-demo.toml |
| Navegación en órbita terrestre baja | una pasada, un enlace, un mensaje de navegación y una posición fusionada, etapa por etapa | leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain |
kshana scenarios/leo-pnt-end-to-end.toml |
| Lunar y cislunar | navegación, tiempo, marcos y geodesia en la Luna | 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 |
| Navegación de usuarios espaciales | señales GNSS para naves espaciales por encima, alrededor y más allá de las órbitas GNSS | gnss-ssv |
kshana scenarios/gnss-ssv-shell.toml |
| PNT óptico | enlaces ópticos a través de la atmósfera y figuras de mérito ópticas y de RF combinadas | optical-atmosphere, hybrid-optical-rf |
kshana scenarios/optical-atmosphere-network.toml |
| Análisis de misión, enlaces y operaciones espaciales | lanzamiento, ascenso, reentrada, actitud, enlaces, planificación de contactos y formatos de archivo | 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 |
| Hilos de misión | el presupuesto de errores de navegación y temporización de una cadena de fases desde el lanzamiento hasta la entrada | mission-thread |
kshana scenarios/mission-thread-artemis-class.toml |
| Campañas | misiones encadenadas, barridos y conjuntos construidos a partir de los demás tipos de escenario | campaign |
kshana scenarios/campaign-jam-spoof-holdover-integrity.toml |
Todos los comandos#
kshana <scenario.toml> ejecuta un escenario; cualquier otro comando es un subcomando, y kshana --help imprime el uso de todos ellos. Los comandos son --study, --validate, kinds, example, receiver-trust (con live y 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 y skyline. docs/COMMANDS.md da el propósito de cada uno, un ejemplo verificado y su página de documentación.
Todas las superficies#
Un solo motor, los mismos resultados en todas partes: la línea de comandos, la biblioteca de Rust, Python, JavaScript y WebAssembly, el servidor MCP con sus comandos de complemento y habilidades, Kshana Studio (cada página se ejecuta en el navegador, sin instalación y sin subir nada), las integraciones con ROS 2, Signal K, OpenCPN, GNSS-SDR y gnss_lib_py, los kits de despliegue de systemd, Docker y Grafana, y el complemento de JetBrains. docs/ALL-SURFACES.md los enumera con la forma de obtener cada uno y los nombres de todos los comandos de complemento, habilidades y páginas de Studio; docs/SURFACES.md indica, para cada comando y tipo de escenario, qué superficie lo ofrece y cuáles no, con el motivo.
Cómo funciona una ejecución#
Un escenario es un archivo TOML (Tom's Obvious, Minimal Language): un tipo de escenario, una semilla y los parámetros. El motor lo ejecuta y escribe junto a él el resultado, un gráfico y un informe, y las exportaciones que se soliciten.
Este escenario incluido dura 2 h: 10 min de GNSS y después unas 1,8 h con el GNSS denegado. Plantea cuánto tiempo mantienen la hora, con un margen de 20 ns, un reloj óptico de red de estroncio y un reloj atómico de escala de chip (CSAC).
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
El reloj óptico mantiene el presupuesto de 20 ns durante toda la interrupción de 6600 s; el CSAC lo mantiene durante 2610 s y está dentro del presupuesto el 95,6 % de la ejecución frente al 100 % del reloj óptico. kshana example enumera todos los escenarios incluidos.
Misiones#
Diez sectores plantean diez preguntas distintas al mismo motor. Cada uno tiene escenarios incluidos para empezar.
| Sector | Empezar con |
|---|---|
| Defensa y seguridad | campaign-jam-spoof-holdover-integrity, spoof-meaconing |
| Espacio, órbita terrestre | orbit-gnss-challenged, leo-pnt-end-to-end |
| Luna, Marte y espacio profundo | lunar-relay-constellation, mars-orbit-pnt |
| Aviación y drones | small-uas-jammed-nav, araim-gps-galileo |
| Marítimo | maritime-strait-jamming, maritime-port-approach-coast |
| Carretera | automotive-urban-canyon |
| Ferrocarril | rail-tunnel-coast |
| Infraestructuras críticas y temporización | clock-holdover, clock-ensemble |
| Telecomunicaciones y 5G (la quinta generación de redes móviles) | telecom-prtc-holdover-24h, leo-vertical-5g-network-timing |
| Ciencia e investigación | sweep-clock-stability, quantum-pnt-demonstrator.suite |
La pregunta que plantea cada sector
| Sector | La pregunta que plantea | Empezar con |
|---|---|---|
| Defensa y seguridad | ¿Cuánto tiempo siguen siendo fiables nuestra navegación y nuestra temporización bajo jamming y spoofing, y qué capas nos mantienen dentro de la especificación? | campaign-jam-spoof-holdover-integrity, spoof-meaconing |
| Espacio: órbita terrestre | ¿Ve mi nave espacial suficientes satélites de navegación, cuánto tiempo mantiene la hora su reloj entre soluciones de posición y qué aportaría una capa de navegación en órbita baja? | orbit-gnss-challenged, leo-pnt-end-to-end |
| Luna y espacio profundo | ¿Obtendrá un módulo de aterrizaje, un rover o un orbitador en la Luna, en Marte o más lejos una posición y una hora fiables? | lunar-relay-constellation, mars-orbit-pnt |
| Aviación y drones | Después de que un interferidor deje sin GNSS, ¿cuánto tiempo permanece mi sistema de aeronave no tripulada (UAS) dentro de su presupuesto de posición y hay integridad disponible en mi ruta? | small-uas-jammed-nav, araim-gps-galileo |
| Marítimo | ¿Hasta dónde alcanza un interferidor sobre el agua, se detectaría un empujón de posición y cuánto tiempo puede un buque avanzar por inercia hasta el puerto? | maritime-strait-jamming, maritime-spoof-position-push, maritime-port-approach-coast |
| Carretera y automoción | ¿Cuánto se desvía un coche bajo un paso elevado o al pasar junto a un interferidor en la carretera? | automotive-urban-canyon |
| Ferrocarril | ¿Cuántos segundos después de entrar en un túnel puede un tren seguir sabiendo en qué vía está? | rail-tunnel-coast |
| Infraestructuras críticas y temporización | Si se pierde o se falsifica la hora GNSS, ¿cuánto tiempo mantienen una red eléctrica, un mercado de negociación o un centro de datos una hora trazable? | clock-holdover, clock-ensemble |
| Telecomunicaciones y 5G | Si se pierde la referencia de tiempo GNSS, ¿se mantiene el reloj de mi red dentro de las máscaras de la ITU-T y durante cuánto tiempo? | telecom-prtc-holdover-24h, leo-vertical-5g-network-timing |
| Ciencia e investigación | ¿Puedo reproducir, ampliar y citar un resultado PNT, hasta la semilla? | sweep-clock-stability, quantum-pnt-demonstrator.suite |
Evidencias#
176 de 401 capacidades validadas frente a referencias independientes externas; 221 etiquetadas con franqueza como modeladas. Cada fila de la matriz de verificación nombra una capacidad, la referencia independiente frente a la que se comprueba, la prueba que ejecuta la comprobación y la etiqueta que se deriva. La integración continua (CI) hace imposible llamar VALIDATED a una capacidad sin una referencia independiente externa.
| Etiqueta | Filas | Significado |
|---|---|---|
| VALIDATED | 176 | una referencia independiente externa coincide: datos reales, una implementación independiente o vectores de referencia publicados |
| MODELLED | 221 | contrastado con la verdad analítica o con la autoconsistencia de la simulación, y dicho sin rodeos |
| PARTNER | 4 | propiedad de un socio de hardware; Kshana no tiene ninguna referencia independiente para ello |
Algunas de las comprobaciones: los 666 vectores SGP4 (Simplified General Perturbations 4) de AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 con 4,12 mm; el modelo de fuerzas de Cowell con 0,08 m frente a Orekit 12,2; Galileo con 0,61 m y Swarm-A con 0,10 m frente a efemérides precisas reales de la Agencia Espacial Europea (ESA). Las pruebas mantienen cerca del 95 % de cobertura de líneas de src/, con una exigencia del 85 % en la CI. El registro es docs/VERIFICATION-MATRIX.md, generado a partir de src/verification.rs: la matriz completa de 401 filas, y por qué cada fila modelada no tiene referencia independiente externa en docs/MODELLED-RATIONALE.md.
Cómo funciona la validación, la tabla de aspectos destacados y las figuras de evidencia
Validación, reproducibilidad y honestidad#
- Cada término de ruido está calibrado con una cifra publicada y citada y validado frente a la relación estándar (desviación de Allan para relojes; crecimiento del error de navegación por estima de Groves para inerciales; la conversión de temporización a distancia para la transferencia de tiempo). El estado de cada término se sigue en
docs/VALIDATION.mdcomovalidatedonot modeled— nada se presenta como validado si no lo está. - Reproducible por construcción:
scenario + seed + engine version → identical bits.scripts/check-reproducible.shlo impone; las ejecuciones cuánticas y clásicas usan semillas independientes para que su ruido no esté correlacionado. - La madurez se declara con honestidad: las cifras del reloj óptico y del enlace óptico son resultados de objetivos / demostrador en tierra, no de vuelo.
La etiqueta de evidencia en cada figura#
Cada figura y tabla que escribe una ejecución indica hasta qué punto fiarse de ella y en qué filas del registro se apoya. El JSON de resultados tiene una clave evidence, el SVG del gráfico una línea bajo el trazado (y un elemento <metadata id="kshana-evidence">), y la tabla CSV líneas de comentario # evidence: por delante (se leen con comment='#'). Nombra un nivel, VALIDATED, MODELLED o PARTNER, y los identificadores (VM- y ocho dígitos hexadecimales) de las filas de la matriz de verificación que ejercitó la ejecución. El nivel es el más débil de esas filas, de modo que una ejecución que se apoya en una fila modelada se etiqueta MODELLED por muchas filas validadas que haya a su lado; la etiqueta nunca puede afirmar más que el registro. Las filas, los estados y los identificadores se leen de la matriz, no se escriben a mano (docs/VERIFICATION-MATRIX.md, docs/SCHEMA.md), y tests/evidence_labels_doc_sync.rs falla si una figura no tiene etiqueta o si una etiqueta discrepa de la matriz.
La validación de un vistazo#
Cada fila la hace cumplir una prueba con nombre en la CI. Esta tabla es una selección destacada; la matriz completa verificada por máquina es de 401 filas — 176 VALIDATED, 221 MODELLED, 4 PARTNER (src/verification.rs), con las evidencias completas (y lo que honestamente no está todavía validado) en docs/VALIDATION.md y el artefacto kshana-validation-summary.html de cada versión (generado por cargo run --bin validation_report, con atestación SLSA — Supply-chain Levels for Software Artifacts).
La columna Estado indica el tipo de evidencia, de acuerdo con la escala de validación anterior: VALIDATED = contrastado con una referencia independiente externa (datos reales, una biblioteca independiente o vectores de referencia publicados); MODELLED = contrastado con la verdad analítica o con la autoconsistencia de la simulación (sin un conjunto de datos externo independiente). VALIDATED describe el método de comprobación, no un resultado de aprobado/suspendido — un fallo honesto frente a una referencia independiente externa real sigue siendo VALIDATED, mientras que una comparación que ninguna fila de la matriz nombra como referencia independiente (el ajuste a LRO — Lunar Reconnaissance Orbiter — de arriba) se muestra como MODELLED. Las filas de CI son salvaguardas de proceso, no figuras de mérito. Unas pocas islas de datos reales (el reloj de cesio medido, Stable32 PHASE.DAT y las comprobaciones OPS-SAT/ICGEM cuyos datos de entrada en bruto no tienen licencia de redistribución) están condicionadas por datos: la prueba imprime un aviso de omisión y se mantiene en verde cuando falta la entrada, y las cifras públicas de referencia se confirman en tests/fixtures/. Los datos de entrada en bruto se reproducen con el scripts/fetch_*.sh correspondiente.
| Estado | Capacidad | Coincidencia | Referencia / referencia independiente |
|---|---|---|---|
| VALIDATED | Propagación SGP4/SDP4 | 666/666 vectores, caso más desfavorable 4,12 mm | AIAA 2006-6753 (Vallado tcppver.out) + comparación directa con el crate independiente sgp4 |
| VALIDATED | Marcos de referencia — nutación IAU 2000A/B, cadena CIO IAU 2006/2000A, ERA | bit a bit (X,Y con 1e-14, s con 1e-18, ERA con 1e-12) | ERFA/SOFA eraXys06a · eraC2ixys · eraEra00 · eraNut00a/b |
| MODELLED | GCRS→ITRS frente a un motor SPICE independiente | máx. 0.028″ → ≤ 0,86 m en tierra, ≤ 3,6 m en órbita GNSS | ANISE (NAIF/SPICE en Rust puro), mismo EOP finals2000A del IERS, 8 épocas de 2020–2023 (comparado con esta referencia; ninguna fila de la matriz de verificación la nombra como referencia independiente externa, por lo que no se etiqueta VALIDATED) |
| MODELLED | Geopotencial EGM2008 (grado/orden 70) | aceleración = ∇V con < 1e-6; el colapso zonal coincide con J2 validado | Coeficientes EGM2008 de NGA + identidad analítica de ∇V |
| VALIDATED | Síntesis de funcionales de gravedad (mapa de navegación asistida por gravedad / sin GNSS) | GRS80 Somigliana + γ_e/γ_p con 3.5e-12; mapa de perturbación EGM2008 real físicamente plausible (RMS ≈ 26 mGal, g/o 70) | GRS80 (Moritz 1980, IAG — Asociación Internacional de Geodesia) gravedad normal de Somigliana + EGM2008 real de ICGEM (tests/icgem_gravity_reference.rs) |
| VALIDATED | Estimadores de Allan (ADEV/MDEV/TDEV/HDEV) + bandas de confianza | reproducen las desviaciones de referencia; las bandas χ² coinciden | NIST SP 1065 (Riley), tabla 31/32 de 1000 puntos |
| VALIDATED | Estimadores de Allan sobre un reloj de cesio medido real | OADEV/OHDEV con 1e-3 (observado ≤ 3e-5), 16 factores de promediado | Stable32 sobre un Cs 5071A real frente a un máser de H, 556.990 puntos (tests/cs5071a_reference.rs, condicionado por datos) |
| VALIDATED | Estimadores de Allan sobre el PHASE.DAT canónico de Stable32 | OADEV/MDEV/TDEV con 1e-3 (observado ≤ 5e-5), 139 factores de promediado | Desviaciones de referencia de Stable32 para PHASE.DAT (tests/phasedat_reference.rs, condicionado por datos) |
| MODELLED | Modelo de error de IMU — ARW / VRW / inestabilidad del sesgo | recuperado a < 5 % (inestabilidad del sesgo < 15 %) | Hoja de datos del ADIS16465 de Analog Devices; perfil de referencia de NaveGo |
| VALIDATED | Propagador numérico de Cowell + modelo de fuerzas (niveles conservadores) | error de posición más desfavorable 0,08 m durante 24 h, 278 épocas (LEO + GTO) | Orekit 12,2 NumericalPropagator/DormandPrince853 (CS GROUP), tests/numerical_cowell_propagator_reference.rs |
| MODELLED | Nivel de resistencia de Cowell + entradas absolutas de efemérides del Sol/Luna y de densidad | nivel de resistencia caracterizado ≈ 333 m / 24 h; sin perturbaciones coincide con Kepler de variable universal a nivel submétrico, energía/momento ~1e-9 | efemérides integradas de baja precisión + Kepler analítico |
| MODELLED | Lambert · Tsiolkovsky · porkchop | viaje de ida y vuelta a la verdad de dos cuerpos; ΔV < 0.01 % | Izzo 2015 · ecuación del cohete · suelo analítico de Hohmann |
| MODELLED | Determinación de órbita (lotes de Gauss–Newton) | submétrico / mm·s⁻¹ sin ruido; ~2 m con un suelo de ruido de 5 m | dos cuerpos + J2 sobre un arco RK4 |
| MODELLED | Ajuste del modelo de fuerzas frente a las efemérides precisas de Galileo (arco completo) | 0,61 m RMS en 3-D, 24 h, g/o-70, solo fuerzas | Órbita final ESA0MGNFIN de ESA/ESOC (E11), EOP finals2000A real (comparado con esta referencia; ninguna fila de la matriz de verificación la nombra como referencia independiente externa, por lo que no se etiqueta VALIDATED) |
| MODELLED | Ajuste del modelo de fuerzas frente a las efemérides precisas de Swarm-A (dinámica reducida) | 0,10 m RMS en 3-D (cota de nivel empírico, no una medida) | Órbita precisa SW_OPER_SP3ACOM_2_ de ESA (comparada con esta referencia; ninguna fila de la matriz de verificación la nombra como referencia independiente externa, por lo que no se etiqueta VALIDATED) |
| MODELLED | Ajuste del modelo de fuerzas frente a LRO lunar (fallo honesto) | 6,67 m de dinámica reducida, por encima del objetivo de 5 m | JPL Horizons LRO (NAIF −85) + GRGM660PRIM de GRAIL (Gravity Recovery and Interior Laboratory) (comparado con esta referencia; ninguna fila de la matriz de verificación la nombra como referencia independiente externa, por lo que no se etiqueta VALIDATED) |
| MODELLED | OD de Marte en espacio profundo (SRIF de dinámica reducida) | ≈ 0,2 m Marte-LMO (FoM de simulación, no de misión real) | OD sintética en lazo cerrado — validación de la maquinaria del estimador |
| MODELLED | Dinámica de Marte con el Sol como centro frente a JPL DE440 | 137 m con un arco de 1 día (crece con el arco = n-cuerpos no modelado) | JPL DE440 mediante ANISE (xval/anise-mars-od, condicionado por kernel) (comparado con esta referencia; ninguna fila de la matriz de verificación la nombra como referencia independiente externa, por lo que no se etiqueta VALIDATED) |
| VALIDATED | Posicionamiento de punto único frente a una coordenada IGS topografiada (observaciones reales) | 5,7 m RMS en 3-D / 1,1 m horizontal, SPP de código libre de ionosfera de doble frecuencia | Levantamiento de la estación IGS ABMF + efemérides de difusión GPS, 2018-05-13 (tests/pvt_abmf.rs) |
| MODELLED | UKF GNSS/INS fuertemente acoplado | 0,77 m RMS durante un paso LEO de 30 min con una interrupción de 120 s | deriva con modelo de fuerzas, derivado a mano |
| MODELLED | Navegación con mapa de gravedad sin GPS | ~70 km de deriva del INS → ~145 m recuperados | Objetivo Quantum Wayfarer de ESA NAVISP |
| MODELLED | Navegación referenciada al terreno (TERCOM/SITAN) | 70 km de deriva → < 500 m (suelo de resolución de malla ~140 m) | DEM .hgt de SRTM; deriva inyectada a mano (comprobación no circular) |
| MODELLED | Campo principal IGRF-14 (grado/orden 13) | polo ~80,7°N, dipolo ~29,7 µT, banda física de 22–67 µT | IAGA (Asociación Internacional de Geomagnetismo y Aeronomía) igrf14coeffs.txt (seminormalizado de Schmidt) |
| MODELLED | Modulación de señal de navegación y seguimiento de código | SSC propio de BPSK = 2/(3·R_c); PSD de área unidad; fluctuación submétrica del DLL de C/A a 45 dB-Hz | Anclajes de SSC/PSD en forma cerrada + fórmula de ruido térmico del DLL de Kaplan & Hegarty |
| MODELLED | Corrector diferencial de halo/NRHO del CR3BP | STM = diferencias finitas; la órbita se cierra con precisión de máquina; NRHO L2 9:2 ≈ 6,57 d / periluna ≈ 3.250 km | comprobación de la STM por diferencias finitas + NRHO publicada L2 meridional 9:2 (≈ 6,56 d / ≈ 3.370 km) — CR3BP, no unas efemérides reales de Gateway |
| MODELLED | Integridad ARAIM de doble constelación | modo de fallo de toda la constelación con GPS + Galileo reales | TR (informe técnico) de ARAIM de la UE / DO-316; Celestrak gps-ops 2021-07-28 (comparado con esta referencia; ninguna fila de la matriz de verificación la nombra como referencia independiente externa, por lo que no se etiqueta VALIDATED) |
| VALIDATED | Geometría GNSS / DOP (GDOP/PDOP/HDOP/VDOP/TDOP) | coinciden con 1e-6 relativo en 8 geometrías (bien condicionadas → casi singulares) | gnss_lib_py 1.0.4 (Stanford NAV Lab) — biblioteca independiente (tests/dop_reference.rs) |
| VALIDATED | Métricas de evaluación de detectores de ML (AUC/ROC/confusión/Pd-Pmd/precisión/F1) | recuentos exactos + < 1e-9 en 5 conjuntos de datos × 24 umbrales | scikit-learn 1.9.0 (Pedregosa et al., JMLR — Journal of Machine Learning Research — 2011) — biblioteca independiente (tests/eval_metrics_reference.rs) |
| VALIDATED | ROC AUC de detección de anomalías con telemetría real de ESA OPS-SAT | el AUC reproduce el de scikit-learn con < 1e-9; AUC del detector de recuento de picos ≈ 0.85 en la partición de prueba etiquetada | roc_auc_score de scikit-learn en la partición de prueba de OPSSAT-AD (Ruszczak et al. 2025, CC BY 4,0) — telemetría real de OPS-SAT (tests/opssat_ad_reference.rs) |
| VALIDATED | Núcleos numéricos del compromiso cuántico (ajuste NNLS de ADEV · bandas de consistencia χ² · Q de reloj de van Loan) | NNLS + Q exactos; χ² < 5e-4 con gdl de operación ≥ 48 | scipy 1.17.1 — optimize.nnls / stats.chi2.ppf / linalg.expm (tests/scipy_reference.rs) |
| VALIDATED | Métricas de wander de telecomunicaciones MTIE / MDEV / TDEV (ITU-T G.810/G.823/G.8261/G.811 — las recomendaciones del Sector de Normalización de las Telecomunicaciones de la Unión Internacional de Telecomunicaciones) | MTIE (9 factores de promediado, exacto bit a bit) y MDEV + TDEV (8 factores, < 1e-9 relativo) sobre la serie LCG (generador congruencial lineal) de NIST SP 1065 | allantools 2024,06 mtie / mdev / tdev — biblioteca independiente (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs) |
| VALIDATED | Métodos de estudio de compromisos MCDA — las cuatro familias de decisión, nueve agregadores validados externamente (WSM · WPM · WASPAS · MOORA · COPRAS · TOPSIS · VIKOR · PROMETHEE II · ELECTRE I) más ponderación de prioridades por comparación por pares AHP | puntuaciones / clasificaciones / matrices de concordancia reproducidas con < 1e-9 | pymcdm + pyDecision (bibliotecas MCDA independientes de terceros) + RI (índice aleatorio) de Saaty / autovalores de SciPy-LAPACK (tests/mcda_*_reference.rs) |
| VALIDATED | Envolvente Doppler LEO a partir de la órbita y la portadora | máximo de Iridium dentro de 5 % de los ±36 kHz publicados; Xona Pulsar X1 dentro de los 32–34 kHz publicados | Resultados de pruebas de RNTF LEO PNT; Leclère, Marathe & Reid, arXiv:2509,19551 (tests/leo_doppler_reference.rs) |
| MODELLED | Convergencia de PPP con aumentación LEO | 7,4 → 4,8 / 3,2 / 2,7 / 2,3 min con 60 / 96 / 192 / 288 satélites LEO, monótono; NEES del filtro dentro de la banda χ² | tendencia comparada con Li et al., J. Geod. 93:749 (2019) (9,6 → 7,0 / 3,2 / 2,1 / 1,3 min); no se reproducen las constelaciones ni el ruido |
| MODELLED | Nivel de protección de temporización condicional (error de tiempo no detectado limitado por el holdover bajo spoofing) | la composición reproduce la recursión de covarianza multipaso de clock_state; calibrada sobre un spoofing real registrado |
Escalares de JammerTest 2024 (Zenodo 15911589) + formas cerradas de van Loan / CUSUM (examples/tpl_jammertest) |
| MODELLED | Puntuación de resiliencia PNT + inestabilidad de decisión | 35 pruebas con referencia independiente derivada a mano; artefacto de estudio determinista byte a byte (semilla fija) | Correspondencia con DHS RPCF v2.0 + formas cerradas de Dirichlet / Kendall-τ / Hill-N2 — arquitecturas sintéticas, no una certificación |
| MODELLED | Estudio de brecha de optimismo ante degradaciones de RF (leyes de escala + predictor leave-one-out) | significación con nula por permutación; artefacto determinista byte a byte (5 semillas) | corpus sintético con parámetros fundamentados — las métricas de evaluación están VALIDATED frente a scikit-learn (arriba); el estudio es MODELLED |
| CI | Reproducibilidad multiplataforma | entrada idéntica bit a bit + golden de forma en 3 sistemas operativos | Matriz de CI de Linux / macOS / Windows, golden de SHA-256 |
| CI | Cobertura de pruebas | ~95 % de líneas en src/ excluyendo src/*_data.rs y src/main.rs, con umbral ≥ 85 % |
cargo-tarpaulin (motor LLVM) |
Cómo gana una capacidad su etiqueta — el invariante aplicado por CI: sin referencia independiente externa ⇒ no puede quedar validada · SVG
Arriba: cada fila validada está respaldada por un conjunto de datos externo, por construcción. Abajo: SGP4 coincide con la referencia oficial en todos los regímenes (caso más desfavorable 4,12 mm). SVG · SVG
176 validadas · 221 modeladas · 4 de socios — SVG
Dominios de capacidad#
Todas las capacidades del mapa público, por dominio, con su etiqueta del registro. La tabla de dominios la escribe tools/gen_readme_blocks.py a partir de web/capabilities.json, el mismo archivo que lee el mapa de todo de Studio.
La tabla completa, dominio por dominio con cada capacidad y su etiqueta, está en docs/CAPABILITY-DOMAINS.md.
Instalación#
Una sola línea instala la herramienta de línea de comandos: cargo install kshana. Todos los canales publican v0.40.0 desde el mismo commit etiquetado.
| Canal | Instalación | Guía |
|---|---|---|
| Probar en el navegador | abrir https://kshana.dev | Guía de Studio |
| Línea de comandos (Rust) | cargo install kshana |
Uso de la línea de comandos |
| Biblioteca de Rust | cargo add kshana |
Referencia de la API en docs.rs |
| Python | pip install kshana |
Guía de la API de Python |
| JavaScript y WebAssembly | npm install kshana |
Guía de npm y WebAssembly |
| Asistente de IA (servidor MCP, cargo) | cargo install kshana-mcp |
Guía del servidor MCP |
| Imagen de Docker | docker run --rm -i ghcr.io/ashfordeou/kshana-mcp |
Guía del servidor MCP: Docker |
| Cursor (un clic) | Añadir a Cursor (npx) · Añadir a Cursor (Docker) · npx -y kshana-mcp@0.40.0 |
Todos los fragmentos de instalación de MCP |
| VS Code (un clic) | Instalar en VS Code (npx) · Instalar en VS Code (Docker) · npx -y kshana-mcp@0.40.0 |
Todos los fragmentos de instalación de MCP |
| npx | npx -y kshana-mcp@0.40.0 |
Todos los fragmentos de instalación de MCP |
| uvx / pipx | uvx kshana-mcp==0.40.0 |
Todos los fragmentos de instalación de MCP |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp |
Todos los fragmentos de instalación de MCP |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket && scoop install kshana-mcp |
Todos los fragmentos de instalación de MCP |
| winget | winget install AshfordeOU.KshanaMcp |
Todos los fragmentos de instalación de MCP |
| Binario precompilado | descargue kshana-mcp-<target> de la versión y compárelo con SHA256SUMS | Todos los fragmentos de instalación de MCP |
| Registro oficial de MCP | buscar io.github.ashfordeOU/kshana-mcp | Todos los fragmentos de instalación de MCP |
| Remoto (HTTP en flujo), autoalojado | kshana-mcp --http 127.0.0.1:8080 |
Guía de autoalojamiento |
| Complemento para IDE de JetBrains | Configuración → Plugins → Marketplace → buscar "Kshana" (ID del complemento dev.kshana.ide) | Guía del complemento |
| Plugin de Signal K | npm install signalk-kshana-trust |
Guía del plugin de Signal K |
| Plugin de OpenCPN | descargue el archivo tar del complemento de la versión | Envío al catálogo de OpenCPN |
| Panel de Grafana | importe kshana-grafana-*.json de la versión | Código fuente del panel |
| Imagen de compilación de referencia | docker pull ghcr.io/ashfordeou/kshana-reference-build |
Integraciones marinas |
Kshana en el JetBrains Marketplace Se compila con Rust 1,88 o posterior, la rust-version de Cargo.toml
MCP es el Model Context Protocol. Fije una versión con cargo install kshana --version 0.40.0, pip install kshana==0.40.0 o npm install kshana@0.40.0. Para compilar desde el código fuente, consulte Instalar y compilar en Referencia.
Ejecutar un escenario desde Python y desde 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
Además de run, el módulo expone run_full (JSON, SVG y el resumen de una línea a la vez), run_typed, validate_toml, list_kinds / scenario_kinds y error_kind; véase docs/PYTHON_API.md.
El paquete npm es el motor completo compilado a WebAssembly. En Node.js, pase el binario a initSync; en un navegador, await init() lo descarga (véase 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));
Arquitectura#
Un motor abierto está en el centro y cada superficie lo ejecuta: la línea de comandos, la biblioteca de Rust, Python, WebAssembly y Kshana Studio, el servidor MCP, la imagen de Docker y el complemento de JetBrains. El mismo archivo de escenario da los mismos bytes en cada una. Kshana Pro se sitúa por encima como una capa independiente que depende del motor y nunca lo bifurca.
Dentro del motor: las capas de dominio y el registro de verificación
Un motor, muchas puertas de entrada. Un único núcleo de Rust (kshana) ejecuta cada escenario, al que se accede mediante una CLI, una extensión de Python, un módulo WebAssembly en el navegador, un servidor MCP para agentes de IA y un complemento para IDE de JetBrains — todos convergen en un único despacho api::run_toml. En su interior, los paquetes de sensores se conectan a una interfaz común de modelos de error; junto a ellos hay una capa de marcos de referencia (precesión–nutación IAU 2006/2000A y la reducción GCRS↔ITRS basada en CIO), una capa de astrodinámica/numérica (SGP4/SDP4 analítico y un propagador numérico de Cowell con su modelo de fuerzas EGM2008/perturbaciones, diseño de maniobras y determinación de órbita), una capa de integridad/GNSS (RAIM/ARAIM, SBAS, el dominio de medida, jamming, cislunar), una capa de fusión / PNT alternativo (los estimadores GNSS/INS y los correladores de mapas de gravedad/terreno/magnéticos), una capa de espacio profundo y lunar (PNT radiométrico de Marte y la suite de PNT lunar, con su nivel de evidencia por pieza en la matriz — tiempo LTC, VLBI, OD+reloj conjunta, realización de marcos, volumen de servicio, PNT diferencial, interoperabilidad), una capa de análisis de misión (presupuestos de lanzamiento / reentrada / cobertura / apuntamiento / paso / enlace y el entorno de meteorología espacial) y la capa abierta de estudios de resiliencia y aprendizaje automático (puntuación de resiliencia RPCF, la brecha de optimismo ante degradaciones de RF y el demostrador de PNT con tecnología cuántica) cuyos artefactos reproducibles se apoyan en los núcleos validados.
Dos crates independientes, excluidos del workspace, están junto al núcleo — mcp/kshana-mcp (el servidor MCP, construido sobre el SDK rmcp de la edición 2024) y xval/anise-frames (la comprobación cruzada de marcos de ANISE/SPICE, que incorpora dependencias MPL-2.0 (Mozilla Public License 2,0)) — que se mantienen fuera del grafo de dependencias del crate publicado, de Cargo.lock, de la puerta de licencias y de la compilación de MSRV (versión mínima compatible de Rust) mediante la lista exclude de Cargo.toml de la raíz. El complemento de JetBrains (ide/jetbrains) es un proyecto independiente en Kotlin. Véase docs/ARCHITECTURE.md para el conjunto completo de diagramas.
Los diagramas renderizados (flujo del motor, mapa de módulos, distribución) están en docs/ARCHITECTURE.md.
Diagramas#
Los diagramas son fuentes Mermaid en docs/diagrams/, renderizadas a SVG y PNG en docs/assets/diagrams/ (tools/render-diagram-chromium.sh <name> en Linux, los otros dos scripts render-diagram en el resto), y un registro vincula cada PNG con el SVG exacto del que procede. Las pruebas fijan los recuentos que indican. Los gráficos de las secciones anteriores los dibujan herramientas a partir de ejecuciones del motor; estos muestran cómo encajan las piezas.

Un despacho, un motor, una salida reproducible · SVG · fuente system-overview.mmd

Todas las superficies, desde el mismo motor · SVG · fuente surfaces.mmd

El bucle interno de una ejecución · SVG · fuente engine-flow.mmd

De un registro del receptor a una puntuación de confianza y lo que la usa · SVG · fuente trust-flow.mmd

Del escenario al paquete firmado; Kshana nunca produce ni reproduce una señal · SVG · fuente lab-round-trip.mmd

Cómo se ejecuta Studio, en local · SVG · fuente studio-flow.mmd

Flujo de pruebas y publicación, desde las puertas locales hasta una versión verificada y la vía solo del sitio · SVG · fuente release-flow.mmd · docs/RELEASING.md

Dónde está el código · SVG · fuente module-map.mmd

Qué se publica dónde y qué lo comprueba · SVG · fuente distribution.mmd
Asistente de IA#
kshana-mcp es un servidor MCP: su asistente ejecuta el motor real y lee su JSON, en lugar de adivinar las matemáticas. Cada una de sus 49 herramientas es una envoltura fina de una función pública de la biblioteca kshana, de modo que ninguna lógica de simulación reside en el servidor.
Instalar el servidor MCP#
De carácter consultivo, no es un equipo de navegación homologado: el operador sigue siendo responsable de la navegación. El servidor se ejecuta en su ordenador; no se envía nada a Ashforde OÜ.
Aquí se omite un pasaje que nombra clientes de IA de terceros; está en README.md en GitHub.
| Canal | Comando o botón | Requiere | Forma fijada |
|---|---|---|---|
| Cursor (un clic) | npx (Node) · Docker | Node o Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code (un clic) | npx (Node) · Docker · Insiders (npx) | Node o 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+ con uv o 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 | fórmula para v0.40.0 |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket y luego scoop install kshana-mcp |
Scoop (Windows) | manifiesto para 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 |
| Binario precompilado | la página de la versión: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], comprobado con SHA256SUMS y gh attestation verify |
ninguna | v0.40.0 |
| Registro de MCP | io.github.ashfordeOU/kshana-mcp (lo encuentran los clientes que conocen el registro) |
un cliente que conoce el registro | 0.40.0 |
| Remoto (HTTP en streaming) | kshana-mcp --http 127.0.0.1:8080, autoalojado: véase docs/deploy/mcp-http.md |
su propio host | v0.40.0 |
kshana-mcp en Glama, su puntuación de calidad de servidor MCP
Aquí se omite un pasaje que nombra clientes de IA de terceros; está en README.md en GitHub.
La configuración por cliente está en docs/integrations.md. El servidor figura en el registro oficial de MCP como io.github.ashfordeOU/kshana-mcp.
Las 49 herramientas
Escenarios e informes
| Herramienta | Qué hace |
|---|---|
run_scenario |
Ejecutar un escenario a partir de una definición TOML (Tom's Obvious, Minimal Language) |
list_scenario_kinds |
Los 92 tipos de escenario integrados con descripciones y campos obligatorios/opcionales, para que el agente pueda construir un escenario válido |
validate_scenario |
Comprobación previa: analizar el TOML y detectar su tipo de escenario, sin ejecutarlo |
list_example_scenarios |
Los escenarios de referencia incluidos, como JSON |
get_example_scenario |
El texto TOML de un escenario de referencia incluido, byte por byte el archivo de scenarios/ |
report_scenario |
Ejecutar un escenario y devolver su informe |
animate_scenario |
Ejecutar un escenario y devolver su serie temporal como animación |
sky_geometry |
Geometría del cielo bajo un horizonte dependiente del acimut: los satélites visibles y ocultos, el DOP, la covarianza este-norte-arriba y la elipse de error horizontal; o un preajuste de horizonte con su procedencia |
Exportación e interoperabilidad
| Herramienta | Qué hace |
|---|---|
list_export_formats |
Qué formatos de interoperabilidad se aplican a un escenario (czml, kml, geojson, stk, sigmf), el motivo cuando alguno no se aplica y la especificación que sigue cada escritor |
export_interop |
Exportar un escenario como CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemérides STK (Systems Tool Kit) .e o SigMF (Signal Metadata |
import_route |
Escribir una ruta GeoJSON LineString en un escenario que vuela una trayectoria de puntos de paso (terrain-nav, terrain-slam, gravity-map, combined-altpnt) y devolver el nuevo TOML |
export_sp3 |
Exportar la constelación de un escenario orbit como efemérides precisas SP3-c (Standard Product 3, revisión c) |
export_omm |
Exportar los elementos de un escenario orbit como catálogo OMM (Orbit Mean-elements Message) CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 |
export_oem |
Exportar la serie de estados de un escenario orbit como efemérides CCSDS OEM (Orbit Ephemeris Message) 2,0 — la posición TEME (ecuador verdadero, equinoccio medio) y |
export_table_csv |
Ejecutar un escenario y devolver su tabla de reproducibilidad como CSV (valores separados por comas) — la tabla estable byte a byte que la CLI (interfaz de línea de comandos) escribe como <scenario>.table.csv |
export_test_bench |
El movimiento del vehículo y los eventos de un escenario para un simulador GNSS de laboratorio (kshana bench-export) |
Confianza en receptores y buques
| Herramienta | Qué hace |
|---|---|
assess_receiver_log |
Evaluar la confianza en un registro real de un receptor GNSS (sistema global de navegación por satélite) |
assess_vessel_stream |
Puntuar un extracto NMEA 0183 acotado (como máximo 2 MiB y 20.000 épocas |
assess_vessel_log |
Un registro NMEA 0183 de un buque (como máximo 4 MiB) como ejecución por lotes, con el TOML de sesión que indica los límites del buque |
create_evidence_pack |
Un paquete de evidencias firmado para una ventana del registro de un buque (kshana receiver-trust evidence) |
attach_evidence_timestamp |
Vincular un token de marca de tiempo RFC 3161 (base64 de los bytes de .tsr) a un paquete, en memoria (kshana evidence attach-timestamp) |
verify_evidence_pack |
Verificar un paquete (kshana evidence verify) |
generate_training_nmea |
NMEA 0183 sintético de puente para entrenamiento de tripulación a partir de un TOML de nmea-scenario (jamming, arrastre de posición, spoofing de tiempo, retardo de repetición) con el registro del instructor (kshana-nmea-training/1) |
build_interference_map |
Un mapa de interferencias GNSS a partir de informes de posición ADS-B o AIS como texto CSV (como máximo 4 MiB) |
route_exposure |
La proporción de la longitud de una ruta en celdas degradadas, no degradadas, no evaluadas y no observadas de uno o varios mapas de interferencias, opcionalmente dentro de un intervalo de fechas |
trust_telemetry |
Un flujo de confianza (líneas JSON) o un resultado de receiver-trust representado como texto de Prometheus, líneas de syslog CEF o LEEF o una carga JSON OTLP, con los codificadores de kshana trust-telemetry |
jammertest_import |
Lee el catálogo de pruebas y el plan de transmisión publicados de Jammertest (NPRA/jammertest-plan, MIT) como verdad programada (kshana jammertest import): las franjas de un área de prueba se convierten en sucesos de confianza del receptor con el identificador del catálogo y el año en cada etiqueta. Franjas planificadas, no horas de emisión registradas; no se lee ningún campo de contacto del plan. MODELLED. Véase docs/JAMMERTEST.md. |
jammertest_score |
Puntúa un registro de receptor frente a ese programa (kshana jammertest score): por prueba, la latencia de detección, las alarmas perdidas y el tiempo de recuperación, y las falsas alarmas fuera de cada franja. Registros de texto como log, binarios (ubx, sbf) como log_base64. Un paquete firmado necesita una clave: línea de comandos. Solo consultivo; MODELLED. |
fit_imu_log |
Parámetros de acelerómetro y giróscopo de los escenarios hybrid y fusion ajustados a partir de un registro de IMU estacionaria (CSV o EuRoC) mediante desviación de Allan, con una tabla [accel_classical] lista para pegar y el SHA-256 del registro (kshana imu-fit). Texto de entrada, JSON de salida; MODELLED. |
IQ de GNSS (archivos del directorio de trabajo; desactivado en modo HTTP)
| Herramienta | Qué hace |
|---|---|
iq_signals |
La configuración de la capa IQ de GNSS |
iq_info |
Describir una grabación IQ (en fase y cuadratura) del directorio de trabajo sin procesarla |
iq_scene |
Generar una escena IQ GNSS multisatélite en el directorio de trabajo (kshana iq scene) |
iq_acquire |
Adquisición por FFT (transformada rápida de Fourier) de uno o más PRN (códigos de ruido pseudoaleatorio) sobre una grabación (kshana iq acquire), opcionalmente tras etapas de front end |
iq_track |
Adquirir y luego seguir con el banco de DLL/PLL/FLL (lazos de enganche de retardo, de fase y de frecuencia) (kshana iq track), con los lazos de un `kshana.loop-desig |
iq_frontend |
Aplicar DSP (procesamiento digital de señales) de front end del receptor y de mitigación de interferencias |
iq_sweep |
Reproducir una grabación IQ del directorio de trabajo con varios diseños de lazos de seguimiento (kshana iq sweep) |
iq_monitor |
Ejecutar los monitores de detección de interferencias y spoofing sobre una grabación IQ del directorio de trabajo (kshana iq monitor) |
iq_labfit |
Ajustar el modelo de pérdida de enganche de los lazos de seguimiento a ejecuciones de laboratorio (kshana iq labfit) a partir de un escenario iq-labfit cuyos registros están en línea (text o base64 |
iq_test_conditions |
Validar un archivo kshana.test-conditions/1 dado como texto y devolver las condiciones resueltas con su hash |
iq_campaign |
Ejecutar una campaña de reproducción en laboratorio (kshana iq campaign) |
iq_campaign_status |
El progreso de la carpeta de salida de una campaña |
Correspondencia de compliance
| Herramienta | Qué hace |
|---|---|
compliance_report |
La correspondencia con el marco público rellenada a partir de documentos de resultados dados como texto (kshana compliance-report) |
compliance_mapping |
Las tablas estáticas de correspondencia (o, con sources, los documentos fuente que citan, con versiones y URL) como Markdown, encabezadas por la misma declaración |
list_standards_packs |
Los paquetes de normas (kshana standards-pack list): conjuntos de escenarios puntuados para los perfiles de prueba del marco Resilient PNT del DHS, IMO MSC.1/Circ.1575 y ICAO Doc 9849 Apéndice F |
run_standards_pack |
Un paquete ejecutado frente a umbrales fijados antes de la ejecución: cada prueba MET, NOT MET o NEEDS INPUT; MODELLED, no califica ningún producto |
lunanet_afs_check |
La señal directa aumentada de LunaNet comprobada frente a LNIS V5 AD1 Volumen A (LSIS-AFS V1.0): los códigos frente a las tablas impresas, o un flujo de símbolos frente al formato de trama; el LDPC y el CRC-24Q de las subtramas 2 a 4 no se verifican |
create_round_trip_pack |
El paquete firmado de viaje de ida y vuelta de laboratorio: escenario, documento kshana.test-conditions/1, registro del receptor y puntuación vinculados por hash |
Benchmark
| Herramienta | Qué hace |
|---|---|
score_benchmark |
Una entrega de kshana-bench puntuada frente a un archivo de verdad de referencia, ambos en texto JSON (kshana bench score, bench/SPEC.md): el archivo de resultados con la versión de la especificación, la partición, los hashes de entrada y las métricas de la tarea. MODELLED; describe un registro o un corpus, nunca un producto. |
render_leaderboard |
Archivos de resultados de kshana-bench convertidos en la página estática de clasificación (texto HTML), cada uno validado antes. |
Ediciones#
Todo el motor es gratuito. Kshana Pro y los estudios a medida son para programas que necesitan más, y toda vía de pago empieza con un mensaje: aquí no hay precios.
| Gratis | Kshana Pro | Estudio a medida | |
|---|---|---|---|
| Qué es | todo el motor abierto, los 92 tipos de escenario, sin restricción de funciones | una capa propietaria sobre el mismo motor, bajo contrato | un estudio MODELLED de resiliencia PNT de su sistema, hecho por nosotros |
| Licencia | AGPL-3.0 (GNU Affero General Public License, versión 3), o una licencia comercial | propietario | contrato |
| Cómo empezar | instalar o abrir kshana.dev | solicitar una evaluación de Pro | solicitar un estudio |
Qué es Pro, en palabras de docs/PRO.md:
Un superconjunto estricto de Kshana abierto. Pro depende del motor abierto como biblioteca y nunca lo bifurca. Todo tipo de escenario abierto se ejecuta en Pro sin cambios, y un escenario abierto se ejecuta en Pro sin ninguna licencia.
Ninguna física nueva. Pro no añade ningún modelo físico ni cambia ninguno. Cada cifra de Pro procede de ejecuciones del motor abierto, de modo que una cifra de Pro es tan fiable como el tipo de escenario abierto del que procede, y nunca más.
Pro responde a las siguientes preguntas de un programa: qué diseño llevar al vuelo (un optimizador de diseño y su frente de Pareto), con qué seguridad se conoce la respuesta (incertidumbre y sensibilidad) y si la misión satisface sus requisitos (un dosier de misión, trazabilidad de requisitos, estudios de compromisos, una comprobación de regresión de escenarios, gemelos digitales de relojes, un dosier de estudio y un servicio en las instalaciones del cliente). También vigila una campaña de cifras y hace fallar un pipeline cuando una empeora, prueba planes de señal candidatos frente a las señales abiertas de navegación por satélite en ambos sentidos (coexistencia de espectro) y pone en cola estudios en un servicio de trabajos en las instalaciones con un registro de entrega encadenado por hash. Cada uno se describe, con lo que produce y lo que no hace, en docs/PRO.md. Nada de lo que produce Pro es una certificación, y un estudio a medida tampoco lo es.
Qué lee Kshana Pro del motor abierto, y el soporte de Ashforde® OÜ
Sobre qué se construye Kshana Pro. Cada parte de Pro funciona a partir del motor abierto y lo deja sin cambios:
- El optimizador de diseño, el estudio de incertidumbre y el dosier de misión ejecutan escenarios del motor abierto a través de la interfaz pública del motor y calculan cada cifra a partir de los resultados de las ejecuciones. Cada salida conserva el nivel VALIDATED, MODELLED o PARTNER que el motor abierto dio a cada cifra, nunca uno superior.
- Los gemelos digitales de relojes usan el modelo de reloj del motor abierto y su estimador de desviación de Allan: un gemelo se calibra con el presupuesto de Allan publicado del dispositivo y después se comprueba estimando la desviación de Allan del gemelo con el estimador abierto.
- Los estudios de compromisos ejecutan cada opción de arquitectura como un escenario del motor abierto, sin cambios, y clasifican las opciones según una figura de mérito leída del resultado de cada ejecución.
- La vigilancia de campañas lee sus cifras de los resultados de ejecuciones del motor abierto de los escenarios de un paquete y las compara con la ejecución anterior que pasó.
- La coexistencia de espectro lee cada cifra física de ejecuciones del motor abierto de los tipos de escenario
leo-signalyconstellation-design, y añade solo la suma sobre los satélites a la vista y la clasificación de los planes. - El servicio de trabajos en las instalaciones ejecuta escenarios abiertos y de Pro con el mismo motor y almacena cada resultado tal como lo devolvió la ejecución.
- Los paquetes de evidencias registran, para cada ejecución, el hash del escenario que el motor abierto estampa en su resultado, de modo que una cifra de un paquete pueda reproducirse volviendo a ejecutar su escenario.
- Herramientas de ingeniería de sistemas y de programa. Las herramientas de ingeniería de sistemas basada en modelos (MBSE) y de programa de Kshana Pro comprueban los requisitos de un programa frente a ejecuciones del motor abierto: importan requisitos como valores separados por comas (CSV), o como un subconjunto documentado del Requirements Interchange Format (ReqIF) o del texto de Systems Modeling Language versión 2 (SysML v2), evalúan cada criterio de aceptación, con su unidad, frente a los valores que escribió una ejecución, y producen una matriz de referencia cruzada de verificación (VCRM), un modelo SysML v2, un informe de impacto de cambios y un paquete de evidencias sin conexión. No vuelven a ejecutar ni recalculan nada, y leen solo lo que publica el motor abierto: el
result.jsonde cada ejecución (los campos que nombra un criterio, sus unidades, el sello de reproducibilidad con hash del escenario, semilla, versión del motor y versión del esquema, y la etiqueta y los niveles de las cifras de la ejecución), sureport.json(tipo de escenario, registro de reproducibilidad y etiquetas de capacidad), el archivo de escenario (su hash, tipo de escenario, semilla y parámetros), el esquema de unidades de campo (la unidad, la procedencia y el nivel de evidencia de cada campo) y la matriz de verificación (la etiqueta VALIDATED, MODELLED o PARTNER de cada capacidad).
Soporte y servicios profesionales#
Kshana es gratuito y de código abierto bajo la AGPL-3.0 y está desarrollado y mantenido profesionalmente por Ashforde® OÜ (Estonia). El motor abierto está completo y es utilizable por sí solo. Para las organizaciones que necesitan más, Ashforde® OÜ ofrece:
- Soporte comercial e integración — incorporar Kshana a su cadena de herramientas, escenarios a medida y correcciones prioritarias.
- Modelos de sensores a medida — calibrados para su hardware, incluidos modelos de resiliencia sujetos a control de exportación mantenidos en una capa privada.
- Kshana Pro — herramientas propietarias de ingeniería de sistemas basada en modelos (MBSE) y de programa que comprueban los requisitos de un programa frente a ejecuciones del motor abierto y producen una matriz de referencia cruzada de verificación (VCRM), un modelo de Systems Modeling Language versión 2 (SysML v2), un informe de impacto de cambios y un paquete de evidencias sin conexión. No vuelven a ejecutar nada y leen solo las salidas publicadas del motor: el
result.jsony elreport.jsonde cada ejecución, el archivo de escenario, el esquema de unidades de campo y las etiquetas de la matriz de verificación (la lista completa está en Ediciones). - Herramientas de diseño, incertidumbre y misión de Kshana Pro — el frente de Pareto de un espacio de diseño, incertidumbre y sensibilidad sobre miles de ejecuciones, y un dosier de misión con un solo comando, con una matriz de verificación y un PDF; véase
docs/PRO.md. - Vigilancia de campañas, coexistencia de espectro y servicio de trabajos de Kshana Pro — un pipeline que falla cuando empeora una cifra vigilada, planes de señal probados frente a las señales abiertas de navegación por satélite en ambos sentidos, y una cola de trabajos en las instalaciones con un registro de entrega encadenado por hash; véase
docs/PRO.md. - Formación y consultoría sobre análisis del desempeño de PNT cuántico/clásico.
Este es el modelo open-core: el motor tiene, y seguirá teniendo, una licencia abierta; el negocio que lo sostiene es la experiencia, el soporte y las extensiones propietarias, no las cuotas de licencia. Contacto: contact@ashforde.org · ashforde.org.
Investigación#
Los estudios construidos sobre el motor abierto se publican en arXiv. Cada uno nombra el comando del motor que hay detrás, de modo que sus cifras pueden regenerarse a partir de un escenario o ejemplo de estudio confirmado en el repositorio.
| Artículo | Qué muestra | Comando del motor |
|---|---|---|
| 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 caída de la puntuación de un detector de interferencias GNSS cuando cambian las condiciones puede predecirse solo a partir de estadísticos dentro de la distribución, en un banco de pruebas sintético abierto y después en grabaciones de campo abiertas. | 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 receptor de temporización GNSS bajo spoofing no tiene ninguna cota incondicional finita del error de tiempo no detectado, por lo que el artículo da una cota condicional, calibrada sobre un spoofing real emitido por aire y registrado de la campaña pública 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 |
Una única puntuación compuesta de resiliencia es una base estable para una decisión solo cuando un diseño domina; cuando los diseños compiten, basta con reponderar para cambiar al ganador. | 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 medición de distancia dentro de una constelación lunar deja inobservable la posición absoluta de una estación en superficie; un retardo de interferometría de base muy larga (VLBI) desde la Tierra la restablece cuando la constelación es escasa y la afina cuando es rica. | el tipo de escenario 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 |
Las constelaciones previstas de cuatro a seis satélites dan una geometría deficiente en el polo sur lunar, y unas pocas balizas de medición de distancia en superficie la corrigen con mucho menos coste que más satélites. | el tipo de escenario 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 dilución de la precisión no está definida para el seguimiento cislunar solo por distancia, porque la velocidad es inobservable en una instantánea, así que el artículo usa el gramiano de observabilidad sobre cuatro órbitas retrógradas distantes planas: solo con distancia el rango es 2 de 4 en una instantánea y se necesita un arco de unas 2,09 h para que sea totalmente observable, con un condicionamiento que mejora a medida que el arco se alarga; la velocidad de alcance (Doppler) da rango 4 al instante; y estimar conjuntamente una estación con los estados de los satélites y los relojes sigue siendo deficiente de rango en uno salvo que se añada un observable interferométrico externo. Los requisitos corresponden a presupuestos de longitud de arco, condicionamiento y tipo de medición, no de DOP. | el tipo de escenario cislunar-observability: kshana scenarios/cislunar-observability.toml (su hermano cislunar-arc-recovery prueba el umbral con un estimador independiente por diferencias finitas) |
Los tres ejemplos de estudio escriben artefactos deterministas byte a byte (semillas fijas) que registran la versión del motor, las semillas y un hash de configuración. Los tres artículos lunares y cislunares se construyen sobre la suite lunar (el nivel de evidencia de cada pieza figura en la matriz de verificación); sus afirmaciones de geometría y de dilución de la precisión también se contrastan con referencias independientes distintas en tests/validate_p*.rs. Más en Artefactos de estudio reproducibles en Referencia.
Citar#
Si usa Kshana en un trabajo académico o técnico, cite la versión que utilizó, con el escenario y la semilla. CITATION.cff contiene los metadatos legibles por máquina, y GitHub muestra a partir de ellos un botón "Cite this repository". Cada versión se archiva en Zenodo; el DOI (Digital Object Identifier) de concepto 10.5281/zenodo.20528627 siempre resuelve a la última versión.
Baweja, C. (2026). Kshana — a PNT-resilience simulator with quantum-sensor performance models. Ashforde OÜ. https://doi.org/10.5281/zenodo.20528627
Los artículos anteriores:
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
Licencia#
Kshana tiene doble licencia: la AGPL-3.0-only de GNU (LICENSE), o una licencia comercial de Ashforde® OÜ para integraciones cerradas a las que la AGPL no se adapta. LICENSING.md explica cuál se aplica. Las contribuciones se licencian de entrada bajo la AGPL y además conceden a Ashforde® OÜ el derecho a incluirlas en la edición comercial; firme cada commit con git commit -s (véase CONTRIBUTING.md). "Kshana" y sus marcas son marcas registradas de Ashforde® OÜ: la licencia cubre el código, no el nombre, así que cambie el nombre de las bifurcaciones.
Referencia#
El material extenso, plegado. Todos los documentos figuran en Documentación.
Instalar y compilar desde el código fuente
Instalar y compilar#
Requiere una cadena de herramientas de Rust (≥ 1,88, la rust-version de Cargo.toml; desarrollado con 1,93).
git clone https://github.com/ashfordeOU/kshana
cd kshana
cargo build --release
cargo test # all tests pass
Uso: la línea de comandos al completo
Uso#
Ejecute cualquier escenario; la CLI despacha según el campo kind del escenario y escribe <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html y <scenario>.report.json junto a él — además de <scenario>.table.csv para los tipos de escenario que publican una tabla. El informe (una página de HyperText Markup Language (HTML) y un documento JSON con el mismo contenido) incluye un resumen ejecutivo, cada entrada con su unidad, los resultados y los gráficos, las tablas de barrido, Monte Carlo o encadenamiento de una campaña, una cronología de eventos, la etiqueta VALIDATED / MODELLED / PARTNER y la fuente de cada capacidad que usó la ejecución, lo que no está modelado y un registro de reproducibilidad (versión del motor, resúmenes Secure Hash Algorithm de 256 bits (SHA-256), semilla, plataforma y el comando exacto). Se imprime como un archivo PDF (Portable Document Format) limpio desde el navegador en papel A4 o Letter; el motor no escribe ningún PDF por sí mismo. Véase 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> escribe junto al escenario grabaciones CZML (el Cesium Language), KML (Keyhole Markup Language), GeoJSON (Request for Comments 7946), efemérides .e de Ansys STK (Systems Tool Kit) y SigMF (Signal Metadata Format), y --import-route <route.geojson> introduce una línea GeoJSON en los tipos de escenario que vuelan una trayectoria. Cada formato se valida frente a su especificación publicada, y un escenario al que no se aplica un formato explica el motivo: véase docs/INTEROP.md.
Otros modos de la CLI — comprobar un escenario con lint, introducir datos reales de orientación de la Tierra o ejecutar una suite completa:
# 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
Exportación de animaciones. --animate svg|html|frames|all escribe <scenario>.animation.svg (fotogramas clave de Cascading Style Sheets (CSS), sin script), <scenario>.animation.html (reproducir, pausar, desplazar, velocidad y paneles sincronizados, sin ningún recurso externo) y <scenario>.frames/ (frame_0000.svg, … más manifest.json con los fotogramas por segundo y la duración). Una campaña reproduce sus fases y alarmas, una ejecución de espectro su cascada; el tema sigue prefers-color-scheme y prefers-reduced-motion muestra la imagen final. Representa las propias muestras de la ejecución, idénticas byte a byte al repetirla, y no añade evidencias. Véase docs/ANIMATION.md.
Un manifiesto de suite es un pequeño archivo TOML (Tom's Obvious, Minimal Language) — un title y una matriz scenarios = [ … ] de rutas de escenarios — que el motor ejecuta por turnos, integrando cada resultado (con sus etiquetas MODELLED / VALIDATED) en un artefacto de estudio autodescriptivo. Véase scenarios/quantum-pnt-demonstrator.suite.toml.
Papel en la interoperabilidad. Kshana es la capa de simulación de desempeño que se sitúa junto a la cadena de posprocesamiento, no un sustituto de ella: introduzca su salida RINEX en RTKLIB o gLAB para obtener una solución de posición y use su salida SP3 como producto de órbita precisa para herramientas como Ginan — Kshana responde a qué resiliencia aporta una arquitectura PNT dada antes de tener señales reales, en formatos que esas herramientas ya ingieren (--export-sp3, o export_sp3 = true en un escenario orbit, escribe <scenario>.sp3). La misma órbita puede publicarse como elementos medios CCSDS OMM de la vía de normalización (--export-omm, o export_omm = true, escribe <scenario>.omm) — un mensaje OMM 502,0 KVN (notación palabra clave = valor) por satélite definido por TLE, con el número de catálogo NORAD (North American Aerospace Defense Command), el designador internacional COSPAR (Committee on Space Research) y la época reales de cada objeto, para cualquier consumidor que entienda OMM en lugar de un conjunto de elementos de dos líneas a medida.
Salida de ejemplo (holdover del reloj — observe cómo se informan las figuras de mérito de integridad y de seguridad):
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
El error de temporización del percentil 95 (p95) del reloj óptico es de 1.20e-4 ns: el resumen imprime los valores pequeños con cifras significativas en lugar de redondearlos a 0.0. security muestra n/a (no attack) porque este escenario no configura ningún ataque, de modo que no hay nada que detectar. El resultado JSON sigue incluyendo la cota analítica de detectabilidad de spoofing de cada reloj en fom.security (0,997 para el reloj óptico, 0,000 para el reloj atómico de escala de chip, cuyo propio ruido durante la ventana de monitorización supera la especificación de 20 ns), y su bloque figure_tiers marca esa cifra como applicable: false. El tipo de escenario spoof puntúa la detección frente a un ataque inyectado. figure_tiers también da a cada cifra informada su nivel de verificación — VALIDATED (contrastada con una referencia independiente externa) o MODELLED — y la fila de la matriz de verificación de la que se lee el nivel. El escenario de órbita informa además un bloque de geometría — fracción de muestras con solución de posición y mejor/mediana dilución de la precisión de posición (PDOP) y exactitud de posición — junto al resultado del reloj.
Lea estas dos cifras con atención.
securityes una cota analítica de detectabilidad de spoofing derivada de la estabilidad de cada reloj — solo tiene sentido frente a un escenario de spoofing configurado y no es un detector RAIM multisatélite.integrityaquí es la autoconsistencia del filtro (fracción de muestras de la interrupción dentro de su propia cota de k sigmas), no una cifra de integridad HPL/VPL de aviación. Véasedocs/INTEGRITY.md.Para una integridad autónoma del receptor genuina, el tipo de escenario
integrity(scenarios/integrity-raim.toml) ejecuta RAIM real instantáneo y de separación de soluciones (estilo ARAIM) sobre la geometría de la constelación propagada: calcula los niveles de protección (HPL/VPL) horizontal/vertical por época e informa de la fracción de épocas que satisfacen los límites de alerta configurados, con un diagrama de integridad de Stanford para la clasificación de error frente a PL (nivel de protección).
Artefactos de estudio reproducibles
Cuatro estudios abiertos regeneran cada uno un artefacto determinista byte a byte (semilla fija) con un solo comando — las cifras que hay detrás del cruce cuántico frente a clásico, la brecha de optimismo ante degradaciones de RF, la puntuación de resiliencia PNT y los estudios del nivel de protección de temporización:
# 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
Cada artefacto registra la versión del motor, las semillas y un hash de configuración, y lleva una etiqueta honesta MODELLED/VALIDATED. Las sondas de datos reales (*_probe) ejecutan el mismo pipeline sobre grabaciones que usted suministra localmente; en el repositorio no se incluye ningún conjunto de datos. El estudio de la brecha de optimismo ante degradaciones de RF se describe en el preprint arXiv:2606,22054, y el nivel de protección de temporización condicional (tpl_jammertest arriba) en el preprint arXiv:2606,24210 (véase Citar).
Los estudios publicados de PNT lunar (arXiv:2607,06212 DOP con balizas en superficie, arXiv:2607,02566 observabilidad con VLBI y arXiv:2610,23871 observabilidad cislunar por longitud de arco) tienen sus afirmaciones de geometría, dilución de la precisión, predicción de marcos en tiempo real / parámetros de orientación de la Tierra (EOP), órbita retrógrada distante y medición de distancia por RF contrastadas de forma independiente en tests/validate_p*.rs con referencias independientes distintas (scipy.special.j1, una resolución independiente de DOP con (HᵀH)⁻¹ de NumPy, un nuevo análisis con NumPy de las mismas filas finals2000A del IERS y la Three-Body Periodic Orbit Database de NASA/JPL). Son comprobaciones de regresión adicionales sobre la suite lunar modelada; no cambian el recuento de la matriz comprobada por máquina.
Formato de escenario
Formato de escenario#
Los escenarios son TOML declarativo. Un campo kind de nivel superior selecciona el paquete — cincuenta en total (clock es el predeterminado si se omite): 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 (banco de pruebas de evaluación de detección de degradaciones de RF con aprendizaje automático — corpus sintético etiquetado + arnés de ROC/AUC independiente del detector + brecha de optimismo dentro/fuera de la distribución), quantum-trade (compromiso PNT cuántico frente a clásico con ingesta de ADEV medido + envolvente de resiliencia sin GNSS; MODELLED), space-weather (índices solares/geomagnéticos + temperatura exosférica de Jacchia-71 + densidad termosférica impulsada por la actividad sobre la atmósfera estática; MODELLED), oem-interop (puente de importación/viaje de ida y vuelta de CCSDS OEM para efemérides de GMAT/Orekit/STK; MODELLED), el trío de análisis de misión launch-window (acimut de lanzamiento de dos cuerpos / cambio de plano / oportunidades), reentry (corredor de reentrada balística de Allen-Eggers), eo-coverage (geometría de franja / GSD / acceso / revisita de observación de la Tierra), space-packet (encapsulado de paquetes espaciales TM/TC — telemetría/telecomando — CCSDS 133,0 — disposición exacta de bits, verificada en viaje de ida y vuelta) y attitude-budget (par de gradiente de gravedad en 3-DOF + presupuesto de error de apuntamiento RSS), passes (predicción de pasos de salida/puesta sobre estación terrestre — AOS/TCA/LOS, elevación máxima, acceso) y link-budget (ecuación de enlace unidireccional CCSDS/DSN — FSPL / Eb·N₀ / margen / cierre); telecom-timing (error de tiempo en holdover, MTIE y TDEV contrastados con las máscaras de ITU-T); spectrum (toda la banda L del GNSS como una sola densidad espectral de potencia: una cascada de frecuencia por tiempo bajo una cronología guionizada de interferidor de onda continua, banda estrecha, chirp o ruido adaptado, relación interferencia-señal por banda y densidad de ruido a portadora efectiva a partir del coeficiente de separación espectral, y entrada y salida de grabaciones Signal Metadata Format (SigMF) con estimaciones espectrales de Welch; los espectros de señal VALIDATED frente a valores de manual, el escenario de interferidor MODELLED; véase docs/SPECTRUM.md; el mismo tipo de escenario dibuja paneles de banda UHF, S y C con señales diseñadas de órbita terrestre baja); leo-signal (diseños de señales de posicionamiento, navegación y temporización de órbita terrestre baja para cualquier sistema: espectros de banda limitada, fluctuación del seguimiento de código y exactitud de medición de distancia, búsqueda y tiempo de adquisición, separación espectral frente a GPS y Galileo, tolerancia al interferidor y un compromiso de banda UHF a C, a partir de preajustes públicos como Xona Pulsar, Iridium, Starlink y CentiSpace o de diseños en línea; las formas cerradas y el Doppler LEO VALIDATED, los diseños MODELLED; véase docs/LEO-SIGNAL.md); solar-system (el Sol, los planetas, Plutón, la Luna y siete lunas principales en una época — posiciones, constantes, tiempos de luz y trayectorias orbitales; posiciones de los planetas VALIDATED frente a JPL Horizons) y body-pnt (posicionamiento alrededor de cualquiera de esos cuerpos con una constelación de navegación local y un enlace de espacio profundo desde la Tierra; MODELLED); campaign (tipos de escenario existentes compuestos en una cronología de misión encadenada con el estado traspasado entre fases, un barrido de parámetros, un conjunto de Monte Carlo con semilla o varios escenarios bajo una condición compartida; MODELLED, véase docs/CAMPAIGNS.md); constellation-design (patrones Walker delta y estrella, listas de elementos y diseños multicapa con preajustes de GPS, Galileo, BeiDou y GLONASS, y cobertura y dilución de la precisión sobre una malla de latitud/longitud; el generador y el DOP global de GPS VALIDATED frente a los documentos de servicio publicados, véase docs/CONSTELLATION-DESIGN.md); leo-pass (un paso de satélite de posicionamiento, navegación y temporización (PNT) de órbita terrestre baja (LEO) y su presupuesto de enlace banda por banda, para cualquier constelación y cualquier diseño de señal: ángulos de visión, Doppler y tasa de Doppler, pérdidas de ITU-R por lluvia, gases, centelleo y penetración en edificios, densidad de ruido a portadora frente a los satélites GNSS MEO a la vista, la ionosfera de primer orden y los pares libres de ionosfera, y un presupuesto de solución de posición de baja energía, sondeo de la ionosfera con cada par de bandas, y monitores de spoofing por consistencia de Doppler y geometría del paso y por consistencia entre bandas; los términos de ITU-R y la envolvente Doppler de usuario estático VALIDATED, el paso MODELLED, véase docs/LEO-PASS.md); leo-navmsg (el mensaje de efemérides y reloj de difusión de un satélite PNT de órbita terrestre baja (LEO), para cualquier órbita y portadora: un ajustador desde una órbita de verdad integrada hasta el conjunto kepleriano de Galileo, ese conjunto con polinomios de corrección along-track, cross-track y radial, el modelo de 22 parámetros de Liu et al. 2025 o el polinomio ECEF de reloj cero ATOMIC; error de alcance de la señal en el espacio (SISRE) frente al intervalo de ajuste y al período de actualización, una comprobación de continuidad de actualización a mitad de paso, la propia trama binaria documentada de Kshana con una comprobación de redundancia cíclica CRC-24Q y un presupuesto de cuantización, y un bloque de estilo RINEX-4 etiquetado como extensión de Kshana; los pesos de SISRE, el algoritmo de usuario de Galileo y el CRC-24Q VALIDATED, los ajustes MODELLED; preajustes opcionales para Xona Pulsar, Iridium, Starlink, CentiSpace, un sistema representativo en banda C, ATOMIC y Celeste IOD; véase docs/LEO-NAVMSG.md); el trío de PNT fusionado MEO + LEO leo-pvt (posicionamiento Doppler a partir de la velocidad de alcance de órbita terrestre baja (LEO), soluciones conjuntas de pseudodistancia GNSS + LEO con sesgos entre sistemas y el DOP en función del número de satélites LEO, cobertura polar y ártica y transferencia de tiempo LEO a UTC — sobre cualquier constelación, con preajustes opcionales como las señales de oportunidad de Xona Pulsar, Iridium y Starlink; la envolvente Doppler LEO VALIDATED frente a las cifras publicadas de Iridium y Xona), leo-ppp (convergencia del posicionamiento preciso de punto solo con GNSS y con aumentación LEO, comparada con Li et al. 2019) y ntn-positioning (posicionamiento 5G de red no terrestre a partir de la cota de Cramér-Rao del ancho de banda de la señal), MODELLED salvo esa envolvente, véase docs/LEO-PNT-FUSION.md; leo-pnt-chain (un sistema LEO-PNT de extremo a extremo: un diseño leo-signal transportado por una banda leo-pass, el C/N0 del paso y el error de alcance de la señal en el espacio del mensaje de navegación entregados a una solución fusionada leo-pvt y a la convergencia de leo-ppp, con cada traspaso enumerado; MODELLED, véase docs/LEO-PNT.md, que es también la visión general de todos los tipos de escenario y escenarios LEO-PNT, incluidas las campañas de resiliencia, un escenario por área de enfoque experimental y uno por sector de usuario final); la suite de PNT lunar lunar-vlbi, lunar-joint-od-clock, lunar-frame-realisation, moonlight-service-volume, lunar-differential-pnt, lunar-interop-export; el demostrador de PNT con tecnología cuántica quantum-time-transfer, quantum-gnss-free-nav, quantum-anomaly-detect; y los tipos de escenario de investigación de seguridad de señal, cislunar y resiliencia por capas lunar-attack-surface, realtime-frame-eop, lunar-time-budget, hybrid-optical-rf, cislunar-observability, conflict-resilience — el trío de análisis de misión y estos tipos posteriores, todos MODELLED (cada uno con un núcleo de forma cerrada validado; véase la matriz). Campos comunes: seed, una malla [time], una cronología de disponibilidad [gnss] (el factor de las interrupciones) y bloques por sensor con cadenas provenance que citan la fuente de cada cifra. Ejemplo (reloj):
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
Campos opcionales (desactivados si faltan): un reloj puede añadir flicker_floor (suelo de Allan de FM — modulación de frecuencia — 1/f); un sensor inercial puede añadir gyro_bias y q_arw (sesgo del giróscopo y paseo aleatorio angular), y bias_instability y q_aa (el suelo de inestabilidad del sesgo de Allan y el paseo aleatorio de aceleración) — en conjunto un presupuesto de error de acelerómetro de un solo eje (1-DOF) (VRW/ARW — paseo aleatorio de velocidad/angular — e inestabilidad del sesgo). Este es el presupuesto de error que ejecuta el paquete de escenarios inertial incluido. Por separado, la biblioteca incorpora ahora un navegador strapdown de 3 ejes verificado (src/inertial/{attitude,mechanization,imu_errors}.rs): actitud por cuaterniones con compensación de coning/sculling, una mecanización NED completa (términos de velocidad de rotación terrestre y de transporte, gravedad de Somigliana de WGS-84) y un modelo determinista de error de IMU en el que se modelan el factor de escala, la desalineación, la sensibilidad a g, la cuantización y la rampa de velocidad (IEEE Std 952-1997, el estándar del IEEE de especificación y procedimiento de prueba de giróscopos, §A.2; Groves 2013 §4,3). Esa vía de 3 ejes está ahora conectada a un paquete GNSS/INS ejecutable de acoplamiento débil (kind = "gnss-ins"): un EKF de estado de error de 15 estados disciplina la solución strapdown frente a posiciones ruidosas mientras el GNSS está disponible y después sigue por inercia durante la interrupción, e informa del error horizontal fusionado frente a la deriva INS libre en lazo abierto. También hay disponible una actualización de pseudodistancia de acoplamiento fuerte (forma la innovación en el dominio de la distancia, por lo que sigue corrigiendo con menos de cuatro satélites). Un escenario de holdover del reloj puede añadir runs (> 1) para ejecutar un conjunto de Monte Carlo — cada figura de mérito se informa entonces como una media con una dispersión de los percentiles 5 a 95 y el gráfico sombrea la banda de confianza del error (véase scenarios/clock-ensemble.toml).
Un escenario fusion (mismos bloques que hybrid) ejecuta dos estimadores de Kalman independientes — uno para el estado del reloj y otro para el estado de posición — disciplinados por el GNSS y asistidos por transferencia óptica de tiempo, e informa de una FoM combinada de holdover. Los dos bloques no comparten covarianza cruzada: es un par apilado de presupuestos de error, no un verdadero filtro conjunto acoplado de reloj+posición (la covarianza entre bloques es un elemento de la hoja de ruta). Véase scenarios/fusion-pnt.toml.
Un escenario spoof inyecta un spoofing de tiempo — uno de los cuatro tipos de [attack.shape] (linear_ramp, step_jump, meaconing, replay; un rate_ns_per_s a secas se sigue aceptando como rampa lineal) — y ejecuta el detector de spoofing de cada reloj. El detector es una prueba de energía χ²₁ / de Neyman–Pearson bilateral sobre el estadístico de monitorización asistido por reloj: el umbral se fija a partir de un presupuesto objetivo de falsa alarma target_pfa, y la probabilidad de detección fallida P_md se informa tanto en forma cerrada como por Monte Carlo (mc_runs ensayos por hipótesis — ambas coinciden con una diferencia de unos pocos ×1/√N). La figura de mérito de seguridad es 1 − P_md en la magnitud operativamente dañina (la de la especificación), de modo que un reloj silencioso que detecta un spoofing del tamaño de la especificación puntúa ≈ 1 y uno ruidoso que a menudo lo pasa por alto puntúa menos (véanse scenarios/spoof-attack.toml, scenarios/spoof-meaconing.toml).
Un escenario gnss-sim es una simulación en el dominio de la medida: para cada satélite visible sintetiza la pseudodistancia ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath y el Doppler en L1, con la ionosfera monofrecuencia de Klobuchar ([iono], IS-GPS-200 §20.3.3.5.2.5) y la troposfera cenital de Saastamoinen proyectada con la función de mapeo de Niell (1996) ([tropo]). Los residuos alimentan el RAIM instantáneo para obtener HPL/VPL por época, y la pseudodistancia, el Doppler, el C/N₀ y las correcciones iono/tropo de cada satélite se emiten en la matriz gnss_measurements del JSON. Es un simulador directo (genera mediciones a partir de una verdad conocida), no un receptor/solucionador — una ejecución sin ruido reproduce la geometría más las correcciones con precisión submilimétrica (véase scenarios/gnss-sim-raim.toml).
Un escenario jamming modela la interferencia de RF como un presupuesto de enlace: un [jammer] (posición ECEF, power_dbw de transmisión, tipo) eleva la relación interferencia-señal en un [receiver] que observa una [constellation] Walker. A partir de la geometría (pérdida en el espacio libre y ganancia de la antena receptora por dirección) calcula el J/S de cada satélite, la C/N₀ efectiva mediante la ecuación estándar antiinterferencia (ganancia de procesamiento por desensanchamiento × el factor de separación espectral Q; Kaplan & Hegarty §9,4) y señala la pérdida de enganche por debajo de un umbral de seguimiento configurable — informando de una figura de mérito availability_under_jamming. Un interferidor de banda ancha de 10 W a 1 km niega por completo el receptor (J/S ≈ 72 dB); el mismo interferidor a 100 km solo degrada los enlaces (véase scenarios/jamming-demo.toml).
Un escenario sweep ejecuta un estudio de compromisos: varía un parameter (threshold_ns, duration_s, quantum_q_wf o classical_q_wf) desde start hasta stop en steps puntos con una scale lin o log, registra una metric (p. ej., holdover_s) para ambos relojes y representa las dos curvas. El escenario base va bajo [base] (véase scenarios/sweep-clock-stability.toml).
Un escenario sweep-nd generaliza esto a cualquier paquete y cualquier número de ejes: varía claves TOML con puntos de un escenario [base] (de cualquier kind) sobre el producto cartesiano de [[axes]], vuelve a ejecutar cada nodo de la malla y registra metrics dadas como rutas JSON con puntos dentro del resultado (p. ej., classical.fom.holdover_s). Funciona con todos los paquetes porque opera en el límite TOML/resultado; las ejecuciones nativas evalúan la malla en paralelo (sin dependencias adicionales; wasm recurre a la ejecución secuencial) y la salida es determinista y de orden por filas (véase scenarios/sweep-nd-inertial.toml).
Un escenario orbit deriva la cronología [gnss] de la geometría en lugar de definirla a mano — indique una órbita [user], una [constellation], una mask_deg de elevación y los dos bloques de reloj. También informa de la exactitud de posición a partir de la geometría de los satélites; el sigma_uere_m opcional (error de alcance equivalente del usuario a 1 sigma, 1 m por defecto) escala la dilución de la precisión de posición hasta un sigma de posición. La órbita del usuario puede hacerse excéntrica con eccentricity y argp_deg, y j2 = true añade la deriva secular por achatamiento terrestre (véase scenarios/orbit-molniya.toml). La constelación puede ser en cambio una real: dé a [constellation] un bloque tle de conjuntos de elementos de dos líneas y los satélites se leen de él (véase scenarios/orbit-real-tle.toml). Añada uno o más bloques [[constellations]] para multi-GNSS (p. ej., GPS + Galileo; véase 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
Los tipos de escenario de PNT alternativo sin GPS navegan sin ningún GNSS, haciendo coincidir una secuencia de campo medida con un mapa mediante un filtro de partículas. Un escenario gravity-map vuela una trayectoria a través de un campo de anomalías de gravedad en armónicos esféricos y la recupera a partir de la lectura de un gravímetro de átomos fríos (scenarios/gps-denied-gravity-nav.toml); un escenario terrain-nav hace lo mismo con un DEM de elevación SRTM (TERCOM/SITAN, scenarios/terrain-nav.toml); y un escenario combined-altpnt fusiona gravedad + magnetismo IGRF + terreno en un solo filtro (scenarios/combined-altpnt.toml).
Un escenario lunar-integrity evalúa el PNT cislunar: ejecuta un paso de nivel de protección ARAIM en el polo sur lunar frente a un conjunto de relés LunaNet/LNIS e informa con honestidad de la brecha de integridad — un σ_URE lunar de ~30 m lleva el nivel de protección muy por encima de un límite de alerta de 50 m, de modo que el servicio no está disponible bajo reglas de integridad de estilo aeronáutico (scenarios/lunanet-araim.toml).
Un escenario lunar-time-offset informa de la tasa relativista del reloj Tierra–Luna — la base de una escala de Tiempo Coordenado Lunar (LTC/TCL). Una identidad postnewtoniana de primeros principios suma la diferencia de potencial propio (potencial del geoide de la IAU L_G menos el potencial propio de la superficie de la Luna) y el término cinético de la Luna (efecto Doppler de segundo orden) hasta una tasa secular de ≈ 57 µs/día, informada con la banda publicada de 56–59 µs/día; también da el desfase LTC−TT acumulado a lo largo de un horizonte y un conjunto por varianza inversa (un reloj de papel lunar). MODELLED — la cifra principal depende de la referencia (geoide terrestre frente a selenoide lunar, ventana de promediado), por lo que se informa una banda y no un único número certificado (scenarios/lunar-time-offset.toml).
Consulte scenarios/ para ver al menos un ejemplo práctico de cada tipo de escenario (92 tipos de escenario, 193 archivos de escenario .toml + 1 manifiesto de conjunto; varios tipos de escenario incluyen más de un ejemplo). No todos los tipos de escenario tienen un archivo con su nombre: lunar-integrity → scenarios/lunanet-araim.toml y gravity-map → scenarios/gps-denied-gravity-nav.toml son dos de varios casos así. Puede enumerar en cualquier momento los tipos de escenario despachables con los errores de cargo run -- --validate <file>, con list_kinds() en Python o con la herramienta list_scenario_kinds de MCP.
Salida
Salida#
El artefacto de resultado es un JSON versionado y autodescriptivo: series temporales por paso, las figuras de mérito puntuadas, las especificaciones de modelo activas (con su procedencia), la semilla, un hash del escenario — de modo que cualquier gráfico puede reproducirse a partir del archivo — y, para cada reloj, una adev_curve ([{tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi}]): la desviación de Allan solapada a lo largo de tiempos de promediado espaciados por octavas — la forma estándar de leer la estabilidad de un reloj — ahora con una banda de confianza del 95 % específica del tipo de ruido por punto (el tipo de ley de potencias del registro se identifica a partir de su pendiente de Allan modificada, y el intervalo χ² usa los grados de libertad efectivos correspondientes de NIST SP 1065). El playground del navegador la representa como un gráfico log-log de "Estabilidad del reloj (ADEV)". (MDEV, TDEV y HDEV están disponibles como estimadores de la biblioteca; la curva exportada del resultado es la ADEV solapada.) Cada campo, con sus unidades y una referencia a la fuente, está documentado en docs/SCHEMA.md.
Cada gráfico es autodescriptivo. El playground del navegador, la exportación *.chart.svg de la CLI y el cuadro de mando HTML (HyperText Markup Language) estampan en cada imagen de gráfico un pie con el texto Kshana v<version> · scenario <hash> · kshana.dev. El scenario <hash> son los primeros 12 caracteres hexadecimales del hash del escenario de la ejecución — un resumen SHA-256 (Secure Hash Algorithm de 256 bits) sobre la definición canónica del escenario (semilla, umbrales, parámetros del modelo, ventanas GNSS, …); los informes de integridad y lunares, que no llevan hash propio, recurren a un SHA-256 del código fuente del escenario. Es la misma huella que se muestra en el resumen de una línea y en el JSON del resultado, de modo que un gráfico guardado o pegado siempre lleva su versión, el escenario exacto que lo produjo (para reproducirlo bit a bit) y la fuente — si cambia cualquier entrada, cambia el hash.
Las figuras de mérito siguen las figuras de mérito operativas estándar de PNT:
| Figura de mérito | Cómo la calcula Kshana |
|---|---|
| Desempeño de temporización (paquetes de reloj/órbita) | RMS del error de fase del reloj + percentil 95 durante la interrupción, en nanosegundos (timing_rms_ns) — una métrica de temporización, no de posición |
| Desempeño de posicionamiento (paquetes inerciales/híbridos) | RMS del error de posición en 1-DOF + percentil 95 durante la interrupción, en metros (pos_rms_m); de un solo eje. Una ejecución única se marca como monte_carlo: false; establezca runs = N para un conjunto de Monte Carlo que informa, de cada métrica, la media, la dispersión y un IC (intervalo de confianza) del 95 % por bootstrap. Todavía no es un CEP/2DRMS en 2-D (error circular probable / dos veces la raíz de la distancia cuadrática media) ni una exactitud ponderada por DOP (eso requiere el modelo de 3 ejes — hoja de ruta) |
| Autonomía | duración del holdover — tiempo dentro de la especificación tras perder el GNSS (cuantizado por la malla: una cota inferior) |
| Resiliencia | pendiente de crecimiento del error durante la interrupción |
| Disponibilidad | fracción de la ejecución con una solución dentro de la especificación |
| Integridad | autoconsistencia del filtro — fracción de muestras de la interrupción cuyo error permanece dentro de la propia cota de k sigmas del filtro de Kalman. No es una cifra de integridad HPL/VPL/RAIM de aviación (véase docs/INTEGRITY.md) |
| Seguridad | cota analítica de detectabilidad de spoofing a partir de la estabilidad del reloj — cuán pequeño/lento puede ser un spoofing de tiempo que un monitor de consistencia de un solo reloj podría señalar. Solo tiene sentido con un ataque configurado; no es un detector RAIM multisatélite |
¿Nuevo con estos términos? Cada uno se define en lenguaje llano en el glosario.
Estructura del repositorio
Estructura del repositorio#
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
Preguntas frecuentes
FAQ#
¿Necesito entender la física cuántica para usar esto? No. Si puede ejecutar una línea de comandos, puede ejecutar Kshana. Empiece por la introducción en lenguaje llano; consulte los términos en el glosario.
¿Es un diseño de hardware cuántico o software de vuelo? No. Es un simulador de desempeño. La fidelidad del hardware cuántico procede de modelos de error publicados, no de esta herramienta. Véase Qué es y qué no es.
¿Los resultados cuánticos son realistas o marketing? Cada parámetro se cita a una hoja de datos o un artículo, cada modelo está validado frente a una relación de manual y la madurez se etiqueta con honestidad en VALIDATION.md — incluido que ningún reloj óptico de estroncio ha volado. El motor es neutral: lo cuántico y lo clásico son el mismo código con cifras publicadas distintas.
¿Puedo confiar en que dos ejecuciones coincidan? Sí — las ejecuciones son deterministas: scenario + seed + engine version → bit-identical output, garantizado por scripts/check-reproducible.sh.
¿Puedo usarlo desde Python o en un navegador? Sí — véase Instalar: los ejemplos de Python y WebAssembly están debajo. Ambos llaman al mismo motor.
¿Cómo modelo mi propio sensor? Escriba un escenario .toml con las cifras publicadas de su sensor en los campos provenance. Véanse Formato de escenario y los ejemplos de scenarios/.
¿Es gratuito para uso comercial? Sí — bajo la AGPL-3.0, también en entornos comerciales, siempre que respete el copyleft de la AGPL (en particular: si modifica Kshana y lo ofrece a través de una red, debe ofrecer a esos usuarios su código fuente modificado). Si eso no le conviene — p. ej., necesita incorporar Kshana a un producto propietario o ejecutar un servicio de red cerrado — Ashforde® OÜ ofrece una licencia comercial; véanse LICENSING.md y Soporte.
Solución de problemas
Solución de problemas#
cargo build falla con una cadena de herramientas antigua. Kshana necesita Rust ≥ 1,88. Actualice con rustup update.
La compilación de la extensión de Python falla al enlazar en macOS (Undefined symbols … _Py…). Una extensión de Python resuelve sus símbolos en el momento de la carga. maturin establece automáticamente la opción de enlazador correcta — use maturin develop --features python en lugar de un cargo build a secas.
La compilación de Python se queja de que el intérprete es más reciente de lo que PyO3 conoce. Establezca PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 (los wheels abi3 son compatibles hacia adelante entre versiones de CPython).
La compilación de WebAssembly no encuentra el destino. Instálelo una vez con rustup target add wasm32-unknown-unknown y luego wasm-pack build --target web -- --features wasm.
¿Dónde está mi salida? Cada ejecución escribe <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html y <scenario>.report.json junto al .toml de entrada, y también <scenario>.table.csv para los tipos de escenario que publican una tabla. Todos ellos están excluidos de git por diseño.
Versiones y lanzamientos
Versiones y lanzamientos#
Kshana sigue el Versionado Semántico. Mientras sea anterior a 1.0, el esquema público de escenario/resultado aún puede cambiar; los cambios incompatibles se señalan explícitamente en CHANGELOG.md. Cada resultado es reproducible a partir de scenario + seed + engine version.
Cada etiqueta vX.Y.Z publica todos los canales automáticamente, en un solo orden — primero se ejecuta la suite de pruebas completa en el commit etiquetado, no se publica nada hasta que pasa y después el pipeline comprueba que cada registro sirve realmente la nueva versión (docs/RELEASING.md). Los canales:
| Canal | Instalar / obtener | Contenido |
|---|---|---|
| crates.io | cargo install kshana · kshana = "0.35" |
Biblioteca de Rust + CLI |
| crates.io | cargo install kshana-mcp |
el servidor MCP |
| PyPI (Python Package Index) | pip install kshana |
wheels abi3 (Linux/macOS/Windows) + sdist (distribución de código fuente) |
| npm | npm install kshana |
módulo WebAssembly + envoltorio de JS |
| ghcr.io | docker run -i ghcr.io/ashfordeou/kshana-mcp |
imagen OCI (Open Container Initiative) multiarquitectura — no necesita cadena de herramientas |
| npm | npx -y kshana-mcp@0.40.0 |
lanzador: descarga el binario de la versión, verifica SHA256SUMS y lo ejecuta |
| PyPI | uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 |
el mismo lanzador para Python |
| Homebrew · Scoop · winget | brew install ashfordeOU/tap/kshana-mcp · scoop install kshana-mcp · winget install AshfordeOU.KshanaMcp |
el binario kshana-mcp, generado a partir del SHA256SUMS de cada versión |
| registro oficial de MCP | descubierto automáticamente por los clientes MCP | io.github.ashfordeOU/kshana-mcp (imagen OCI y paquetes de npm y PyPI) |
| JetBrains Marketplace | IDE → Plugins → buscar "Kshana" | el complemento de IDE Kshana — PNT simulator |
| Zenodo | DOI | un archivo citable de cada versión |
| kshana.dev | abrir en un navegador | Kshana Studio, la aplicación WebAssembly en el navegador, recompilada a partir de cada etiqueta de versión (de modo que la versión que muestra es la versión que ejecuta) |
La versión del crate / imagen / registro del servidor MCP sigue la del motor (incluye la biblioteca); el complemento de JetBrains lleva versiones independientes (invoca el binario kshana que tenga instalado).
Hoja de ruta
Hoja de ruta#
Véase ROADMAP.md para la hoja de ruta por fases, CHANGELOG.md para el historial publicado y docs/CAPABILITY.md para la hoja de ruta por capacidad. El orden de prioridad es: primero la evidencia de temporización y holdover para infraestructuras críticas (máscaras de telecomunicaciones, holdover más largo con envejecimiento y ruido flicker, ingesta de datos de reloj medidos); en segundo lugar el método neutral de compromiso cuántico frente a clásico (resultados etiquetados MODELLED hasta que los datos medidos de un socio los promuevan); y la navegación lunar / cislunar y de espacio profundo se mantiene, sin ampliarse como prioridad. La reducción de marcos precisa en ITRF ya está entregada — la cadena completa GCRS↔ITRS IAU 2006/2000A basada en CIO (movimiento polar + nutación subarcosegundo), validada bit a bit frente a SOFA/ERFA y contrastada de forma independiente con ANISE (SPICE en Rust puro) con ≤ 3,6 m en órbita GNSS. Los elementos a corto plazo incluyen la fusión de fase de portadora de acoplamiento fuerte y la exposición del navegador GNSS/INS de acoplamiento débil/fuerte en más paquetes; el motor de navegación radiométrica de espacio profundo / Marte llegó en v0.17.0 (validado por simulación). La capa de física cuántica es un elemento P2: el acelerómetro CAI se simula ahora desde primeros principios (fase de Mach–Zehnder, ruido de proyección, decaimiento del contraste, acoplamiento de vibraciones), mientras que los sensores de reloj/transferencia de tiempo siguen basándose en coeficientes publicados de Allan/presupuesto de ruido. La conversión TEME↔ECEF basada en GMST, los sistemas de tiempo con segundos intercalares del IERS (UTC/TAI/TT/UT1), la propagación orbital SGP4/SDP4 (v0.7.0, validada frente a los vectores AIAA 2006-6753) y el paquete de fusión gnss-ins ejecutable ya se han entregado, y la velocidad inercial se expone aguas abajo. En main han llegado un detector estocástico activo de spoofing de tiempo (prueba de energía de Neyman–Pearson / χ²₁ con P_fa/P_md por Monte Carlo y una FoM de seguridad de 1−P_md), un modelo de jamming con presupuesto de enlace (J/S → C/N₀ efectiva → pérdida de enganche), disponibilidad multiconstelación, un presupuesto de error de IMU de un solo eje (1-DOF), dos estimadores de Kalman independientes (reloj + posición) informados como una FoM combinada, geometría de constelación real a partir de TLE, un informe de cuadro de mando HTML, disponibilidad GNSS derivada de la geometría y dilución de la precisión a partir de órbitas keplerianas con excentricidad y deriva J2, bandas de confianza de Monte Carlo, barridos de parámetros de estudios de compromisos, un playground WebAssembly en el navegador y enlaces opcionales de Python (PyO3) y WebAssembly (wasm-bindgen).
Contribuir
Contribuir#
Véase CONTRIBUTING.md. En resumen: las pruebas pasan (cargo test), los dos scripts de guarda pasan, Conventional Commits, y una entrada [Unreleased] de CHANGELOG.md por cada cambio visible para el usuario. La participación se rige por nuestro Código de Conducta. Para informar de un problema de seguridad, consulte la Política de seguridad — no abra una incidencia pública para vulnerabilidades.
Documentación: cada documento y a quién va dirigido
Documentación#
| Documento | Para quién | Qué contiene |
|---|---|---|
| Introducción a los conceptos | todos, empiece aquí | qué hace Kshana y por qué, desde cero hasta la física |
| Kshana Studio | todos | ejecute el motor en su navegador (WebAssembly); notas de compilación y despliegue |
| Glosario | todos | definiciones en lenguaje llano de cada término |
| Tipos de escenario | todos | cada tipo de escenario que despacha el motor: qué hace, sus campos, un comando de ejemplo, sus filas del registro y el gráfico que escribe el motor para él |
| Datos de socios | laboratorios y fabricantes que tienen datos medidos | qué filas MODELLED podría promover un registro medido de reloj o de IMU, los formatos, cómo se comprueba un envío (kshana partner check), se puntúa y se acredita |
| Arquitectura | desarrolladores / revisores | mapa de módulos, pipeline del motor, despacho y diagramas |
| Estado de la validación | revisores / citadores | qué es validated frente a not modeled, con evidencias |
| Matriz de verificación | revisores / citadores | el registro de evidencias comprobado por máquina — cada fila de capacidad con su estado, módulo, prueba y referencia independiente externa, generado a partir de src/verification.rs |
| Justificación de lo modelado | revisores | por qué cada fila modelada no tiene referencia independiente externa, explicado fila por fila |
| Procedencia | revisores / citadores | cada parámetro de sensor, modelo y conjunto de datos rastreado hasta su fuente publicada, en una única tabla citable |
| Reproducibilidad y procedencia | revisores / empaquetadores | garantías de determinismo, fijación de golden, SBOM (lista de materiales de software), procedencia de la compilación |
| Etiquetas de plataforma de los wheels | empaquetadores | la matriz de wheels abi3 de Python — qué etiqueta de plataforma resuelve pip install kshana |
| Posicionamiento | evaluadores | dónde se sitúa Kshana frente a RTKLIB/gLAB (complementario) y el nivel de navegador sin instalación |
| Kshana Pro | evaluadores / responsables de programa | qué añade la capa propietaria Pro sobre el mismo motor: optimizador de diseño, incertidumbre y sensibilidad, dosier de misión, vigilancia de campañas, coexistencia de espectro, servicio de trabajos en las instalaciones, trazabilidad de requisitos; qué produce cada uno y qué no hace |
| Informe técnico · Artículo de JOSS | revisores / citadores / evaluadores | el artículo de investigación ampliado completo — arquitectura, modelos por dominio, validación, casos de estudio y limitaciones — más la presentación concisa a JOSS (Journal of Open Source Software) |
| Validación de SGP4 | revisores / citadores | coincidencia con la referencia AIAA 2006-6753 (666 estados, ~4 mm) y una comparación directa con el crate independiente sgp4 (coinciden a nivel submicrométrico / 4,12 mm) |
| Validación del modelo de fuerzas | revisores / citadores | el motor de fuerzas completas (src/precise_od.rs) ajustado a efemérides de agencias — metodología y residuos validados |
| Guía de TLE reales | usuarios | conducir escenarios con TLE reales de constelaciones de Celestrak / Space-Track (frente al conjunto Walker sintético incluido) |
| FoM de integridad | evaluadores | qué significan las cifras integrity / security — y qué no son frente a HPL/VPL de aviación |
| Referencia de ARAIM | revisores / integradores | la implementación abierta del nivel de protección MHSS de ARAIM — la proyección de sesgo nominal b_k, σ_URA frente a σ_URE y las probabilidades a priori de los modos de fallo |
| Modelos cuánticos · detalles | revisores | la capa de física del interferómetro de átomos fríos y dónde los coeficientes siguen consultándose en tablas |
| Compliance | evaluadores | Alcance de los algoritmos DO-229E / DO-316, y qué no es una afirmación de ajuste a la norma |
| Confianza marítima | marinos / integradores | la puntuación de confianza GNSS de 0 a 100 para el NMEA de un buque, sus monitores y sus límites (de carácter consultivo, no un equipo de navegación homologado) |
| Flujos NMEA de formación | formadores marítimos | NMEA sintético de puente con jamming y spoofing guionizados y un registro del instructor; solo texto, nunca para navegación en vivo |
| Mapa de interferencias | analistas / marinos | dónde informaron aeronaves y buques de datos de navegación degradados, y cuánto de una ruta afecta |
| Paquetes de evidencias | operadores / aseguradores | registros técnicos firmados de un evento de confianza y cómo verificar uno |
| Telemetría de confianza | equipos de operaciones / seguridad | el flujo de confianza como métricas de Prometheus, eventos SIEM y OpenTelemetry, con un panel de Grafana |
| Integraciones marinas | propietarios de embarcaciones / integradores | el complemento de Signal K, el modo de compuerta de OpenCPN y la compilación de referencia |
| Test bench | fabricantes de receptores | reproducir un escenario exportado con un simulador de laboratorio y puntuar el registro del receptor |
| Correspondencia de compliance | evaluadores | marcos públicos de resiliencia asignados a las salidas de Kshana, con fuentes y brechas; kshana compliance-report |
| Cuadernos | usuarios | tutoriales ejecutables con su texto renderizado |
| Normas e interoperabilidad | integradores | los formatos de intercambio GNSS / dinámica de vuelo / agencias que Kshana lee y escribe (RINEX, SP3, CCSDS OEM/OMM/TDM/Space-Packet, …) |
| Fusión PNT LEO | usuarios / evaluadores | posicionamiento, navegación y temporización fusionados MEO + LEO: Doppler, pseudodistancia conjunta, convergencia de PPP, 5G NTN, cobertura polar y transferencia de tiempo LEO sobre cualquier constelación; los preajustes opcionales y sus fuentes públicas |
| Campañas | usuarios / evaluadores | composición de escenarios: cronologías de misión encadenadas, barridos de parámetros, conjuntos de Monte Carlo y ejecuciones de condición compartida, con las identidades de composición que fijan las pruebas |
| Catálogo de escenarios | usuarios / integradores | cada tipo de escenario despachable con sus campos TOML obligatorios y opcionales — generado a partir de api::list_scenario_kinds() |
| Esquema de resultados | integradores | cada campo del JSON de resultado, con sus unidades y una referencia a la fuente |
| API de Python | usuarios de Python | la superficie de enlace PyO3 — llamar al motor, los tipos de escenario/resultado y ejemplos |
| Afirmaciones frente a realidad | revisores | el registro de cierre de afirmaciones excesivas + la guarda de CI (tests/no_overclaims.rs) que lo mantiene resuelto |
| Hoja de ruta | todos | la hoja de ruta por fases — lo que se ha entregado y lo que viene después |
| Servidor MCP · Complemento de JetBrains | agentes / usuarios de IDE | ejecutar Kshana desde un asistente de IA o un IDE de JetBrains |
| Guía para agentes · Superficies | agentes / integradores | qué herramienta responde a qué pregunta, qué conservar con cada respuesta; dónde es accesible cada capacidad (CLI, Rust, Python, WASM, MCP, complemento, JetBrains, notebooks) y por qué una celda es N/A |
| Registro de cambios | todos | historial publicado (Keep a Changelog + SemVer, Versionado Semántico) |
| Contribuir | colaboradores | compilación, guardas, disciplina de pruebas/citación, DCO (Developer Certificate of Origin) |
| Gobernanza | colaboradores / comunidad | cómo se gobierna Kshana — quién decide, cómo y el límite entre lo abierto y lo cerrado |
| Código de Conducta | comunidad | conducta esperada (Contributor Covenant) |
| Política de seguridad | quienes informan | cómo informar de una vulnerabilidad; nota sobre doble uso |
Referencias clave
Referencias clave#
Referencias independientes de validación y normas — las autoridades externas a las que se anclan las comprobaciones de Kshana:
- Vallado, Crawford, Hujsak & Kelso — Revisiting Spacetrack Report #3 (AIAA 2006-6753; datos de prueba): el conjunto de verificación de SGP4/SDP4 con el que Kshana coincide hasta 4,12 mm, y los ejemplos de marcos resueltos con los que se contrasta la cadena TEME→ITRF.
- IAU SOFA / ERFA — las rutinas de referencia de tiempo y marcos con las que se validan bit a bit la nutación IAU 2000A y la reducción GCRS↔ITRS basada en CIO.
- Petit & Luzum (eds.) — IERS Conventions (2010), IERS TN (Nota Técnica) 36 (orientación de la Tierra, movimiento polar y estándares de marcos).
- Riley — Handbook of Frequency Stability Analysis, NIST SP 1065 (relaciones de la desviación de Allan y la serie de referencia NBS14; NBS = la antigua Oficina Nacional de Normas de EE. UU.).
- Pedregosa et al. — scikit-learn: Machine Learning in Python, JMLR 12 (2011): las implementaciones de referencia de ROC/AUC, matriz de confusión y precisión/exhaustividad/F1 con las que el banco de pruebas de evaluación de degradaciones de RF coincide exactamente (
tests/eval_metrics_reference.rs). - Virtanen et al. — SciPy 1,0, Nature Methods 17 (2020):
optimize.nnls,stats.chi2ylinalg.expm— las rutinas de referencia frente a las que se validan el ajuste NNLS de ADEV medida del compromiso cuántico, las bandas de consistencia χ² y la covarianza del ruido de proceso del reloj de van Loan (tests/scipy_reference.rs). - Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024): usado tanto como estado de la técnica abierto (véase Comparación y estado de la técnica abierto más abajo) como referencia independiente de DOP con la que coincide hasta 1e-6 el cálculo de GDOP/PDOP/HDOP/VDOP/TDOP (
tests/dop_reference.rs). - Montenbruck & Gill — Satellite Orbits: Models, Methods and Applications (Springer): los modelos de fuerzas que hay detrás del ajuste del modelo de fuerzas a las efemérides precisas de agencias.
- 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 (las familias halo/NRHO que reproduce el corrector diferencial del CR3BP).
Física de dispositivos y métodos — las fuentes citadas que hay detrás de los modelos de sensores:
- Origlia, Schiller, Bongs et al. — arXiv:1503,08457 (reloj óptico de red de estroncio, objetivo orientado al espacio).
- Oelker et al., Nature Photonics (2019) — doi:10.1038/s41566-019-0493-4 (reloj de Sr de laboratorio, 4,8×10⁻¹⁷).
- Templier et al., Science Advances (2022) — arXiv:2209,13209 (tríada de acelerómetros cuánticos híbridos).
- Groves, Principles of GNSS, Inertial, and Multisensor Integrated Navigation — tutorial de IEEE AESS (Aerospace and Electronic Systems Society) (repositorio Discovery de University College London) (crecimiento del error de navegación por estima).
- 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) (transferencia óptica bidireccional de tiempo-frecuencia; el enlace óptico entre satélites modela su presupuesto de no reciprocidad según estos trabajos).
- Betz — Binary Offset Carrier Modulations for Radionavigation, NAVIGATION 48(4) (2001), doi:10.1002/j.2161-4296.2001.tb00247.x (la teoría de la modulación BOC y de la separación espectral que hay detrás de
src/navsignal.rs). - Kaplan & Hegarty (eds.) — Understanding GPS/GNSS: Principles and Applications (3.ª ed., Artech House, 2017): la ecuación de C/N₀ efectiva antiinterferencia y la fluctuación por ruido térmico del seguimiento de código DLL early–late que usan los modelos de señal de navegación y de jamming.
Comparación y estado de la técnica abierto — las herramientas y estudios frente a los que se posiciona Kshana:
- Humphreys et al. — TEXBAT (la Texas Spoofing Test Battery; ION — Institute of Navigation — GNSS 2012): los parámetros de la batería de pruebas de spoofing con los que se caracteriza el detector multicapa.
- González et al. — NaveGo (2017): los perfiles abiertos y validados de error de navegación inercial usados como línea base clásica.
- Iiyama, Casadesús Vila & Gao — LuPNT (ION GNSS+ 2023, Stanford NavLab): simulador abierto de PNT lunar.
- Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024), doi:10.1016/j.softx.2024.101811: análisis abierto de datos 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: OD de dinámica reducida con GRAIL, el suelo de aceleración empírica que reproduce el ajuste a LRO.