Estado de la validación
Sobre las tolerancias. "Validado" significa a continuación que una prueba de calibración afirma que el estadístico simulado coincide con la relación de referencia dentro de una compuerta exigida, actualmente un error relativo del 20–25% (promediado sobre semillas) para las relaciones de Allan y de presupuesto de ruido. La coincidencia mediana observada suele ser mucho más estrecha (unos pocos por ciento), pero la cota garantizada es la compuerta, no la mediana. Donde aparece un número como "~2%", es una observación típica, no la tolerancia exigida. Véase Afirmaciones frente a realidad.
La regla de promoción#
Una fila de la matriz de verificación comprobada por máquina (src/verification.rs) es VALIDATED solo cuando una referencia independiente ajena a Kshana coincide con la implementación dentro de una tolerancia declarada antes de ejecutar la comparación, en una prueba que se ejecuta en la compuerta. Esta sección es el único lugar donde se escribe la regla; la matriz, la prosa de cada fila y las notas de versión remiten a ella.
Los tipos de referencia independiente aceptados#
| Tipo | Qué cuenta | Ejemplos que ya están en la matriz |
|---|---|---|
| Medido | Datos medidos reales de la magnitud que afirma la fila: una observación del mundo físico, no una salida de un modelo. | Los dos tercios reservados de un registro real de reloj de cesio; puntos normales archivados de telemetría láser lunar; la serie UTC(k) de la Circular T de la BIPM (Oficina Internacional de Pesas y Medidas); la tesela de terreno de SRTM (Shuttle Radar Topography Mission). |
| Biblioteca | Una biblioteca o herramienta independiente de terceros que calcula una magnitud definida de forma única con las mismas entradas, donde la biblioteca implementa por sí misma el cálculo del dominio. La coincidencia entre bibliotecas es una comprobación genuina solo porque la magnitud tiene una única respuesta correcta. | allantools, Orekit, ANISE, RTKLIB, gnss_lib_py, lamberthub, pymcdm, scikit-learn, las distribuciones estadísticas de SciPy. |
| Referencia | Vectores de referencia, tablas o ejemplos de verificación publicados: números que una norma, una agencia o un texto de referencia imprimen para que se puedan comprobar las implementaciones frente a ellos. | Vectores de SOFA/ERFA (Standards of Fundamental Astronomy), los vectores de verificación de SGP4 de AIAA (American Institute of Aeronautics and Astronautics), los ejemplos de validación de la ITU-R (Unión Internacional de Telecomunicaciones, Sector de Radiocomunicaciones), el ejemplo desarrollado de ARAIM del Grupo de Trabajo C, JPL (Jet Propulsion Laboratory) Horizons. |
Otras dos normas resuelven los casos límite. Ambas se adoptan para la versión 0,30.
- P1, un valor desarrollado publicado. Un valor desarrollado publicado, calculado con la misma forma cerrada que implementa la fila, cuenta como un vector de referencia publicado cuando la publicación es independiente de Kshana y la comparación fija una tolerancia declarada. El valor debe estar impreso como número en la publicación (un valor leído de un gráfico cuenta solo si la incertidumbre de lectura queda dentro de la tolerancia declarada), y la prueba debe hacer que Kshana lo calcule a partir de las entradas de la publicación; comparar una constante con el documento del que se copió es una comprobación de transcripción, no P1.
- P2, una biblioteca numérica independiente. Una biblioteca numérica independiente, como numpy o LAPACK (Linear Algebra PACKage), que recalcula una magnitud de álgebra lineal definida de forma única con entradas declaradas, cuenta como biblioteca independiente. La biblioteca debe realizar la descomposición, la inversa, la resolución o el paso de mínimos cuadrados con su propio algoritmo, con entradas incluidas en el repositorio junto con el fixture; la afirmación validada es entonces el álgebra lineal sobre esas entradas, no las magnitudes físicas de un escenario representativo. Un script que reevalúa una forma cerrada escalar con aritmética de numpy es una segunda implementación nuestra, no P2.
Condiciones que se aplican a todos los tipos: la referencia independiente no la escribe, ejecuta ni publica este proyecto (por tanto, la propia serie de artículos de este repositorio no es independiente de él); la tolerancia está en la prueba y se fijó antes de la primera comparación; una prueba condicionada a datos que se omite cuando faltan sus datos públicos lo indica al omitirse.
Qué no cuenta#
- Nuestra propia segunda implementación: una segunda ruta de código en este crate (
ReferenceImpl), o un script de este repositorio que reevalúa la misma forma cerrada. - La coincidencia con nuestra propia salida anterior: valores de referencia (goldens), fijaciones de regresión, instantáneas o una tabla de los propios artículos de este proyecto.
- Una transcripción de las constantes de una cita: comprobar un coeficiente, un preajuste, una cifra de hoja de datos o una hoja de parámetros frente al documento del que se copió.
- Una decisión de diseño: una asignación, una ponderación, un umbral, un límite de alerta o un escenario representativo. No hay verdad externa para una elección.
- Una identidad interna: una integral numérica frente a su propia forma analítica, una ida y vuelta, una inversión, una prueba de propiedad o de monotonía.
- Una ejecución de integración frente a un anfitrión real (
IntegrationRun): cargar un plugin en un servidor real de Signal K o de OpenCPN, o alimentar a un consumidor TCP con la salida de una compuerta real, y comprobar que el anfitrión acepta la entrada y muestra el estado esperado. Muestra que la instalación funciona. El anfitrión no es una referencia independiente para ningún valor que lleve la integración, de modo que no hay nada externo con lo que comparar y una fila así (la fila de integraciones marinas) es MODELLED, no VALIDATED.IntegrationRunes un tipo de referencia independiente propio, permitido solo en filas MODELLED:integration_run_only_on_modelled_rowsensrc/verification.rsfalla si una fila VALIDATED lo lleva, yvalidated_rows_require_an_external_oracleya exige que toda fila VALIDATED seaExternalDataset. - Verosimilitud con entradas reales: datos reales usados solo como entrada, con aserciones de escala en lugar de una comparación con un valor externo.
- Una tolerancia elegida después de ver la comparación.
Cómo se aplica la regla#
Toda fila VALIDATED declara, en validated_oracle_basis() de src/verification.rs, en qué tipo se basa (Measured, Library, Reference, P1 o P2), la fuente independiente (citada del propio texto de referencia independiente de la fila) y la única prueba que lleva la comparación. Las pruebas unitarias junto a la tabla fallan cuando una fila VALIDATED no está declarada o está declarada dos veces, cuando una declaración nombra una fila que no es VALIDATED, cuando la fuente declarada no es la que nombra el texto de referencia independiente de la fila o es la propia Kshana, cuando la prueba declarada no es una que cita la fila, o cuando una fila P2 no nombra ninguna biblioteca numérica independiente. tests/verification_rows_declare_an_oracle_basis.rs exige entonces que la prueba declarada exista en disco como un #[test] real que no esté ignorado. Lo que la máquina no puede comprobar es si la prueba nombrada compara frente a la fuente declarada; eso sigue siendo una lectura humana. Los recuentos por tipo no se escriben aquí: la fuente es la tabla.
Filas VALIDATED existentes reexaminadas según la regla#
La regla se aplicó a las filas existentes además de a las promociones futuras.
- Filas P1 nombradas por el estudio de validación 0,30, cada una respaldada: Balance de enlace unidireccional (la tabla de control de diseño de banda X de Galileo de JPL Pub 82-76, reensamblada a partir de sus partidas hasta 4.6e-3 dB de pérdida en espacio libre); Formas cerradas de banda limitada para cualquier señal de distancia (el 90,3 por ciento de la potencia del lóbulo principal y la fluctuación coherente early-late publicada); Doppler máximo de un satélite de navegación en órbita terrestre baja (las cifras publicadas de Xona Pulsar X1 e Iridium); Doppler máximo que ve un usuario estático desde una órbita LEO o MEO (Tabla 1 del artículo de Pulsar, 20 valores); Doppler que debe gestionar un receptor en tierra desde un satélite de navegación LEO (las mismas cifras publicadas a partir de una órbita volada). Cada publicación es independiente de Kshana, imprime sus números, y la prueba declara su tolerancia.
- Otras filas que se basan en P1, halladas en el reexamen, cada una respaldada: Compromiso de diseño de códigos de distancia (la correlación cruzada de Gold publicada de −23,9 dB); Tiempo coordenado lunar (Ashby y Patla 2024, cuya comprobación cruzada de la velocidad de la Luna frente a DE440 es una comprobación de biblioteca); Densidades espectrales de potencia de señales de banda L de forma cerrada (valores Q de Kaplan y Hegarty); Retardo ionosférico de primer orden por banda (la razón de retardo de grupo de IS-GPS-200); Pesos del error de distancia de la señal en el espacio promediados globalmente (la tabla de Montenbruck, Steigenberger y Hauschild 2018).
- Filas P2 nombradas por el estudio, cada una respaldada: Información de Fisher y observabilidad de Cramér–Rao (numpy
eigh/inv); Identificabilidad del datum lunar; Calibre acoplado de marco y escala de tiempo lunares; Canalización autónoma de observabilidad de fallos en red libre (SVD de numpy/SciPy, descomposición en valores singulares). Cada una recalcula una magnitud de álgebra lineal definida de forma única con entradas incluidas en el repositorio mediante un algoritmo distinto del resolvedor de valores propios de Jacobi de Kshana. - Otras filas que se basan en P2, halladas en el reexamen, cada una respaldada: Derivación de prioridades MCDA (análisis de decisión multicriterio) (el vector propio del AHP, proceso analítico jerárquico, con SciPy/LAPACK; la tabla de Índice Aleatorio que también reproduce es una transcripción y no se cuenta); Varianza de deriva en holdover de reloj (
expmde SciPy de la matriz aumentada de Van Loan); Realización del marco de referencia lunar (una resolución de Umeyama por SVD de numpy); Formación de haz CRPA (antena de patrón de recepción controlado) (resolución compleja de LAPACK); Núcleo del nivel de protección ARAIM lunar (la inversa LU de RTKLIB con cuantiles de SciPy); Coherencia lunar de marcos y dinámica entre proveedores (un ajuste de mínimos cuadrados por SVD de numpy de tres efemérides publicadas). - Señaladas en la primera pasada, respaldadas de nuevo en la ronda 2 de la ejecución 0,30. Se señalaron tres filas como no respaldadas por la regla escrita. Cada una se basa ahora en una comparación preregistrada antes de obtener su fixture, de modo que ninguna fila queda señalada; una prueba unitaria junto a
validated_oracle_basis()fija la lista (ahora vacía).- Integridad (RAIM/ARAIM/SBAS). Las pruebas citadas solo afirmaban antes verosimilitud con geometría real del IGS (Servicio Internacional de GNSS). La fila se basa ahora en tres referencias independientes de biblioteca: la separación de soluciones de hipótesis múltiples de ARAIM del Airborne Design Document v4.2 frente a Stanford MAAST para ARAIM 2 (270 casos reales, peor diferencia de VPL de 2.2e-3 m frente a 0,05 m); la detección y exclusión de RAIM de instantánea frente a
raim_fdede RTKLIB (2016 de 2016 decisiones idénticas) con el nivel de protección por pendiente; y los niveles de protección L1 de SBAS DO-229E frente a Stanford MAAST con emisiones reales de WAAS (2868 pares dentro de 1.6e-5 m). La fila dice con claridad que las funciones de sigma uniformeraim::araim_raimyraim::araim_dual_raimno se ajustan al ADD y que la comparación SBAS L5 de doble frecuencia es un hallazgo. - Posiciones de planetas en todo el sistema solar a partir de los elementos keplerianos de Standish de JPL. El umbral a posteriori del doble del error nominal se sustituye por un umbral preregistrado: RMS como máximo la cifra de la Tabla 8.10.1 del Explanatory Supplement por planeta y componente, frente a JPL Horizons DE441, con la separación de la Tierra y la rotación ICRF cubiertas.
- Tiempo de luz entre cuerpos del sistema solar. El resolvedor de tiempo de luz se compara ahora con los tiempos de luz de Horizons dentro de 1e-6 s con posiciones DE441, un umbral preregistrado que no hereda el umbral de posición.
- Integridad (RAIM/ARAIM/SBAS). Las pruebas citadas solo afirmaban antes verosimilitud con geometría real del IGS (Servicio Internacional de GNSS). La fila se basa ahora en tres referencias independientes de biblioteca: la separación de soluciones de hipótesis múltiples de ARAIM del Airborne Design Document v4.2 frente a Stanford MAAST para ARAIM 2 (270 casos reales, peor diferencia de VPL de 2.2e-3 m frente a 0,05 m); la detección y exclusión de RAIM de instantánea frente a
- Filas MODELLED que las dos políticas hacen promovibles (solo mediante la ejecución 0,30 fila por fila, nunca por este texto): con P1, la cota de geolocalización de emisores por TDOA/FDOA (diferencia de tiempo y de frecuencia de llegada), el acoplamiento entre la tasa relativista del reloj y el marco, las máscaras de sincronización de la ITU-T (Sector de Normalización de las Telecomunicaciones) (solo para valores de máscara que las Recomendaciones imprimen como números; los puntos de quiebre transcritos comprobados frente a sí mismos no cuentan) y la cota de posicionamiento de redes no terrestres 5G (solo si se encuentra una cifra desarrollada publicada); con P2, la ceguera de integridad de modo común, el nivel de protección de temporización MHSS (separación de soluciones de hipótesis múltiples) escalar y el blanqueo GLS (mínimos cuadrados generalizados). Las dos filas de benchmark de integridad de temporización (el clasificador del diagrama de integridad de Stanford y el evaluador de cobertura de integridad) son clasificación basada en reglas, no álgebra lineal, de modo que P2 no las alcanza; necesitan una herramienta independiente, y la única hallada (gLAB) lleva una licencia no comercial.
- Coherencia con rechazos anteriores. La comprobación de Vallado de la fila de ventana de lanzamiento calificaría ahora con P1 si su prueba calcula el ejemplo desarrollado impreso; el plan 0,30 la promueve en su lugar mediante Orekit. La tabla de cruce de tiempo lunar por clase de reloj sigue MODELLED: la tabla que reproduce procede del propio artículo de este proyecto, que no es independiente.
| Término de ruido | Estado | Evidencias |
|---|---|---|
| Paridad de los estimadores de Allan (ADEV/MDEV/TDEV/OHDEV (ADEV: desviación de Allan; MDEV: desviación de Allan modificada; OHDEV: desviación de Hadamard solapada)) | validated |
Dos comprobaciones con fuente primaria frente a la SP (Special Publication) 1065 del NIST (National Institute of Standards and Technology) (Riley, Handbook of Frequency Stability Analysis, 2008), ambas con una tolerancia relativa de 1e-4. (1) tests/allan_reference.rs: los estimadores de ADEV solapada, ADEV modificada, desviación de tiempo y Hadamard solapada reproducen las desviaciones del conjunto de datos canónico de 10 puntos NBS14 (SP 1065 Tabla 29/30, p. 107) con tau = 1, 2; la coincidencia es en realidad de ~1e-6 (por ejemplo, ADEV solapada (OADEV) con τ = 2: 85,952868 frente a 85,95287). (2) tests/allan_nist_sp1065_1000point.rs: los mismos cuatro estimadores reproducen el conjunto de datos de 1000 puntos de SP 1065 §12,4 (Tabla 31, p. 108) con factores de promediado 1 / 10 / 100, donde el conjunto de datos se regenera en código a partir del LCG de SP 1065 (Ec. 73): hermético, sin fixture. Los mismos datos y números de la Tabla 31 son el objetivo de regresión en aewallin/allantools (tests/nbs14), reproducido aquí sin código de terceros. Esto fija las matemáticas del estimador frente a la referencia, distinto de las filas de calibración del ruido que siguen. |
| Paridad de los estimadores de Allan con hardware real medido | validated |
tests/cs5071a_reference.rs: los estimadores de Allan solapada y de Hadamard solapada reproducen las desviaciones de referencia de Stable32 para un patrón primario real de cesio 5071A medido frente a un máser de hidrógeno (556.990 muestras de fase con τ₀ = 1 s; 1 PPS (pulso por segundo) a un contador 53230A, feb. 2014; recogido por A. Wallin, distribuido con allantools). Comprobado en toda la escalera decádica de τ (16 factores de promediado, τ = 1 s … 4×10⁴ s): los factores bien muestreados con una compuerta relativa de 1e-3 (la coincidencia observada es en realidad ≤ 3e-5, por ejemplo OADEV(1 s) 3.317111e-10 frente a Stable32 3.3171e-10), y los factores dispersos de τ largo deben quedar dentro de la banda de confianza de 1‑σ impresa por Stable32. Esto complementa la paridad sintética de NBS14 anterior con una comprobación de reloj medido. El archivo de fase sin procesar son datos de terceros sin licencia de redistribución, de modo que está excluido de git; scripts/fetch_cs5071a.sh lo reproduce y la prueba imprime un aviso de omisión (CI (integración continua) sigue en verde) cuando falta. Solo se incluyen en el repositorio los números públicos de referencia de Stable32 (tests/fixtures/cs5071a/); no se usa código de terceros. |
| Paridad de los estimadores de Allan con el PHASE.DAT canónico de Stable32 | validated |
tests/phasedat_reference.rs: los estimadores de Allan solapada, de Allan modificada y de desviación de tiempo reproducen las desviaciones de referencia de Stable32 para PHASE.DAT, la serie de 1001 puntos distribuida con Stable32 que herramientas independientes (por ejemplo, allantools) usan como su objetivo estándar de regresión, en toda la escalera de factores de promediado (139 factores) con una compuerta relativa de 1e-3 (observado ≤ 5e-5). Una segunda serie de referencia real e independiente, junto a la comprobación de cesio medido anterior. PHASE.DAT se distribuye con la herramienta comercial Stable32, de modo que la serie sin procesar está excluida de git; scripts/fetch_phasedat.sh la reproduce y la prueba se omite en verde (CI sigue en verde) cuando falta. Solo se incluyen en el repositorio los números públicos de referencia de Stable32 (tests/fixtures/phasedat/); no se usa código de terceros. |
| Estabilidad de relojes ópticos sobre una curva real medida | validated |
tests/optical_clock_adev_reference.rs: la inversión de los parámetros de ruido del reloj (quantum_trade::qparams_from_adev_curve) reproduce el σ_y(τ) publicado del reloj de red óptica de ⁸⁸Sr de Norcia et al., Science 366:93 (2019) (Zenodo 10.5281/zenodo.3382347, CC-BY-4.0 (Creative Commons Attribution 4,0), curva incorporada en tests/fixtures/optical_clock_adev/): el coeficiente de frecuencia blanca recuperado √q_wf ≈ 4.33e-16 coincide con la estabilidad a corto plazo de ≈4.7e-16/√τ del artículo (~10% de RMS (valor cuadrático medio) a lo largo de la curva) y el ajuste detecta un suelo medido distinto de cero (q_rw > 0). Esto fija la inversión de ADEV medida → parámetros de ruido frente a un reloj óptico real; el beneficio de holdover hasta el umbral que se construye sobre ella sigue siendo MODELLED. |
| AUC (área bajo la curva) de la ROC (característica operativa del receptor) para detección de anomalías sobre telemetría real de OPS-SAT de la ESA (Agencia Espacial Europea) | validated (reproduce las etiquetas) |
tests/opssat_ad_reference.rs: sobre el conjunto de datos OPSSAT-AD (Ruszczak et al. 2025, Zenodo 10.5281/zenodo.12588359, CC BY 4,0) —segmentos reales de telemetría de servicio de OPS-SAT con etiquetas de anomalía de referencia— el AUC de la ROC de Mann–Whitney de Kshana (impairment_eval::auc) reproduce roc_auc_score de scikit-learn con una diferencia < 1e-9 en la partición de prueba reservada (529 segmentos, 113 anomalías), para dos puntuaciones deterministas: un detector transparente de una sola característica (recuento de picos del segmento, AUC ≈ 0,851) y una puntuación de Mahalanobis diagonal de 8 características ajustada sobre los segmentos normales de entrenamiento (AUC ≈ 0,556); eval_stats::bootstrap_auc_ci acota la estimación puntual con un límite inferior que queda por encima del azar. Esto valida el cálculo del AUC sobre datos reales de la ESA y la separación etiquetada de un detector transparente; no reproduce la mejor métrica publicada en el artículo de OPSSAT-AD (una FCNN (red neuronal totalmente conectada) supervisada, F1 ≈ 0,95), que requiere su modelo entrenado. Datos CC-BY incorporados (tests/fixtures/opssat/, herméticos); la referencia independiente se regenera con generate_opssat_oracle.py. |
| Síntesis de funcionales del campo gravitatorio (mapa de navegación asistida por gravedad / sin GNSS (GNSS: sistema global de navegación por satélite)) | validated |
tests/icgem_gravity_reference.rs: el núcleo de funcionales de gravedad en armónicos esféricos (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 (Sistema de Referencia Geodésico 1980) (Moritz 1980, adoptado por la IAG (Asociación Internacional de Geodesia)). Construir el campo normal GRS80 a partir de sus armónicos zonales pares publicados J₂…J₈ y sintetizar la gravedad (gravitación + centrífuga) sobre el elipsoide reproduce la gravedad normal de forma cerrada de Somigliana, y los valores publicados en el ecuador y en el polo γ_e = 9,7803267715 / γ_p = 9,8321863685 m/s², con una diferencia relativa de 3.5e-12 en todas las latitudes (umbral 1e-9). El mismo núcleo carga el modelo terrestre real EGM2008 de ICGEM (Centro Internacional de Modelos Globales de la Tierra) (Modelo Gravitatorio Terrestre 2008) (NGA (Agencia Nacional de Inteligencia Geoespacial), dominio público, vía ICGEM; el lector from_gfc también se ejercita con el campo lunar GRAIL (Gravity Recovery and Interior Laboratory) en tests/agency_lro.rs) y produce un mapa de perturbación de la gravedad físicamente acotado (RMS ≈ 26 mGal, máx. ≈ 89 mGal a grado y orden 70). Valida la corrección del código de síntesis; la precisión de la posición de navegación asistida por gravedad sigue siendo MODELLED (no existe una trayectoria pública de gravímetro sobre una plataforma con verdad de referencia). |
| edf específicos por tipo de ruido (intervalos de confianza) | validated |
src/allan.rs: la banda de confianza χ² de cada punto de ADEV solapada usa los grados de libertad efectivos específicos por tipo de ruido (formas cerradas de la Tabla 5 de NIST SP 1065 para modulación de fase blanca y de fase flicker, modulación de frecuencia blanca y de frecuencia flicker, y modulación de frecuencia de paseo aleatorio (WPM/FPM/WFM/FFM/RWFM) —el conjunto simple de Stable32—), identificando el tipo de ley de potencias del registro a partir de su pendiente log-log de MDEV. Tres comprobaciones independientes: (a) las cinco fórmulas reproducen valores evaluados a mano en N=64, m=4 con una diferencia de 1e-12; (b) un conjunto de Monte Carlo de FM blanca (FM: modulación de frecuencia) (4.000 registros) mide el edf real de chi cuadrado del estimador = 2·media²/Var(σ²) y coincide con la fórmula dentro del 20% (y mejora de forma apreciable el recuento conservador sin solapamiento); (c) tests/allan_nist_sp1065_1000point.rs reproduce el edf impreso en la Tabla 32 de SP 1065 (p. 109) = 146,177 para el conjunto de datos de 1000 puntos con m=10 (FM blanca) con una diferencia de 5e-3, y los límites de confianza del 95% de la tabla (8.223942e-2 / 1.035201e-1) con una diferencia <0,2% (el pequeño residuo es la aproximación χ² de Wilson-Hilferty frente al χ² exacto de NIST). La curva de ADEV exportada incluye el tipo de ruido identificado, el edf y la banda del 95% para cada τ. |
| FM blanca (corto plazo) | validated |
tests/calibration.rs: la ADEV solapada simulada reproduce el sigma_y(1 s) publicado —normalmente con una diferencia de pocos puntos porcentuales, con un umbral impuesto del 20% (CSAC y el objetivo de red óptica)— y la curva de FM blanca sigma_y(tau)=sigma_y(1s)/sqrt(tau) para tau = 1, 10, 100 s dentro de un umbral del 25% (coincide con la hoja de datos del CSAC (reloj atómico a escala de chip) 3e-10 / 1e-10 / 3e-11). |
| FM de paseo aleatorio (largo plazo) | validated |
tests/calibration.rs: la ADEV simulada coincide con sigma_y^2(tau)=q_rw*tau/3 (Riley, NIST SP 1065) en torno al ~20% (promediado entre semillas). |
| Envejecimiento / deriva lineal | modeled + compensada |
Determinista; el estimador de holdover elimina el desfase y el envejecimiento mediante un predictor cuadrático, de modo que el residuo es el límite estocástico. Probado en src/estimator.rs / src/models.rs. |
| Estimador de Kalman + cota de integridad | validated |
src/kalman.rs: un filtro de dos estados (fase, frecuencia) cuyo ruido de proceso exacto de van Loan coincide con el modelo de referencia; la inercia reproduce la varianza analítica de holdover q_wf*T + q_rw*T^3/3 con una diferencia de 1e-9. La actualización de la covarianza está en forma estabilizada de Joseph P⁺ = (I−KH)P(I−KH)ᵀ + KRKᵀ, que se mantiene semidefinida positiva (comprobado con Cholesky) a lo largo de 500 pasos de predicción/actualización con una razón extrema R=1e-26 / Q≈1e-30, y coincide con la forma ingenua con una diferencia de 1e-9 allí donde esta última está bien condicionada. La capa de ejecución informa de la integridad como la fracción de muestras de la interrupción que quedan dentro de la cota de protección de 3 sigma (src/run.rs). |
| Autoconsistencia del filtro (NIS (innovación normalizada al cuadrado) / NEES (error de estimación normalizado al cuadrado)) | validated (modelo) |
src/filter_health.rs: una evaluación de consistencia de Monte Carlo (Bar-Shalom §5,4). El NIS → 1 y el NEES → 2 agrupados del filtro acorde caen dentro de sus bandas χ² del 95% (la banda del NIS usa el recuento agrupado de innovaciones blancas; la banda del NEES usa el recuento de ejecuciones independientes, ya que los errores de estimación están correlacionados en el tiempo). Una prueba de barrido de desajuste Q/R verifica que el monitor informa consistent=true solo con la sintonía unitaria y consistent=false con desajustes de ×0.1/×0.5/×2/×10, con el NIS escalando como ≈1/q_factor según lo derivado. Se expone como filter_health en el JSON (JavaScript Object Notation) de resultados del reloj y en una tarjeta del playground. Las bandas χ² usan el cuantil de Wilson–Hilferty (detection::chi2_inv_cdf, comprobado con tablas). |
| Modelo de transferencia de tiempo bidireccional | validated (modelo) |
src/timetransfer.rs: el retardo recíproco de modo común se cancela exactamente en la estimación (m_AB - m_BA)/2 (derivada a mano, exacta) y dos medidas unidireccionales se promedian a 1/sqrt(2) (promediado entre semillas); el retardo diferencial no recíproco es un proceso coloreado de FM blanca + FM de paseo aleatorio cuya desviación de Allan sigue sigma_y^2(tau) = q_rw*tau/3 (promediado entre semillas, ~20%, mediante el propio step() del enlace). Los parámetros (sigma_j, q_rw de cada enlace) son cifras representativas de TWSTFT/óptico (TWSTFT: transferencia bidireccional de tiempo y frecuencia por satélite), no ajustadas a un terminal concreto. |
| Seguridad (puntuación de detección de spoofing) | validated (modelo) |
src/security.rs: el suelo de 1 sigma del monitor sqrt(r/m + q_wf*tau + q_rw*tau^3/3), el desfase mínimo detectable de k sigma resultante y la puntuación [0,1] están derivados a mano y probados con pruebas unitarias. El modelo (innovación / detección asistida por reloj de tipo RAIM (RAIM: monitorización autónoma de la integridad por el receptor)) es sólido; los parámetros (ventana de monitorización tau, multiplicador de detección k, ruido de medida r) son representativos, no ajustados a un receptor concreto. |
| Detección de ataques de spoofing | validated (modelo) |
src/spoof.rs: un spoofing de tiempo falso en rampa se señala cuando su desfase supera la cota de detección del reloj; el tiempo de detección coincide con start + bound/rate derivado a mano con una diferencia de un paso de la malla, y un reloj cuya cota supera la especificación permite que el spoofing alcance el umbral sin ser detectado. Se aplica la misma salvedad de representative-parameters que en la puntuación de seguridad. |
| FM flicker (suelo) | modeled (desactivada por defecto) |
Sintetizada como una suma de procesos de Ornstein-Uhlenbeck (OU) espaciados logarítmicamente y calibrados a un suelo de ADEV plano configurable; src/models.rs valida que el suelo es plano en todo el tiempo de promediado y se sitúa en el nivel configurado (promediado entre semillas). Se activa por reloj mediante flicker_floor. Los escenarios de referencia citados la dejan desactivada: el CSAC está dominado por FM blanca en todo el rango de su hoja de datos (1-1000 s) y el suelo sistemático del reloj óptico (~5e-17) se representa mediante su cifra de exactitud. |
| Estadísticas del conjunto de Monte Carlo | validated (agregación) |
src/ensemble.rs: percentiles por rango más cercano y media sobre runs realizaciones reproducibles; una sola ejecución colapsa la dispersión, la banda por paso de tiempo está ordenada p05 <= p50 <= p95, y las repeticiones son idénticas bit a bit. Se trata de una agregación estadística sobre la ejecución individual ya validada, no de un modelo físico nuevo. |
| Reloj | sigma_y(1 s) | Fuente |
|---|---|---|
| csac-sa45s (CSAC) | 3.0e-10 | Hoja de datos de Microchip SA65 / SA.45s |
| optical-sr-lattice (red de Sr) | 1.0e-15 | reloj de red óptica de estroncio, objetivo orientado al espacio, arXiv:1503,08457 |
Estado: FM blanca y FM de paseo aleatorio validadas; envejecimiento modelado y compensado; FM flicker modelada y validada (desactivada por defecto en los escenarios citados).
Madurez: las cifras del reloj óptico son el objetivo orientado al espacio sobre hardware terrestre: ningún reloj óptico de estroncio ha volado. Los relojes de Sr de laboratorio alcanzan 4.8e-17 (Oelker et al. 2019, Nature Photonics). Las cifras del CSAC proceden de un componente comercial desplegado.
Relaciones: Riley, NIST SP 1065, Ec. 67: FM blanca sigma_y^2(tau)=h0/(2 tau); FM de paseo aleatorio sigma_y^2(tau)=(2 pi^2/3) h_-2 tau, equivalentemente q_rw*tau/3 para un proceso de Wiener en frecuencia de difusión q_rw.
Paquete 2 — navegación inercial por estima (unidad de medida inercial cuántica)#
| Término | Estado | Evidencias |
|---|---|---|
| Sesgo constante/residual -> posición | validated |
error de posición = familia 0,5bT^2 (Groves, tutorial de la AESS (Sociedad de Sistemas Aeroespaciales y Electrónicos)); prueba discreta derivada a mano en src/inertial/mod.rs. |
| Paseo aleatorio de velocidad (aceleración blanca) | validated |
src/inertial/mod.rs: la DE (desviación estándar) simulada del error de posición coincide con sigma_x(T)=sqrt(S_a*T^3/3) (Groves ec. 54) en torno al ~12% observado (promediado entre semillas; umbral impuesto del 20%). |
| Física del acelerómetro de interferómetro de átomos fríos (CAI) (a partir de primeros principios) | validated (modelo) |
src/inertial/quantum_imu.rs: un interferómetro de átomos fríos Mach-Zehnder de tres pulsos. Verificado a mano frente a la geometría de los manuales: Rb-87 k_eff = 4pi/lambda ~ 1.611e7 rad/m; Phi = k_eff*a*T^2 ~ 1.580e4 rad a 1 g, T = 10 ms; ruido de proyección sigma_Phi = 1/(C*sqrt(N)) = 2e-3 rad con C = 0.5, N = 1e6; sigma_a ~ 1.24e-6 m/s^2 por disparo; las leyes de escala 1/T^2 y 1/sqrt(N); decaimiento exponencial del contraste. q_va() deriva la PSD (densidad espectral de potencia) de aceleración blanca que consume el AccelModel clásico. Alcance honesto: solo el suelo de ruido de proyección cuántica (~0,09 ug/sqrtHz aquí), muy por debajo de los dispositivos reales, limitados por la vibración (1-50 ug/sqrtHz); el tensor de vibración, Coriolis y los sistemáticos de desplazamiento lumínico aún no están modelados (véase QUANTUM.md). |
| Sesgo del giróscopo + paseo aleatorio angular (ARW) -> inclinación -> acoplamiento con la gravedad | modeled (desactivada por defecto) |
Un sesgo residual del giróscopo y el ARW provocan un error de actitud; la inclinación acopla la gravedad (g*theta) en error horizontal de fuerza específica. src/inertial/mod.rs valida exactamente el crecimiento cúbico de la posición por sesgo puro y el crecimiento de la actitud por ARW como un proceso de Wiener (promediado entre semillas). Se activa por sensor mediante gyro_bias y q_arw; desactivado en los escenarios citados que solo usan acelerómetro. |
| Inestabilidad del sesgo (suelo flicker 1/f) | modeled (desactivada por defecto) |
src/inertial/mod.rs: un proceso flicker 1/f (la misma síntesis OU validada para el reloj) cuyo suelo plano de desviación de Allan se sitúa en el coeficiente de inestabilidad del sesgo; cero no tiene efecto, un suelo distinto de cero cambia la trayectoria, ambos reproducibles. Se activa por sensor mediante bias_instability. |
| Paseo aleatorio de aceleración (paseo aleatorio de tasa) | validated |
src/inertial/mod.rs: el sesgo es un proceso de Wiener con Var(bias_rw(T)) = q_aa*T, comprobado promediando entre semillas en torno al ~20%. Se activa por sensor mediante q_aa. |
| Validación cruzada con NaveGo (coeficientes de ruido de la IMU (unidad de medida inercial)) | validated |
tests/navego_imu_crossval.rs: una comprobación cruzada externa frente a NaveGo (R. Gonzalez, herramienta de código abierto INS/GNSS (INS: sistema de navegación inercial), github.com/rodralez/NaveGo). Reproduce el viaje de ida y vuelta sintético del navego_example_allan.m de NaveGo sobre su perfil de referencia publicado del Microstrain 3DM-GX3-35: al alimentar nuestro estimador de ADEV solapada (validado con NBS14/Stable32) con ruido blanco del sensor a los niveles de 1 σ de NaveGo, recupera los coeficientes de paseo aleatorio de velocidad y de ángulo (VRW, ARW) (ADEV(1 s) = σ·√dt) dentro de < 5% (real ~0,4%), con la rama de ruido blanco en la pendiente −1/2. Confirma que nuestra cadena de Allan y las definiciones de VRW/ARW de NaveGo coinciden. El registro .mat grabado del STIM300 de 40 MB no se ingiere (condicionado al formato binario). |
| Factor de escala, términos de ejes cruzados más finos | not modeled en este paquete de 1 GDL (un grado de libertad) |
El paquete heredado de un solo eje no tiene error de factor de escala ni de acoplamiento cruzado. La biblioteca strapdown de tres ejes y el paquete gnss-ins sí modelan factor de escala, desalineación, sensibilidad a g, cuantización y rampa de velocidad (src/inertial/imu_errors.rs; véase la tabla de afirmaciones más abajo). |
| Sensor | estabilidad del sesgo | PSD raíz del ruido | Fuente |
|---|---|---|---|
| cold-atom-quat (cuántico) | 5.88e-7 m/s^2 (60 ng, 24 h) | 22 ug/sqrtHz = 2.16e-4 (m/s^2)/sqrtHz | Templier et al. 2022, Science Advances (arXiv:2209,13209) |
| nav-grade-quartz (clásico) | 1.57e-3 m/s^2 (~160 ug) | ~20 ug/sqrtHz = 1.96e-4 (m/s^2)/sqrtHz | Honeywell QA-2000 / tutorial de la AESS de Groves |
Planteamiento honesto: la ventaja de los átomos fríos es la estabilidad del sesgo a largo plazo (~2600 veces menor), que domina en una interrupción larga de GNSS a través de 0,5bT^2. El ruido a corto plazo es comparable (cuántico ~22 frente a clásico ~20 ug/sqrtHz): el sensor cuántico gana el maratón, no el sprint. Madurez: los acelerómetros de átomos fríos están en fase de laboratorio/temprana (JRC122785); el cuarzo de grado de navegación está desplegado.
Paquete 3 — transferencia de tiempo (óptica frente a radiofrecuencia (RF), enlace óptico entre satélites)#
| Término | Estado | Evidencias |
|---|---|---|
| Jitter de temporización blanco -> precisión de sincronización | validated |
src/timetransfer.rs: el RMS de sincronización simulado reproduce el jitter del enlace sigma_j; la media muestral se promedia como sigma/sqrt(N) con una diferencia <20% (promediado entre semillas). |
| Temporización -> medición de distancia unidireccional | validated |
distancia = c * dt, c=299792458 m/s; 1 ps = 0,299792458 mm (exacto, prueba derivada a mano). |
| Suelo flicker/TDEV, residuo de reciprocidad bidireccional | modelled |
src/twstft_budget.rs (tipo de escenario time-transfer-budget): ruido de fase flicker (Kasdin–Walter, TDEV plana), una no reciprocidad diurna y un residuo de reciprocidad constante en la serie bidireccional; el paquete timetransfer de jitter blanco no cambia. |
| Enlace | jitter de una sola muestra | tipo | fuente |
|---|---|---|---|
| optical-isl | 1 ps (1e-12 s) | objetivo creíble en órbita | enlace óptico entre satélites, objetivo de sincronización de picosegundos; O-TWTFT (TWTFT: transferencia bidireccional de tiempo y frecuencia) de laboratorio ~1 fs (Giorgetta 2013 / Deschenes 2016) |
| twstft-rf | 0,5 ns (5e-10 s) | medido en una sola sesión | TWSTFT de BIPM/PTB/NIST (BIPM: Oficina Internacional de Pesas y Medidas; PTB: Physikalisch-Technische Bundesanstalt, el instituto nacional alemán de metrología) |
Planteamiento honesto: la cifra óptica es un objetivo de sincronización en órbita del orden de picosegundos (no ha volado). El suelo de laboratorio óptico terrestre es de ~1 fs (mucho mejor); un enlace de microondas bien diseñado (el enlace de microondas (MWL) del ACES (Conjunto de Relojes Atómicos en el Espacio), ~0,3 ps) puede competir con el óptico, de modo que la línea base de «RF = 0,5 ns» corresponde específicamente a un TWSTFT ordinario. La conversión a distancia es unidireccional (distancia = cdt); en bidireccional/ida y vuelta se reduce a la mitad (distancia = cdt/2).
Paquete 4 — fusión híbrida (culminación)#
Compone el Paquete 1 (reloj), el Paquete 2 (inercial) y el Paquete 3 (transferencia de tiempo) en una única suite PNT (posicionamiento, navegación y temporización). La suite debe mantener AMBOS, la temporización (< especificación de temporización) y la posición (< especificación de posición), dentro de los límites; pnt_holdover_s es el tiempo hasta que uno de los dos se rebasa. La transferencia de tiempo opcional por enlace óptico entre satélites (ISL) resincroniza el reloj durante la interrupción (solo asistencia de tiempo: la posición no se resincroniza, ya que la transferencia de tiempo da tiempo, no posición).
| Aspecto | Estado | Evidencias |
|---|---|---|
| Puntuación PNT combinada (temporización Y posición) | validated |
src/hybrid.rs: prueba score_hybrid derivada a mano (pnt_holdover = el primero entre temporización y posición en rebasar su límite). |
| Integridad + seguridad del paquete híbrido | validated |
src/hybrid.rs: un estimador de temporización de Kalman disciplinado a la referencia (nominal) y reanclado en cada resincronización óptica; la integridad es la contención en la cota de protección (la cota incluye el suelo de jitter del enlace), y la seguridad es la puntuación de detección de spoofing. Probado para ambas suites, incluido el caso asistido por enlace. |
| Estimador de fusión conjunta | validated (modelo) |
src/fusion/mod.rs: un único filtro de Kalman conjunto ([fase, frec] ⊕ [pos, vel]) es el navegador, disciplinado por GNSS (aprendiendo los desfases a partir de una covarianza inicial distinta de cero) y asistido por transferencia de tiempo; la covarianza conjunta da una integridad conjunta que se prueba fiable (≥0,9) para ambas suites con sensores consistentes con el ruido. El paquete observa la posición y el tiempo por separado, para lo cual el filtro óptimo es diagonal por bloques; la estimación de sesgo constante con estado aumentado y la asistencia cruzada dinámica son trabajo futuro. |
| Filtro acoplado de reloj + posición (covarianza entre bloques) | validated (modelo) |
src/fusion/coupled.rs CoupledPntFilter: un único filtro de Kalman [pos, vel, phase, freq] apilado (actualizaciones en forma de Joseph) cuya medida de pseudodistancia ρ = g·pos + c·phase + noise acopla los bloques de posición y de reloj. Pruebas: una pseudodistancia compartida hace que P[pos,phase] sea distinto de cero (los filtros desacoplados lo mantienen exactamente en 0); dos geometrías distintas resuelven conjuntamente desfases inyectados de posición y de reloj que una sola distancia no puede separar; una corrección de solo reloj afina la posición a través de la covarianza cruzada (la ventaja que aporta el acoplamiento y que los filtros desacoplados no pueden dar); y un NEES de Monte Carlo es consistente con χ²(4) (Bar-Shalom §5,4, banda basada en ejecuciones). 1 GDL (la dimensionalidad del paquete); aún no está conectado al paquete ejecutable, y la extensión de 8 estados en 3-D es trabajo futuro. |
| Composición de submodelos validados | hereda | los términos de reloj/inercial/transferencia de tiempo se validan en sus propios paquetes. |
GNSS/INS de acoplamiento débil (paquete gnss-ins) |
validated (modelo) |
src/fusion/{gnss_ins_ekf,closed_loop,pack}.rs: un EKF de estado de error de 15 estados (δp, δv, ψ, sesgo de acelerómetro/giróscopo; Groves §14) gobierna el navegador strapdown de tres ejes con realimentación. Pruebas: un error de posición inyectado se anula con asistencia de referencia perfecta; la solución asistida se mantiene acotada a metros mientras un INS en marcha libre diverge más allá de 100 m; y el RMS de la posición fusionada durante una interrupción de 60 s supera a la navegación por estima sin asistencia en la cota de la prueba de conjunto (~4× al medir antes de 0.27.3; el margen es mayor tras la corrección que se describe más abajo). El acoplamiento del sesgo del giróscopo se comprueba frente al propio strapdown: un sesgo residual conocido del giróscopo debe producir el error de actitud que predice el filtro (closed_loop::tests::gyro_bias_coupling_predicts_the_strapdown_attitude_error), y un a priori amplio debe aprender un sesgo de giróscopo de clase controlador de vuelo manteniéndose acotado; ambas fallan con el signo anterior a la 0.27.3. Revisado en 0.27.3: ese acoplamiento tenía el signo equivocado, de modo que las estimaciones del sesgo del giróscopo empujaban en sentido contrario y solo un a priori estrecho mantenía estable el paquete; las cifras publicadas de interrupción cambiaron (CHANGELOG, Fixed). Límite honesto: el sesgo de acelerómetro y la inclinación de acoplamiento débil son poco separables, por lo que no se afirma una calibración por sesgo. |
| GNSS/INS de acoplamiento fuerte (pseudodistancia) | validated (modelo) |
src/fusion/gnss_ins_ekf.rs update_tightly_coupled + closed_loop.rs fuse_tightly_coupled: la innovación se forma en el dominio de la distancia (jacobiano de línea de visión sobre δp). Pruebas: cuatro satélites anulan un error horizontal inyectado de 8 m/−5 m hasta < 0,1 m; dos satélites (sin posibilidad de solución de posición, velocidad y tiempo (PVT)) siguen reduciendo el error horizontal en más de 5×; un único satélite en el cenit observa solo la componente a lo largo de la línea de visión (vertical) y deja intacta la horizontal; las entradas mal formadas se rechazan. Solo pseudodistancia: la fase de portadora y un estado explícito de reloj del receptor forman parte de la hoja de ruta. |
| Fidelidad de la asistencia cruzada entre sensores (fusión completa con Kalman/grafo de factores) | not modeled en el paquete hybrid |
El paquete híbrido es una composición a nivel de sistema + asistencia de tiempo, no un estimador óptimo. Los filtros existen en otra parte: el EKF (filtro de Kalman extendido) de acoplamiento débil y fuerte del paquete gnss-ins (filas anteriores) y el UKF (filtro de Kalman unscented (UKF)) de 17 estados del tipo de escenario hybrid-ukf. No se modela ningún suavizador de grafo de factores. |
Resultado: la suite totalmente cuántica mantiene el PNT completo durante una interrupción de 1,8 h; la suite totalmente clásica está limitada por la posición (la IMU de grado de navegación rebasa su límite primero). La transferencia de tiempo por ISL óptico mantiene bloqueado incluso el RELOJ clásico, lo que aísla el sensor inercial como el eslabón débil de la suite clásica: el argumento central a favor de combinar inercial cuántico y temporización óptica.
Geometría — disponibilidad de GNSS a partir de las órbitas#
| Aspecto | Estado | Evidencias |
|---|---|---|
| Propagación circular de dos cuerpos | validated |
src/orbit.rs: periodo T=2 pi sqrt(r^3/mu) (mu = 3.986004418e14), la posición vuelve tras un periodo, planitud ecuatorial/polar: pruebas derivadas a mano. |
| Propagación excéntrica (kepleriana) | validated |
src/orbit.rs: ecuación de Kepler M = E - e sin E resuelta por Newton (residuo < 1e-12); radios de perigeo/apogeo a(1∓e); el caso circular coincide con la vía de forma cerrada con una diferencia de 1e-9. |
| Deriva secular nodal/apsidal por J2 | validated |
src/orbit.rs: Omega_dot = -1.5 n J2 (Re/p)^2 cos i, argp_dot = 0.75 n J2 (Re/p)^2 (5cos^2 i - 1) (Vallado); el nodo retrocede (prógrado) / avanza (retrógrado) / es estacionario (polar), y los ápsides se congelan a la inclinación crítica de 63,4 grados: pruebas de signo/cero derivadas a mano. Solo dos cuerpos + secular, no osculatriz. |
| Visibilidad en línea de visión (ocultación por la Tierra + máscara de elevación) | validated |
Un satélite antipodal ocultado, un satélite radialmente hacia afuera a 90 grados de elevación y un satélite tangencial en el horizonte: pruebas exactas derivadas a mano. |
| Visibilidad -> estado GNSS -> línea de tiempo | validated |
>=4 visibles = nominal, 1-3 degradado, 0 denegado; generador Walker-delta; una prueba de integración conduce una ejecución de holdover del reloj a partir de la línea de tiempo derivada. |
| Optimizador de diseño de constelaciones + geometría de franjas de cobertura | validated (modelo) |
src/walker.rs: optimize_walker_design recorre la malla {planes × sats × inclination} y devuelve la celda que satisface mejor un DesignObjective (mínimo de satélites para un objetivo de cobertura / cobertura máxima / mínimo del peor PDOP (PDOP: dilución de la precisión de posición)); una prueba afirma que la elección coincide con un barrido exhaustivo independiente del mismo recorrido, y un ejemplo resuelto confirma que un diseño Walker 24/6/1 de GPS (Sistema de Posicionamiento Global) cubre al menos tan bien como uno reducido de 18 satélites. Las formas cerradas analíticas de franjas de cobertura (coverage_half_angle_rad λ = arccos(Re/r·cos ε) − ε; street_half_width_rad cos c = cos λ / cos(π/s), Rider/Beste) se verifican a mano frente a la geometría de los manuales (GPS con una máscara de 5°: λ ≈ 71,16°, semianchura de franja de 4 satélites ≈ 62,83°) y detectan el hueco de subpoblación (λ < π/s ⇒ None). El solucionador completo de Rider de número mínimo de satélites para cobertura global (el recuento de planos, sensible a las costuras) aún no está implementado. |
| Dilución de la precisión (GDOP/PDOP/HDOP/VDOP/TDOP (GDOP: dilución geométrica de la precisión; HDOP: dilución horizontal de la precisión; VDOP: dilución vertical de la precisión; TDOP: dilución temporal de la precisión)) -> precisión de posición | validated |
src/orbit.rs: Q=(HᵀH)⁻¹ a partir de la matriz de diseño de línea de visión. Referencia independiente externa (tests/dop_reference.rs): los cinco factores DOP reproducen los calculados por gnss_lib_py 1.0.4 (Stanford NAV Lab, una biblioteca GNSS independiente y revisada por pares, usada aquí como se usa ERFA (Essential Routines for Fundamental Astronomy) para los marcos) en 8 geometrías que van desde bien condicionadas hasta casi singulares (DOP en las centenas), con una diferencia relativa de 1e-6; procedencia + regeneración en tests/fixtures/dop/. Como comprobación adicional de forma cerrada, una geometría de tetraedro regular reproduce los DOP analíticos (PDOP 1,5, TDOP 0,5, GDOP √2,5, HDOP √1,5, VDOP √0,75) con una diferencia de 1e-9. Sigma de posición = PDOP × error de distancia equivalente del usuario. |
| Error de posición = σ_UERE × DOP para la solución de mínimos cuadrados propia del motor | modelled |
src/dop_error_mc.rs, tests/uere_dop_monte_carlo.rs: un Monte Carlo con semilla (N = 20.000 épocas por geometría, σ = 1,5 m, semilla ChaCha8 36 + i) de pvt::solve_spp con pesos unitarios, resuelto desde la posición verdadera, sobre las 8 geometrías de tests/fixtures/dop/dop_reference.csv (aquellas cuyo DOP coincide con gnss_lib_py), frente a σ²·Q, donde Q es el factor de covarianza del propio núcleo orbit::dop (orbit::dop_cofactor, la misma aritmética). Tolerancias preregistradas (commit e50c88d2, antes de la primera ejecución, según la nota de diseño de geometría 0,36, sección 5,2), cada una expresada en número de errores estándar: varianzas este, norte, arriba y de reloj dentro del 5 %; RMS H/V/P dentro del 2,5 %; correlación este-norte dentro de 0,035; medias dentro de 5 errores estándar; la fracción de la elipse horizontal del 95 % dentro de 0,95 ± 0,0077. Primera ejecución: pasan las 104 comprobaciones (peor varianza 3,2 %, RMS 1,6 %, correlación 0,012, media 2,2 errores estándar, elipse 0,0039). Los controles negativos fallan como se exige: duplicar el PDOP falla en todas las geometrías; los errores que crecen como 1/sin(elevación) frente a la Q sin ponderar fallan una comprobación de varianza en toda geometría cuyo satélite más bajo está por debajo de 20°. Cómo se combina con la fila anterior: esa fila valida el DOP de estas geometrías frente a gnss_lib_py; esta añade el paso de esos factores a metros a través del solucionador del motor. Se mantiene al lado una primera comprobación, aparte (src/dop_error_ci.rs, tests/position_error_dop_ci.rs, ejecutada antes del preregistro e informada como tal): cuatro cielos elegidos a mano (abierto, agrupado, cañón urbano, medio cielo; σ 1 m) con intervalos de confianza de chi cuadrado de 1e-6 en total sobre 20 comprobaciones; razones de 0,987 a 1,009, y sus propios controles negativos (un error de DOP del 10 %, errores de 1/sin(elevación)) fallan como se exige. Por qué MODELLED: no hay conjunto de datos externo; no demuestra que el error de un receptor real siga el modelo, y σ_UERE es una entrada. |
| Disponibilidad multiconstelación | validated |
src/orbit.rs: las [[constellations]] adicionales se fusionan en un único conjunto de satélites para visibilidad/DOP; una prueba de recuento combinado confirma la unión. |
| Ionosfera difundida (Klobuchar, IS-GPS-200 (IS: especificación de interfaz)) → retardo oblicuo en L1 | validated |
src/gnss_sim.rs: klobuchar_delay_m, el modelo monofrecuencia difundido de ocho coeficientes. Referencia independiente externa (tests/klobuchar_reference.rs): el retardo oblicuo en L1 reproduce el ionmodel de RTKLIB (una biblioteca de código abierto de posicionamiento cinemático en tiempo real) (tomojitakasu/RTKLIB, src/rtkcmn.c, la referencia GNSS abierta de facto, compilada desde el código fuente y ejecutada de forma independiente) en 10 casos que abarcan elevación, acimut, hora local y dos conjuntos de coeficientes (el predeterminado de kshana + el de RTKLIB), con una diferencia < 1e-4 m. El lector de mapas de TEC (TEC: contenido total de electrones) IONEX (formato de intercambio de mapas de la IONosfera) para archivos GIM (mapa global de la ionosfera) ya existe (src/ionex.rs, parse_ionex con interpolación espacial bilineal y temporal y un mapeo oblicuo, probado con pruebas unitarias en el propio crate); una comprobación cruzada de esa interpolación frente a un producto GIM real de CODE (Center for Orbit Determination in Europe) sigue pendiente. El propio modelo difundido está validado externamente. |
| Núcleo de detección RAIM/ARAIM (ARAIM: monitorización autónoma avanzada de la integridad por el receptor) (χ² / χ² no central / normal) → umbrales y multiplicadores | validated |
src/raim.rs: el umbral de detección de instantánea / separación de soluciones / ARAIM (chi2_quantile), la no centralidad de detección omitida pbias=√λ (noncentral_chi2_cdf) y los multiplicadores K_fa/K_md/K_V (normal_quantile) se evalúan todos a partir de una función gamma incompleta regularizada sin dependencias. Referencia independiente externa (tests/raim_reference.rs): 171 casos reproducen SciPy 1.17.0 (scipy.stats.chi2/.ncx2/.norm + optimize.brentq, una implementación independiente de Cephes/Boost, con un algoritmo distinto) en los rangos operativos de P_fa / P_md / redundancia, con una diferencia relativa ≤ 1e-6. La geometría que envuelve el núcleo (la pendiente/covarianza de (GᵀG)⁻¹) es el núcleo DOP validado con gnss_lib_py. Alcance: esta fila fija el núcleo estadístico. El valor del nivel de protección de la asignación MHSS (separación de soluciones de hipótesis múltiples) de ARAIM se fija por separado frente al ejemplo resuelto publicado por el subgrupo técnico ARAIM del WG-C (Grupo de Trabajo C) (tests/araim_reference_vectors.rs, VPL (nivel de protección vertical) 18,2926 m frente a 18,3 m, HPL (nivel de protección horizontal) 13,4063 m frente a 13,45 m, dentro de la propia tolerancia de 0,05 m de la referencia; véase la nota de normas más abajo y ARAIM_REFERENCE.md). |
| Nivel de protección SBAS (sistema de aumentación basado en satélites) (DO-229E, Apéndice J) → nivel de protección horizontal / vertical (HPL / VPL) | validated |
src/sbas.rs: sbas_protection_level, el D=(GᵀWG)⁻¹ de mínimos cuadrados ponderados (LS: mínimos cuadrados) → eje mayor de la elipse de error horizontal + σ vertical, escalados por los factores K de DO-229E. Referencia independiente externa (tests/sbas_reference.rs): el HPL de kshana reproduce la bifurcación SBAS-PL de RTKLIB (zsiki/rtklib_ws waasprotlevels(), la implementación «DO-229D Appendix J» de Siki y Takács 2017), ejecutada por rnx2rtkp -ws sobre datos reales de EGNOS (Servicio Europeo de Navegación por Complemento Geoestacionario) (mensajes difundidos del GEO (órbita geoestacionaria) PRN120 + RINEX (formato de intercambio independiente del receptor) real de BUTE/Budapest, 2017-02-19), en 6 épocas con una diferencia < 2e-3 m. La σ por satélite es el presupuesto SBAS completo de la propia referencia independiente (UDRE (error diferencial de distancia del usuario) + GIVE (error vertical ionosférico en malla) iono + tropo + a bordo). Se compiló ESA gLAB v6.0.0 (core/filter.c) y se confirmó que usa la misma convención. Nota sobre K_V: ambas referencias independientes redondean el K_V de MOPS (estándares mínimos de desempeño operativo) → 5,33; kshana usa el exacto Φ⁻¹(1−5e-8)=5.3267 (VPL ~0,06 % menor), por lo que la componente vertical se valida como el d_U sin factor K (= VPL de la referencia independiente / 5,33). El HPL se compara directamente (K_H = 6,0 en ambos lados). |
| Geometría real de constelaciones a partir de TLE (línea 2 / kepleriano) | validated (análisis sintáctico) |
src/tle.rs: analiza los elementos keplerianos medios de la línea 2 (semieje mayor a partir del movimiento medio); un conjunto de elementos conocido de la ISS (Estación Espacial Internacional) recorre el ciclo de ida y vuelta hasta los elementos y el periodo correctos. Para un bloque de solo línea 2, la propagación es la de dos cuerpos del motor (+ J2 opcional) de los elementos medios: válida para una instantánea desde una época común, y se aleja de SGP4 (Simplified General Perturbations 4) con el tiempo. |
| Propagación SGP4 / SDP4 (Simplified Deep-space Perturbations 4) (TLE completos) | validated |
src/sgp4.rs: SGP4 completo para órbita cercana a la Tierra + SDP4 para espacio profundo (secular/periódico lunisolar + resonancia geopotencial de 12 h / 24 h). Validado en tests/sgp4_verification.rs frente a los vectores oficiales de AIAA (Instituto Americano de Aeronáutica y Astronáutica) 2006-6753 («Revisiting Spacetrack Report #3») — los 666 estados de referencia (órbita cercana, espacio profundo, resonantes, casos de códigos de error) coinciden con un error de posición en el peor caso de ≈ 4,1 mm. Un conjunto completo de dos líneas (línea 1 + línea 2) se propaga con SGP4; el de solo línea 2 sigue siendo kepleriano; ambos pueden mezclarse. El marco es TEME (ecuador verdadero, equinoccio medio), usado de forma coherente para el usuario y los satélites (sin reducción TEME→ECEF (ECEF: centrado en la Tierra y fijo a ella); adecuado para la geometría de disponibilidad/DOP). |
| Nutación IAU (Unión Astronómica Internacional) 2000A / 2000B + reducción TEME→GCRS (GCRS: Sistema de Referencia Celeste Geocéntrico) | validated |
src/nutation.rs: la serie completa IAU 2000A (678 términos lunisolares + 687 planetarios, nutation_iau2000a) y el truncamiento 2000B de 77 términos (nutation_iau2000b) se validan cada uno bit a bit frente a los vectores de referencia publicados de SOFA/ERFA (SOFA: Standards of Fundamental Astronomy) en JD_TT 2453736,5: eraNut00a da Δψ = −0.9630909107115518e-5, Δε = 0.4063239174001679e-4; eraNut00b da Δψ = −0.9632552291148363e-5, Δε = 0.4063197106621160e-4, ambos con una diferencia de 1e-13 rad. La tabla 2000A se genera automáticamente a partir del código fuente nut00a de ERFA mediante tools/gen_nut00a.py (reproduce bit a bit el nutation_iau2000a_data.rs confirmado). La matriz de nutación (iauNumat), la ecuación de los equinoccios y la cadena completa TEME→TOD→MOD→GCRS (TOD: verdadero de la fecha; MOD: medio de la fecha) (teme_to_gcrs, Vallado AIAA-2006-6980) se prueban en cuanto a rotación propia, ida y vuelta y propiedades de precesión más nutación; la matriz de nutación frente a numat de ERFA elemento a elemento con una diferencia de 1e-14, y toda la cadena TEME→GCRS frente al ejemplo TEME→GCRF publicado de Vallado (AIAA 2006-6753, 2004-04-06) con una diferencia de 0,11 m (tests/frame_reference_vectors.rs); hasta que se añadió esa comprobación de extremo a extremo, la matriz de nutación llevaba Δψ con el signo equivocado, un giro de 2·Δψ (unos 25″) que las pruebas de propiedades no podían ver (véase CHANGELOG, Unreleased, Fixed); 2000A y 2000B coinciden con una diferencia < 1 mas, como se exige. La cadena está basada en el equinoccio/GMST (GMST: tiempo sidéreo medio de Greenwich); la reducción CIO (X,Y,s) libre de equinoccio y su comprobación numérica cruzada independiente con ANISE/SPICE (ANISE: Attitude, Navigation, Instrument, Spacecraft, Ephemeris, un conjunto de herramientas de geometría planetaria en Rust puro; SPICE: Spacecraft, Planet, Instrument, C-matrix, Events) (≤ 3,6 m en órbita GNSS, muy dentro del objetivo de < 10 m) están en la fila CIO de más abajo. |
| Modelo geomagnético del campo principal IGRF-14 (IGRF: Campo Geomagnético Internacional de Referencia) | validated |
src/igrf.rs: el campo en armónicos esféricos con normalización de Schmidt de la IAGA (Asociación Internacional de Geomagnetismo y Aeronomía) (grado/orden 13, 2025,0 + variación secular; coeficientes generados automáticamente a partir del igrf14coeffs.txt oficial mediante tools/gen_igrf.py, reproduciendo igrf_data.rs bit a bit). Validado en cinco frentes independientes: (1) comprobaciones puntuales exactas de coeficientes frente al archivo de la IAGA (g₁⁰=−29350,0, g₁¹=−1410,3, h₁¹=4545,5 nT); (2) la síntesis de grado 1 reproduce el campo del dipolo inclinado exacto de forma cerrada (B_r,B_θ,B_φ) con una diferencia de 1e-6; (3) el campo analítico completo de grado 13 es igual a −∇V del potencial escalar (diferencias finitas, con una diferencia de 1e-4), ejercitando de extremo a extremo las derivadas de Legendre y el término 1/sinθ; (4) el eje del dipolo reproduce el polo norte geomagnético conocido (~80,7°N, −72,7°E) y la intensidad del dipolo (~29,7 µT), y el campo global se sitúa en la banda física de 22–67 µT con el signo correcto de la inclinación en cada hemisferio; y (5) referencia independiente externa: la síntesis completa reproduce los valores del servicio web IGRF-14 del British Geological Survey en 2025,0 (altitud geodésica WGS-84 (WGS: Sistema Geodésico Mundial)) con una diferencia < 2 nT en X/Y/Z/F y < 0.02° en D/I en cuatro puntos, incluido uno a 400 km de altitud (synthesis_matches_the_official_bgs_igrf14_values_at_2025). |
| Reducción GCRS↔ITRS (ITRS: Sistema de Referencia Terrestre Internacional) IAU 2006/2000A basada en CIO | validated |
src/cio.rs: la cadena celeste-a-terrestre libre de equinoccio. Las coordenadas del CIP (Polo Intermedio Celeste) (X, Y) y la serie del localizador de CIO s de 66 términos se validan bit a bit frente al vector publicado de SOFA/ERFA eraXys06a en JD_TT 2453736,5: X=0.5791308482835292617e-3 (1e-14), Y=0.4020580099454020310e-4 (1e-15), s=-0.1220032294164579896e-7 (1e-18); la matriz GCRS→CIRS (CIRS: Sistema de Referencia Intermedio Celeste) frente a eraC2ixys (los nueve elementos con una diferencia de 1e-12); el ángulo de rotación terrestre (ERA) frente a eraEra00(2400000.5, 54388.0) = 0,4022837240028158102 (1e-12). La tabla s se genera automáticamente a partir de la referencia s06.c de ERFA mediante tools/gen_s06.py (reproduce cio_s06_data.rs bit a bit). La gcrs_to_itrs_matrix completa (CIO eraC2tcio = movimiento polar · ERA · GCRS→CIRS) se prueba en cuanto a rotación propia e ida y vuelta, y se muestra coherente con la reducción TEME heredada de equinoccio/GMST-1982 dentro de 1 m a un radio de 7.000 km (las convenciones difieren en unos 5 cm allí). Comprobación cruzada independiente de terceros (xval/anise-frames/): la misma gcrs_to_itrs_matrix se compara con ANISE (la reimplementación en Rust puro de NAIF/SPICE (NAIF: Navigation and Ancillary Information Facility)) rotando GCRF→ITRF93 (GCRF: Marco de Referencia Celeste Geocéntrico; ITRF93: Marco de Referencia Terrestre Internacional 1993) a partir de earth_latest_high_prec.bpc del JPL (Laboratorio de Propulsión a Chorro), con parámetros idénticos de orientación terrestre finals2000A del IERS (Servicio Internacional de Rotación de la Tierra y Sistemas de Referencia) aplicados a ambos lados, en ocho épocas trimestrales de 2020–2023. Las dos realizaciones independientes del marco coinciden con una rotación relativa máxima de 0,028″ — ≤ 0,86 m sobre el suelo, ≤ 0,93 m en LEO (órbita terrestre baja), ≤ 3,6 m en órbita GNSS (ángulo medio 0,023″). Esta es la comprobación cruzada de marcos de «< 10 m» de la ROADMAP, entregada; el residuo es la diferencia esperada de modelo/datum entre ITRF93 y el CIO de IERS-2010, no un defecto (el ancla bit a bit sigue siendo los vectores SOFA/ERFA anteriores). ANISE es un crate con licencia MPL-2.0 (MPL: Mozilla Public License) / edición 2024, por lo que la comprobación reside en un subcrate independiente, excluido del espacio de trabajo, que nunca toca el grafo de dependencias publicado de kshana ni ninguna puerta de CI por defecto. |
| Exportación de SP3 (Standard Product 3, el formato de órbitas precisas) de ida y vuelta (constelación → SP3-c → nuevo análisis) | validated |
tests/sp3_export_roundtrip.rs: la instantánea real de gps-ops de Celestrak (30 satélites GPS) se propaga con SGP4, se exporta a SP3-c (Sp3File::from_propagators → to_sp3_string), se vuelve a analizar (parse_sp3), y las posiciones ECEF recuperadas se comparan con la referencia SGP4 en cada época a lo largo de 24 h: peor residuo < 0,5 m (la serialización milimétrica del escritor; la tolerancia de 10 m de grado TLE (TLE: conjunto de elementos de dos líneas) del hito se alcanza con un amplio margen). La ruta de la CLI (interfaz de línea de comandos) --export-sp3 también está cubierta: el escenario de órbita incluido exporta un SP3 de 30 satélites que puede volver a analizarse, y un escenario que no es de órbita se rechaza. |
| Geometría real de la constelación GPS a partir de TLE (SGP4 → ECEF) | validated |
tests/igs_real_data.rs: una instantánea genuina de gps-ops de Celestrak (2021-07-28, 30 satélites GPS operativos; procedencia en tests/fixtures/celestrak/NOTICE) se analiza y cada satélite se propaga mediante el núcleo SGP4 validado hasta un instante común, rotado de TEME a ECEF. Afirma que toda la constelación cae sobre la capa MEO (órbita terrestre media) de GPS con una diferencia de 1%, y que desde un emplazamiento de cielo abierto de latitud media la vista real de todos los satélites (nueve satélites) da un PDOP de 1,64 con la dilución vertical superando a la horizontal (como debe ocurrir para un usuario en tierra). Esto ejercita SGP4 sobre una constelación real, junto a las rutas de datos reales SP3 (precisas) y RINEX (difundidas). |
| Generador Walker de elementos medios SGP4 | validated |
src/walker.rs: un patrón Walker-delta diseñado se emite como elementos medios SGP4 (movimiento medio de Kozai elegido para que el semieje mayor de SGP4 caiga sobre la capa objetivo) y se propaga mediante el núcleo validado. Pruebas: un Walker de 24 satélites de tipo GPS se sitúa sobre la capa MEO con una diferencia de 1%, los planos están separados exactamente 90° en RAAN (ascensión recta del nodo ascendente) recuperada de las normales de las órbitas, y el movimiento medio reproduce el periodo de ~718 min de la capa de GPS. |
| Barrido de PDOP de constelaciones + FoM (figuras de mérito) de cobertura/revisita | validated (monotonía) |
src/walker.rs: pdop_sweep tabula la cobertura y el PDOP mediano/peor sobre una malla {planes × sats × inclination}; coverage_revisit informa de la fracción de cobertura y de los huecos de revisita en un punto del suelo. Validado mediante las monotonías físicas que debe respetar un compromiso de diseño: añadir satélites nunca reduce la cobertura y reduce estrictamente el PDOP mediano (un diseño completo de 24 satélites cubre de forma continua con un PDOP de ~1,7), y densificar una constelación reducida disminuye estrictamente el peor hueco de revisita. El hueco medio de revisita nunca supera el máximo. Son tablas de compromiso geométrico, no un presupuesto de enlace/cobertura certificado. |
Planteamiento honesto: esta es una capa geométrica determinista (órbitas circulares, Tierra esférica de radio medio 6371 km, línea de visión pura). Establece la disponibilidad y la precisión de posición geométrica (dilución de la precisión × un presupuesto representativo de error de distancia) a partir de geometría real, no una solución de navegación con efemérides precisas. La referencia orbit-gnss-challenged.toml sitúa una nave dentro de la capa GNSS: solo mantiene una solución ~59% del día, el reloj cuántico mantiene una solución de temporización de 5 ns a través de todos los huecos (disponibilidad 1,0) mientras que el reloj a escala de chip mantiene ~0,73.
Propagador numérico (Cowell) y modelo de fuerzas#
El propagador numérico (src/propagator.rs) integra un modelo jerárquico de fuerzas (src/forces.rs) con los integradores adaptativos (src/integrator.rs). Cada término siguiente se valida frente a una verdad analítica o a una forma cerrada derivada a mano; las perturbaciones están desactivadas por defecto, de modo que los valores de referencia publicados no se alteran. El modelo compuesto también se comprueba de forma cruzada con otra herramienta: tests/numerical_cowell_propagator_reference.rs ejecuta 11 casos de LEO y GTO (órbita de transferencia geoestacionaria), 275 épocas horarias, frente al propagador DormandPrince853 de Orekit 12,2, y los niveles conservativos (dos cuerpos → J2–J6 → Sol/Luna → SRP de bola de cañón) coinciden con una diferencia en el peor caso de 0,08 m a lo largo de 24 h (VALIDATED en la matriz); el nivel de resistencia atmosférica solo está caracterizado (333 m) y sigue siendo MODELLED.
| Término | Estado | Evidencias |
|---|---|---|
| Propagador de Cowell frente a la verdad kepleriana analítica | validated |
src/propagator.rs: la órbita no perturbada (dos cuerpos) reproduce la solución kepleriana exacta de variable universal con una diferencia submétrica a lo largo de una órbita LEO de 24 h (un umbral más estricto que «frente a una referencia numérica < 10 m»); la energía específica y el momento angular se conservan con una diferencia relativa de ~1e-9; la regresión nodal por J2 reproduce la forma cerrada j2_secular_rates según la teoría de primer orden (dentro del 2 %, el residuo O(J2²)). solve_kepler_checked devuelve Err en lugar de una respuesta silenciosamente errónea cuando Newton no converge (cerca del perigeo, e = 0,999). El solve_kepler_robust robusto (arranque de Markley 1995, src/kepler.rs) converge allí y en 0 ≤ e ≤ 0,999999, dentro de 0,9 ε·|E| de las raíces de mpmath de 50 dígitos (tests/kepler_mpmath_oracle.rs). |
| Integradores adaptativos (RK4 (Runge–Kutta de cuarto orden) con duplicación de paso + el par embebido de Dormand–Prince RK5(4), DP5(4) más abajo) | validated |
src/integrator.rs: RK4 integra y' = y → e con una diferencia < 1e-9, muestra una caída del error de ~16× por cada paso reducido a la mitad (convergencia de 4.º orden) y conserva el oscilador armónico a lo largo de un periodo. La estimación de error embebida de DP5(4) es O(h⁵) (reducir el paso a la mitad la divide por ~32), integra el oscilador durante 50 periodos conservando la energía con una diferencia < 1e-6, y alcanza el mismo punto final con la misma tolerancia en menos evaluaciones de función que la duplicación de paso; propagate_dopri supera el mismo umbral kepleriano submétrico y coincide con la ruta RK4 con una diferencia < 1 m en una órbita J2..J6. DOP853 (integrate_dop853): el par 8(5.3) de Hairer con salida densa reproduce paso a paso el DOP853 de SciPy 1.18.1 (un solo paso con una diferencia de 5.6e-15; recuentos de pasos idénticos en las ejecuciones de e = 0,7 y de Arenstorf, un cambio de aceptar/rechazar en 501 pasos en la ejecución LEO; estados finales con una diferencia de 1.6e-12) y coincide con la solución kepleriana exacta tan de cerca como lo hace SciPy (tests/dop853_scipy_oracle.rs). |
| Campo de armónicos zonales J2–J6 | validated |
src/forces.rs: zonal_accel se comprueba de tres maneras: se reduce al j2_accel validado con 666 vectores hasta la precisión de máquina cuando se restringe a [J2]; coincide con el gradiente numérico de su propio potencial zonal a través de todo el campo J2..J6 (el patrón oro de los campos conservativos); y los términos impares J3 frente a los pares J2/J4..J6 muestran la (anti)simetría norte–sur característica bajo z → −z. Una órbita J2..J6 propagada conserva la energía total con una diferencia de ~1e-8 a lo largo de un día. |
| Gravedad de tercer cuerpo (Sol y Luna) | validated |
src/forces.rs + src/ephem.rs: third_body_accel coincide con el gradiente exacto de su potencial perturbador, se anula en el geocentro y alcanza las magnitudes de LEO de los manuales (~5e-7 m/s² el Sol, ~1.1e-6 m/s² la Luna). La efeméride solar de baja precisión de Montenbruck–Gill alcanza los anclajes J2000 derivados a mano (distancia al perihelio ≈ 1.471e11 m, declinación en el solsticio de ~−23°, movimiento de ~1°/día); la efeméride lunar permanece dentro de su envolvente de perigeo/apogeo, recupera la distancia media de ~384.400 km, nunca supera la inclinación de 5,3° y vuelve a estar a menos de 1° tras un mes sidéreo. El cableado del lado derecho (RHS) dirigido por época es exacto bit a bit (el término del RHS es igual a third_body_accel en la posición muestreada en t = 0 y t = 1 día), y un desplazamiento de época de un cuarto de año produce una trayectoria distinta. |
| Presión de radiación solar (SRP) + sombra cónica | validated |
src/forces.rs: srp_accel (ν·P☉·cᵣ·(A/m)·(AU/d)²·d̂ de bola de cañón) es idéntico bit a bit a la forma cerrada a pleno sol, fija la presión de radiación a 1 AU (AU: unidad astronómica) en ≈ 4.5398e-6 N/m², se sitúa en la banda de LEO de ~1.36e-7 m/s² empujando en sentido contrario al Sol, se reduce a la cuarta parte cuando se duplica la distancia al Sol (inversa del cuadrado) y es exactamente cero en lo profundo de la umbra. conical_shadow da ν = 1 a pleno sol y ν = 0 en umbra total (exacto), con una penumbra suave y monótona que sube de 0 → 1 a lo largo de la banda [b−a, b+a], que se extiende más allá del cilindro umbral. |
| Resistencia atmosférica (primer término dependiente de la velocidad) | validated |
src/forces.rs: atmospheric_density (Vallado, Tabla 8-4, exponencial por tramos) se ancla en 1,225 kg/m³ a nivel del mar, se satura por debajo de la superficie, decrece de forma monótona a lo largo de LEO, se sitúa en la banda de ~1e-12 kg/m³ a 400 km con una altura de escala recuperada físicamente de ~58 km; drag_accel se opone a la velocidad relativa corrotante con la magnitud de LEO de ~2e-6 m/s². La comprobación distintiva: una órbita de 300 km pierde energía específica de forma monótona y su semieje mayor decae unos km/día acotados, mientras que la línea base en vacío conserva la energía con una diferencia < 1e-9. |
| Corrección relativista postnewtoniana (Schwarzschild) | validated |
src/forces.rs: relativistic_accel (forma de IERS β = γ = 1 a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}) colapsa en una órbita circular a la forma cerrada 3μ²/(c²r³)·r̂ (componentes radial, hacia afuera, y fuera del eje exactamente nulas), muestra la razón ≈1.9e-9 de LEO respecto a dos cuerpos de los manuales, coincide con la forma simplificada a mano de velocidad radial μ(4μ + 3v²r)/(c²r³) con una diferencia < 1e-12, y en el propagador perturba la órbita manteniendo el semieje mayor por debajo de un metro/día: lo opuesto conservativo del decaimiento por resistencia. |
Alcance honesto: los valores por defecto publicados de ForceModel integran el campo zonal. El campo teseral EGM2008 de alto grado (src/gravity_sh.rs, grado/orden 70), las mareas sólida/oceánica/atmosférica (src/tides.rs) y el término de arrastre de marcos de Lense–Thirring están ahora implementados y compuestos en el modelo de fuerzas preciso de ajuste de efemérides (src/precise_od.rs; véase más abajo). El campo teseral es también un término opcional del ForceModel de Cowell (propagator::Geopotential, desactivado por defecto), validado frente a HolmesFeatherstoneAttractionModel de Orekit 12,2 hasta grado/orden 70 (6 casos a lo largo de 24 h, peor |Δr| 0,036 m; tests/cowell_tesseral_orekit_oracle.rs). Existen dos evaluadores del campo: el histórico acceleration (parciales esféricas; válido hasta el grado ~180 lejos de los polos; salidas fijadas) y acceleration_hf (columna directa modificada de Holmes–Featherstone 2002, gradiente sin 1/cos φ; válido hasta el grado 2190 en cualquier latitud). EGM2008 hasta 2190 se carga en tiempo de ejecución (from_gfc_file, scripts/fetch_egm2008.sh, no incluido). acceleration_hf coincide con Orekit 12,2 con una diferencia de 7.3e-17 m/s² en ocho puntos hasta el grado 2190; sigue siendo MODELLED porque pyshtools no alcanzó el umbral preregistrado cerca de los polos (una comprobación con mpmath sitúa el error en pyshtools; xval/high-degree-gravity/). Una órbita de 200×200 durante 24 h coincide con Orekit con una diferencia de 0,13 m, pero su control de sensibilidad preregistrado de grado 70 no se alcanzó (0,73 m < 1 m), por lo que los grados 71–200 están caracterizados, no validados, en órbita (xval/cowell-tesseral-200-orekit/). La densidad termosférica NRLMSISE-00 (NRLMSISE: modelo de atmósfera extendida con espectrómetro de masas y radar de dispersión incoherente del Laboratorio de Investigación Naval) está portada (src/nrlmsise00.rs: idéntica bit a bit al port en C de dominio público en 720 puntos, dentro de una diferencia relativa de 1.9e-6 respecto a pymsis, y reproduce los 17 casos de prueba publicados; tests/nrlmsise00_reference.rs) y es un nivel opcional de densidad de resistencia (forces::DensityModel, ForceModel::drag_density; por defecto sigue siendo el modelo estático de Vallado). Esto valida el port, no la exactitud del modelo frente a la densidad medida. El Sol y la Luna de DE440 (DE: efeméride de desarrollo) son un nivel opcional de efemérides (ForceModel::with_ephemeris). La sombra de SRP con Tierra achatada WGS-84 es opcional (ForceModel::srp_shadow), y coincide con la razón de iluminación de Orekit 12,2 con una diferencia de 7.4e-9 en 2400 geometrías (tests/srp_oblate_shadow_orekit_oracle.rs); su variante con oscurecimiento de limbo no tiene referencia independiente externa (MODELLED). El nivel de resistencia NRLMSISE-00 coincide con la propia resistencia NRLMSISE-00 de Orekit 12,2 a lo largo de 24 h con una diferencia de 0,03 m frente a un desplazamiento por resistencia de hasta 142 km (tests/drag_tier_orekit_oracle.rs, VALIDATED bajo las convenciones compartidas). Una comprobación cruzada con GMAT (General Mission Analysis Tool) sigue siendo un trabajo posterior.
Mareas sobre el geopotencial (src/tides.rs)#
Correcciones dependientes del tiempo ΔC̄_nm, ΔS̄_nm de los coeficientes de Stokes (IERS Conventions 2010, capítulo 6), validadas frente a las cifras publicadas por las propias convenciones, no frente a otra herramienta.
| Contribución | Estado | Evidencias |
|---|---|---|
| Marea terrestre sólida (IERS Ec. 6,6 / 6.8b / 6,14) | validated |
tests/tides_iers.rs: la marea permanente (de frecuencia cero) ΔC̄₂₀ queda dentro del 1 % del valor publicado por IERS de −4,1736×10⁻⁹ (números de Love anelásticos); el ejemplo resuelto K1 del paso 2 se reproduce bit a bit (amplitudes sen/cos 470,9 / −30,2 ×10⁻¹² con una diferencia de 0,1×10⁻¹²); la ruta de Legendre normalizada se fija con valores a mano de forma cerrada, independientes de la recurrencia. |
| Marea oceánica (IERS Ec. 6,15, FES2004 (atlas de mareas de solución de elementos finitos 2004), 8 constituyentes) | validated |
El subconjunto incorporado de FES2004 (tools/gen_fes2004.py → src/fes2004_data.rs, análisis de Doodson→multiplicador) reproduce exactamente los coeficientes de la fuente M2 (2.2); la fase de Doodson de K1 es igual a θ_g + π; la magnitud sectorial de grado 2 es física y un orden inferior a la de la marea sólida. |
| Marea atmosférica S2 (Ray 2001, NASA (Administración Nacional de Aeronáutica y del Espacio) GSFC (Centro de Vuelo Espacial Goddard)) | validated |
Los armónicos de Ray incorporados se convierten mediante la relación de carga superficial (Ec. 6,21) a un ΔC̄₂₂ máximo ≈ 4×10⁻¹¹ (~10 % del término oceánico M2). Salvedad honesta: no existe una referencia independiente publicada de coeficientes de geopotencial para la marea atmosférica, de modo que se valida por integridad de la fuente + magnitud, un umbral más débil que el de las mareas sólida/oceánica. |
Maniobras y diseño de trayectorias (src/maneuver.rs)#
| Aspecto | Estado | Evidencias |
|---|---|---|
| ΔV impulsivo + propagación de covarianza | validated |
Una discontinuidad de velocidad con una covarianza de 6×6 arrastrada hacia adelante (encendido determinista ⇒ STM (matriz de transición de estado) identidad; la covarianza del error de ejecución se rota desde el sistema del encendido —ECI (inercial centrado en la Tierra) o LVLH (vertical local, horizontal local)— al bloque de velocidad). |
| Integración de encendido finito frente a Tsiolkovsky | validated |
Integración de empuje constante sobre un arco de encendido (la masa como estado) cuyo ΔV alcanzado coincide con la ecuación de cohete de Tsiolkovsky de forma cerrada con una diferencia inferior al 0,01 %. |
| Solucionador de Lambert (Izzo 2015) de ida y vuelta | validated |
La salida de Lambert de una sola revolución (r1, r2, tiempo de vuelo ⇒ v1, v2) se recorre de ida y vuelta con el propagador kepleriano exacto de variable universal: debe volver a caer en r2. |
| Barrido porkchop frente al suelo de Hohmann | validated |
El mínimo de la malla de C3 de lanzamiento × llegada / V∞ de llegada se comprueba frente al suelo analítico de C3 de la transferencia de Hohmann para dos órbitas circulares coplanares. |
| Solucionador de Lambert frente a una biblioteca independiente | validated |
tests/lambert_reference.rs: 13 transferencias de una sola revolución de LEO a GEO y a heliocéntrica, prógradas y retrógradas, frente a lamberthub 1.0.0 izzo2015; peor diferencia de velocidad en el contorno 7e-12 m/s. |
Alcance honesto: sin optimizador de trayectorias, sin ramas de Lambert multirrevolución y con un modelo heliocéntrico sintético circular coplanar (sin efemérides planetarias DE, por lo que no se ha ejecutado una comprobación cruzada de C3 Tierra–Marte con GMAT).
Determinación de órbita (OD) (src/orbit_determination.rs, src/batch_ls.rs)#
| Aspecto | Estado | Evidencias |
|---|---|---|
| Corrector por lotes de Gauss–Newton | validated |
El solucionador genérico gauss_newton alcanza la solución exacta de mínimos cuadrados ponderados en un ajuste lineal, recupera los parámetros verdaderos en un ajuste no lineal a·exp(b·t) y resuelve una multilateración de distancias en 3-D a partir de distancias sin ruido. |
| Determinación de órbita por lotes a partir de distancias | validated |
determine_orbit_batch recupera [r, v] a partir del seguimiento de distancias desde una estación terrestre (propagado con el modelo de fuerzas de dos cuerpos + J2) con una precisión submétrica / mm·s⁻¹ con distancias sin ruido, y de ~2 m con un residuo posterior al ajuste en el suelo de ruido de 5 m: la firma de un ajuste de mínimos cuadrados consistente. |
| OD secuencial (filtro unscented) | validated |
determine_orbit_sequential recupera recursivamente el estado con una diferencia de decenas de metros con la misma dinámica y el mismo modelo de distancias. |
| OD por lotes y secuencial frente a un estimador independiente | validated |
tests/batch_sequential_orbit_determination_reference.rs: 8 escenarios (6 sin ruido de LEO/MEO/excéntricas con 3–4 estaciones, 2 con σ = 5 m) frente a los estimadores de mínimos cuadrados por lotes y de Kalman de Orekit 12,2 con un modelo de fuerzas equivalente; peor caso por lotes 1e-3 m / 1e-6 m/s, secuencial 0,9 m. |
| OD por lotes de velocidad de distancia / acimut-elevación con una máscara de elevación | modelled (comparación externa, un umbral preregistrado no alcanzado) | tests/od_tracking_measurements_reference.rs: 8 escenarios frente a los mínimos cuadrados por lotes de Orekit 12,2 con medidas geométricas instantáneas personalizadas; conjuntos visibles idénticos, valores de medida dentro de 5.8e-8 m / 6.3e-10 m/s / 1.4e-13 rad, matriz de transición de estado dentro de 1.2e-14, estados con ruido dentro de 1,74 cm y RMS por tipo dentro de 2.7e-4; el umbral preregistrado de estado sin ruido ≤ 1 cm no se alcanza en 2 de 4 escenarios (1,46 y 1,74 cm; la propia estimación de Orekit se sitúa a esa distancia de su verdad simulada, la de kshana dentro de 1e-8 m). Véase xval/od-measurements-orekit/RESULTS.md. |
Alcance honesto: la OD didáctica usa estaciones inerciales fijas, un marco topocéntrico de Tierra esférica y medidas geométricas instantáneas (sin tiempo de luz, aberración, refracción ni rotación terrestre); la matriz de transición de estado de la ruta de velocidad de distancia/ángulos es variacional (integrada con RK4 con parciales analíticas de dos cuerpos + J2), no de forma cerrada; no hay filtro secuencial para velocidad de distancia ni para ángulos. La ruta solo de distancias conserva su jacobiano por diferencias finitas. (El motor de ajuste de efemérides de fuerza completa de más abajo lleva su propia matriz de transición de estado variacional.)
Validación del modelo de fuerzas mediante ajuste de efemérides (src/precise_od.rs)#
Un estimador preciso de mínimos cuadrados por lotes de observaciones de posición con fuerza completa: el geopotencial teseral EGM2008 (evaluado en el marco fijo a la Tierra mediante la reducción CIO) compuesto con el tercer cuerpo Sol/Luna, SRP, resistencia, GR (relatividad general) de Schwarzschild/Lense–Thirring y las mareas anteriores, ajustado a un seguimiento de posiciones inerciales con un jacobiano de matriz de transición de estado variacional. Validado con datos sintéticos, en los que la verdad es el propio integrador de Kshana, de modo que todo residuo es del estimador y no de la dinámica.
| Aspecto | Estado | Evidencias |
|---|---|---|
| Composición precisa del modelo de fuerzas | validated |
tests/precise_od_synth.rs: el campo de grado 0 es la masa puntual exacta en cada época (el término central es invariante a la rotación); el grado 8 añade el achatamiento de la banda J2; el tercer cuerpo del Sol y el término de marea se conectan con fidelidad bit a bit; una aceleración empírica radial constante es puramente radial en RTN (radial, transversal, normal). |
| Matriz de transición de estado variacional | validated |
Cada columna de Φ a lo largo de media órbita LEO (geopotencial de grado 8 + Sol + Luna) coincide con una repropagación independiente por diferencias finitas centrales (FD) de arco completo con una diferencia < 1×10⁻⁶ relativa tanto en la respuesta de posición como en la de velocidad: la comprobación cruzada documentada STM↔FD. Φ(0) = I; los propagadores aumentado y simple coinciden por debajo del milímetro. |
| Autorrecuperación del ajuste por lotes de mínimos cuadrados | validated |
Un arco de Kshana de 1 hora (grado 6 + Sol + Luna) observado sin ruido se recupera desde un desfase de 150 m / 0,1 m·s⁻¹ hasta un estado de época dentro de 1×10⁻² m con un RMS posterior al ajuste casi nulo; con ruido blanco de 5 m el RMS 3-D posterior al ajuste se estabiliza en el suelo de ruido de ~σ, sin sesgo. El C_R de SRP se recupera de 1,0 hasta dentro del 1 % de la verdad de 1,4. |
| Edición de valores atípicos e informe en RTN | validated |
Un error grosero de 500 m se rechaza mediante la edición posterior al ajuste a 5 σ (exactamente una observación), dejando un ajuste limpio de nivel milimétrico; los residuos se informan descompuestos en radial/transversal/normal además de en 3-D. |
| Nivel de aceleración empírica (RTN constante + 1-CPR (CPR: ciclo por revolución)) | validated |
Los nueve parámetros empíricos con restricción a priori se mantienen por debajo de 1×10⁻⁸ m·s⁻² sobre una verdad sin componentes empíricos sin perturbar el ajuste; una aceleración constante transversal de 3×10⁻⁸ m·s⁻² inyectada en la verdad se recupera con una diferencia dentro del 20 %. |
Alcance honesto: la onda sintética usa parámetros de orientación terrestre nominales (EOP: UT1 (Tiempo Universal 1, tiempo de rotación terrestre) ≈ TT (Tiempo Terrestre), sin movimiento polar): exactos para la autorrecuperación, ya que el mismo modelo genera y ajusta el arco. Las validaciones con conjuntos de datos de agencias superponen EOP finals2000A reales y la verdad SP3/SPK (SPK: núcleo de efemérides planetarias) sobre este motor a través de la cadena de marcos CIO (src/eop.rs, tests/agency_galileo.rs, tests/agency_swarm.rs, tests/agency_lro.rs).
Órbitas precisas reales de agencias (tests/agency_galileo.rs, tests/agency_swarm.rs, tests/agency_lro.rs)#
| Conjunto de datos | Estado | Evidencias |
|---|---|---|
| Galileo MEO — < 5 m GREEN | validated |
El motor de fuerza completa de Kshana ajustado a un tramo literal de la propia órbita final de ESA/ESOC (ESOC: Centro Europeo de Operaciones Espaciales) (ESA0MGNFIN, ITRF (Marco de Referencia Terrestre Internacional)) para E11 de Galileo a lo largo de 8 h, con cada posición ITRF rotada a GCRS con EOP finals2000A reales: RMS 3-D 0,133 m posterior al ajuste con fuerza pura + C_R (RTN 0.105/0.067/0.047 m, C_R 1,174), 0,070 m con el nivel empírico, a partir de un solapamiento bruto de 78,7 km. El arco completo de 24 h da 0,611 m. Todo muy por dentro del umbral de 5 m. Campo de gravedad convergido con grado/orden 8 (idéntico con grado/orden 8/10/12); el trabajo workflow_dispatch ejecuta el grado/orden 70 completo. Procedencia + SHA-256 (SHA: algoritmo de hash seguro) en tests/fixtures/agency/NOTICE.md; registro completo en docs/AGENCY-ORBIT-VALIDATION.md. |
| Swarm-A LEO — < 5 m GREEN | validated |
Motor de fuerza completa (+ resistencia atmosférica) ajustado a un tramo literal de la propia órbita precisa de dinámica reducida de Swarm-A de la ESA (SW_OPER_SP3ACOM_2_, L47, ITRF, ~430 km, ~2 cm) a lo largo de 3 h con grado/orden 70, EOP finals2000A reales mediante la cadena CIO: nivel dinámico (solo estado, densidad estática, C_R=1) con un RMS 3-D 2,687 m posterior al ajuste (RTN 0.925/2.522/0.045 m; residuo ≈ resistencia pura a lo largo de la traza), nivel de dinámica reducida (+ aceleraciones empíricas CPR) 0,098 m (RTN 0.026/0.092/0.025 m); ~10 cm frente a la órbita de ~2 cm de la ESA. Procedencia + SHA-256 en tests/fixtures/agency/NOTICE.md; registro completo en docs/AGENCY-ORBIT-VALIDATION.md. |
| LRO (Lunar Reconnaissance Orbiter) lunar — validado, por encima de 5 m (honesto) | validated |
Ajuste del modelo de fuerzas centrado en la Luna (src/lunar_od.rs): el campo de gravedad GRGM660PRIM de GRAIL (grado/orden 100) en el marco lunar de ejes principales fijo al cuerpo (src/lunar_frame.rs, IAU 2015 Tierra media + el desfase fijo DE421 (efeméride de desarrollo 421) Tierra media → ejes principales (ME→PA), aplicado como lo define SPICE desde 0,36: hasta entonces se aplicaba en sentido contrario, con un error de unos 208″), + tercer cuerpo Tierra/Sol, ajustado mediante el mismo estimador genérico de Gauss–Newton que los conjuntos de datos terrestres a la órbita reconstruida real de JPL Horizons LRO (NAIF −85), 4 h / 241 épocas, ~98 km. Resultado honesto posterior al ajuste (0,36): dinámico 12,05 m (RTN 2.91/10.11/5.88), de dinámica reducida 6,67 m (RTN 3.41/4.58/3.44, empírico de 1+2 por revolución), a partir de un solapamiento bruto de 39,9 m (antes de la corrección ME→PA: 12,6 m, 6,65 m, 53,8 m): por encima del umbral de < 5 m, y no por culpa del estimador (idéntico con grado/orden 100/150 y atol 1e-6/1e-9). Una validación cruzada de grado DE (xval/anise-lunar-od: orientación lunar PA de DE440 (efeméride de desarrollo 440) + efeméride DE440 mediante ANISE) corrigió la afirmación sobre el factor limitante: dio 12,0 m dinámico y 6,67 m de dinámica reducida, que la pila analítica corregida ya reproduce en ambos niveles (la diferencia dinámica anterior, 12,6 → 12,0 m, era el error del desfase ME→PA), de modo que el suelo operativo no es la orientación/efeméride analítica sino un residuo irreducible del nivel empírico (lo más coherente con una dinámica no gravitatoria de LRO sin modelar en el arco corto); la pila analítica ligera ya iguala el grado DE para la órbita de dinámica reducida. Procedencia + SHA-256 en tests/fixtures/agency/NOTICE.md; registro completo en docs/AGENCY-ORBIT-VALIDATION.md. Validado frente a la verdad real de agencias: 3 de 3; alcanzan < 5 m: 2 de 3. |
Navegación por mapa gravitatorio / PNT alternativo (src/gravimeter.rs, src/mapmatch.rs, src/particle_filter.rs, src/altpnt/terrain.rs)#
| Aspecto | Estado | Evidencias |
|---|---|---|
| Campo de anomalías de gravedad en armónicos esféricos | validated |
src/gravimeter.rs: un campo de grado bajo totalmente normalizado, comprobado frente a las funciones de Legendre de forma cerrada (P̄₁₁ = √3·cosφ, P̄₂₀ = (√5/2)(3sin²φ−1), P̄₂₂ = (√15/2)cos²φ) y a una anomalía de un solo término derivada a mano de 1,897 mGal. |
| Modelo de medida del gravímetro de átomos fríos | validated (modelo) |
El suelo de ruido blanco se deriva de la ASD del acelerómetro CAI (σ = ASD/√τ), inyectado como una secuencia determinista con semilla (al comparador nunca se le entrega la verdad sin ruido, y aun así la ejecución es reproducible bit a bit). |
| Filtro de partículas de remuestreo por importancia secuencial | validated |
src/particle_filter.rs: el núcleo determinista se fija exactamente: ESS (tamaño efectivo de muestra) que abarca 1…N, remuestreo sistemático que elige índices en proporción al peso, la combinación convexa de la media ponderada, una verosimilitud gaussiana que lleva la estimación hacia la medida y el determinismo de la predicción con semilla. |
| Verosimilitud de ajuste al mapa + recuperación | validated |
src/mapmatch.rs: field_likelihood alcanza su máximo (= 1) en un ajuste perfecto y cae a e^(−½) a una sigma; un filtro de partículas sobre un parche distintivo de terreno sintético recupera la posición verdadera con una diferencia dentro de 0,1. |
| Benchmark de 60 minutos sin GPS | validated |
run_gps_denied_gravity_nav (scenarios/gps-denied-gravity-nav.toml): 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) mediante un comparador jerárquico de grueso a fino: reproducible bit a bit, estable entre realizaciones de ruido y demostrablemente limitado por el refinamiento (una única malla gruesa se estanca en ~2 km). |
Cargador de DEM (modelo digital de elevación) SRTM (Shuttle Radar Topography Mission) .hgt + muestreo bilineal (REFERENCIA INDEPENDIENTE A) |
validated |
src/altpnt/terrain.rs / tests/terrain_nav_validation.rs: un búfer .hgt de 2×2 construido a mano con esquinas [100.200;300.400] se interpola bilinealmente a exactamente 250,0 en el centro de la celda (referencia independiente de forma cerrada), el ciclo de ida y vuelta de 16 bits big-endian es exacto y la inversión de filas coloca la fila más al norte del archivo en la latitud almacenada más alta; todo frente a la especificación del controlador SRTMHGT (formato de archivo de alturas de la Shuttle Radar Topography Mission) de GDAL (Geospatial Data Abstraction Library) (16 bits con signo big-endian, orden por filas, fila norte primero, vacío -32768, https://gdal.org/en/stable/drivers/raster/srtmhgt.html). Un archivo de prueba incluido de 11×11 (tools/gen_terrain_fixture.py) ejercita el analizador en CI; y una tesela real SRTM v3 de dominio público de NASA/USGS (USGS: Servicio Geológico de los Estados Unidos) incluida (N36W117, Valle de la Muerte, diezmada a 6 segundos de arco, 722 KB, tests/fixtures/terrain/N36W117_sub6.hgt) se lee en CI (no ignorada, real_srtm_committed_badwater_tile_reads_real_relief), situando la cuenca de Badwater en ≈ −78 m dentro de la banda documentada de [−95,−70] m (levantamiento de NGS/NOAA (NGS: Servicio Geodésico Nacional; NOAA: Administración Nacional Oceánica y Atmosférica) ≈ −86 m) con el máximo de la tesela ≈ 2161 m: la fuente de verdad es el levantamiento y el DEM es lo que se prueba (no circular). Cotas publicadas puntuales más grandes (Mount Whitney 4421 m) permanecen en pruebas de tesela completa condicionadas por #[ignore]. |
| Convergencia de la navegación referida al terreno (TERCOM/SITAN (TERCOM: correlación de contornos del terreno; SITAN: navegación inercial asistida por terreno de Sandia)) (REFERENCIA INDEPENDIENTE B) | validated |
run_terrain_nav (scenarios/terrain-nav.toml): una deriva de INS inyectada derivada a mano (0,5°N, −0,4°E ≈ 70 km a una latitud de ~12°, calculada como deriva° × M_por_grado × cos lat) se recupera hasta < 500 m (dentro del suelo de resolución de la malla search_step/factor² ≈ 140 m), una reducción > 100× respecto a la inercial libre; comprobada frente al número inyectado, nunca frente al DEM (no circular), reproducible bit a bit y estable entre semillas de ruido. |
| Ganancia de fusión combinada de gravedad+magnético+terreno (REFERENCIA INDEPENDIENTE C) | validated |
run_combined_altpnt (scenarios/combined-altpnt.toml): tres canales escalares (Δg · anomalía cortical de |B| · elevación) fusionados como una verosimilitud producto dan un residuo acotado < 500 m durante la interrupción de 60 min que, promediado entre semillas, no es peor que el mejor canal individual (aditividad de la información / CRLB (cota inferior de Cramér–Rao) más baja). Se sitúa en el régimen publicado de «decenas de metros» de CEP (error circular probable) de TERCOM / navegación referida al terreno (TRN) (https://en.wikipedia.org/wiki/TERCOM; PeerJ 2024 ESKF-TERCOM (ESKF: filtro de Kalman de estado de error), https://peerj.com/articles/cs-3118/). |
Alcance honesto: el campo de gravedad es de grado bajo + mascones sintéticos, no el conjunto completo de coeficientes de EGM2008/EIGEN (EIGEN: modelo europeo mejorado de gravedad de la Tierra mediante nuevas técnicas); el canal magnético se apoya en el campo principal suave de IGRF más mascones de anomalías corticales sintéticos (un mapa cortical real de alta frecuencia es un trabajo posterior); el campo de terreno de CI para los benchmarks de solución de navegación es el DEM sintético autocontenido, mientras que el propio lector de .hgt ya se valida en CI frente a una tesela real SRTM v3 incluida (arriba); las teselas reales de resolución completa siguen condicionadas por #[ignore]. Un Monte Carlo del error de representación del mapa sigue siendo un trabajo posterior. Los tres navegadores están ahora conectados al motor de escenarios mediante kind= (gravity-map, terrain-nav, combined-altpnt).
Modelo de errores de INS / IMU — validación referida a hojas de datos (src/inertial/)#
El modelo de error estocástico de la IMU se valida frente a especificaciones publicadas de hojas de datos de fabricantes / de conjuntos de datos, nunca frente a un valor producido por la propia Kshana. El puente desde una especificación en unidades de campo hasta el modelo de ruido en SI (Sistema Internacional de Unidades) es la identificación estándar por desviación de Allan (Riley, NIST SP 1065 §5; IEEE (Instituto de Ingenieros Eléctricos y Electrónicos) Std 952): el coeficiente de paseo aleatorio N es la ADEV solapada leída en τ = 1 s sobre la pendiente τ⁻¹ᐟ², y el coeficiente de inestabilidad del sesgo es la meseta plana de Allan (tests/imu_allan_spec.rs, hermético, sin descargas).
| Aspecto | Estado | Evidencia / referencia independiente |
|---|---|---|
| Capa de conversión de unidades (el riesgo de no circularidad n.º 1) | validated |
Comprobado a mano: 0,15 deg/√hr = 4.3633e-5 rad/√s; 3,6 µg = 3.5304e-5 m/s²; 2,0 deg/hr = 9.6963e-6 rad/s. |
| Paseo aleatorio angular del giróscopo | validated |
El ARW del ADIS16465 de 0,15 deg/√hr (hoja de datos de Analog Devices) se recupera a partir de la ADEV(1 s) con una diferencia < 5%. |
| Paseo aleatorio de velocidad del acelerómetro | validated |
El VRW del ADIS16465 de 0,1 m/s/√hr se recupera con una diferencia < 5%. |
| Pendiente de Allan del ruido blanco | validated |
Pendiente log-log de la rama blanca del ADIS16460 −0,5 ± 0,05. |
| Meseta de inestabilidad del sesgo en funcionamiento | validated |
La inestabilidad del sesgo (BI) del giróscopo del ADIS16465 de 2,0 deg/hr se recupera como el mínimo plano de Allan con una diferencia < 15%. |
| Segundo perfil de IMU | validated |
NaveGo ADIS16488 (ARW 0,3 deg/√hr, VRW 0,029 m/s/√hr), ambos recuperados con una diferencia < 5%. |
Alcance honesto: esto valida el modelo de error estocástico frente a los coeficientes de Allan de las hojas de datos. El conjunto de datos de vehículo KF-GINS de i2Nav-WHU (WHU: Universidad de Wuhan) se usa como una comprobación aparte, condicionada a los datos: el EKF de estado de error de lazo cerrado y acoplamiento débil con el modelo de brazo de palanca GNSS es una fila VALIDATED de la matriz de verificación (EKF GNSS/INS de acoplamiento débil con brazo de palanca sobre el conjunto de datos KF-GINS), comparado con la trayectoria de referencia en C++ de KF-GINS bajo umbrales registrados antes de la ejecución. Se ejecuta solo donde se suministra el conjunto de datos (KSHANA_KFGINS_DIR); sin él se ejecutan las pruebas del cargador sintético y del brazo de palanca. Las variantes de acoplamiento fuerte y de fase de portadora no quedan cubiertas por esa fila (la fila de GNSS/INS de acoplamiento fuerte con fase de portadora es MODELLED).
PNT de espacio profundo y de Marte — fundamento D0 (src/body.rs, src/mars_frame.rs, src/ephem_provider.rs, src/radiometric.rs, src/timescales.rs)#
El primer hito del motor de navegación de espacio profundo: generalizar el núcleo, fijado a la Tierra, a un cuerpo central arbitrario, añadir la dinámica de Marte, una unión para proveedores de efemérides, tiempo submicrosegundo y las primitivas de tiempo de luz / retardo relativista. Todos los escenarios terrestres existentes son idénticos byte a byte: los valores de referencia de reproducibilidad multiplataforma (tests/cross_platform_golden.rs, tests/golden.rs) pasan sin cambios y sin regeneración, impuesto en cada commit.
| Término | Estado | Evidencias |
|---|---|---|
| Abstracción de cuerpo central (Tierra idéntica byte a byte) | validated |
src/body.rs: Body{mu,re,zonals,gravity,rotation,IAU-pole} con earth()/mars()/moon()/sun(). tests/mars_dynamics.rs afirma que two_body_accel_body(r,&Body::earth()) y zonal_accel_body son iguales a las funciones terrestres heredadas con igualdad exacta de bits (assert_eq!), y que un arco terrestre con ForceModel por defecto es idéntico byte a byte: los valores de referencia de reproducibilidad no cambian (mismo SHA, sin regeneración). |
| Gravedad de Marte (GMM-3 (GMM: Goddard Mars Model) teseral, fija al cuerpo) | validated (modelo) |
Body::mars_gmm3(nmax): zonales C̄20/C̄30/C̄40 a partir de J2/J3/J4 de MRO110 (solución de gravedad del Mars Reconnaissance Orbiter) (C̄n0=−Jn/√(2n+1), J2 recorre el ciclo de ida y vuelta hasta 1.9604e-3) + sectoriales/teserales de MRO110B2 C̄22/S̄22, C̄32/S̄32 (Konopliv et al. 2011; tabulados en Liu, Baoyin y Ma 2012), evaluados en el marco fijo al cuerpo de Marte de la IAU. tests/mars_dynamics.rs comprueba el ciclo de ida y vuelta, la desviación de escala J2 respecto a la masa puntual y que el campo es genuinamente fijo al cuerpo (una reorientación de un cuarto de día marciano cambia la aceleración inercial). El grado/orden superior se carga desde un .gfc incorporado mediante gravity_sh::from_gfc. |
| Marco fijo al cuerpo de Marte (polo IAU) | validated |
src/mars_frame.rs: la rotación IAU 3-1-3 R3(W)·R1(90°−δ0)·R3(90°+α0) (convención WGCCRE/NAIF (WGCCRE: Grupo de Trabajo sobre Coordenadas Cartográficas y Elementos de Rotación), igual que lunar_frame.rs). Pruebas: ortonormal con una diferencia de 1e-12 y det +1, identidad de ida y vuelta, el meridiano origen avanza a prime_w_dot por día. |
| Propagación en torno a Marte / al Sol | validated (autoconsistencia) |
tests/mars_propagation.rs: una órbita baja de Marte vuelve a su inicio tras un periodo kepleriano (cierre); la energía específica ε=v²/2−μ/r deriva <1e-9 a lo largo del arco; la regresión nodal secular por J2 de Marte coincide con la tasa analítica de Vallado (calculada de forma independiente ≈ −5,15 °/día con una inclinación de 60°) dentro del 3%; una órbita heliocéntrica recupera el año marciano de ~687 días (vis-viva + recuperación independiente del periodo a partir del arco). Sin datos externos. |
| Validación cruzada con DE440 (Marte heliocéntrico) | kernel-gated |
xval/anise-mars-od/ (EXCLUIDO del workspace; ANISE con licencia MPL-2.0 confinado a su propio Cargo.lock; refleja xval/anise-lunar-od): compara la propagación de Marte centrada en el Sol de Kshana con JPL DE440 (mediante ANISE), con la verdad de Horizons citada literalmente (procedencia + SHA-256). Resultado reproducido (semilla JD (fecha juliana) 2459580,5 TDB (Tiempo Dinámico Baricéntrico), de440s.bsp SHA-256 c1c7fee…b260a49f2): residuo de posición 137 m con un arco de 1 día (5,97×10⁻¹⁰ de la distancia heliocéntrica de 2,299×10¹¹ m), creciendo hasta 3,3 km a 5 d, 87,9 km a 30 d, 1,71 Mm a 90 d: el residuo crece con la longitud del arco porque un modelo de dos cuerpos centrado en el Sol omite deliberadamente las perturbaciones planetarias (sobre todo de Júpiter) y el movimiento interno del sistema de Marte que sí incorpora la efeméride baricéntrica DE440, de modo que el crecimiento es la firma honesta de la dinámica de n cuerpos sin modelar, no un error del integrador; un arco corto que permanece en una fracción diminuta de la distancia heliocéntrica confirma que la maquinaria centrada en el Sol es correcta. Se ejecuta solo cuando el núcleo DE440 está presente ($KSHANA_ANISE_DE440S, o se descarga automáticamente, ~32 MB): una comprobación manual / workflow_dispatch de grado DE, no una puerta de CI por defecto, de modo que el crate publicado y todas las puertas por defecto permanecen intactos byte a byte. |
| Tiempo de luz + retardo de Shapiro | validated |
src/radiometric.rs: la solución iterativa de tiempo de luz con época retardada (converge |Δτ|<1e-12 s, con tope) y el retardo de Shapiro Δt=(2μ/c³)·ln[(r1+r2+r12)/(r1+r2−r12)]. Pruebas: Tierra–Sol ≈ 499 s y Tierra–Luna ≈ 1,28 s mediante la efeméride integrada; un emisor sintético de velocidad constante recupera la solución retardada analítica con una diferencia <1e-9 s (solucionador demostrado independiente de cualquier efeméride real); Shapiro coincide exactamente con un valor calculado a mano y da ~100–250 µs para un rayo rasante Tierra–Marte en conjunción superior. |
| Unión para proveedores de efemérides | validated |
src/ephem_provider.rs: trait EphemerisProvider + BuiltinEphemeris sin núcleo (Montenbruck–Gill Sol/Luna, geocéntrico); devuelve None para los cuerpos para los que no tiene series (p. ej., Marte), para los cuales la vía es el proveedor ANISE de grado DE: la misma división entre integrado y ANISE que en LunarEnvironment/AniseLunarEnvironment. |
| Tiempo en dos partes + TT↔TDB | validated |
src/timescales.rs: un TwoPartJd{day,frac} con acumulación de dos sumas de Knuth recupera intervalos submicrosegundo que el JD de un solo f64 pierde cerca de J2000 (>1000× mejor, probado); tt_to_tdb/tdb_to_tt usan la serie periódica dominante de Fairhead–Bretagnon (|TDB−TT|≲1,7 ms, verificada a mano en J2000). Aditivo: la ruta de tiempo existente de un solo f64 no cambia. |
Observables radiométricos de espacio profundo y mensaje de datos de seguimiento CCSDS — D1 (src/radiometric.rs, src/ccsds_tdm.rs)#
El segundo hito del motor de navegación de espacio profundo: el modelo de observables que convierte el núcleo de tiempo de luz/retardo relativista de D0 en las magnitudes reales que informa un pase de seguimiento de la Deep Space Network (DSN) o de ESTRACK (Red Europea de Seguimiento Espacial): distancia, Doppler de una/dos/tres vías, retransmisión coherente del transpondedor, medición de distancia regenerativa/PN (PN: pseudorruido), Δ-DOR (DOR: medición diferencial de distancia unidireccional) y los medios de propagación, además de la entrada/salida del Tracking Data Message (TDM) CCSDS (Comité Consultivo para Sistemas de Datos Espaciales) 503.0-B, que ingiere/emite un archivo estándar de seguimiento de agencia. Alcance honesto: son modelos geométricos exactos que siguen las convenciones de Moyer / CCSDS; el ruido de medida es el sigma por observación que aporta quien llama, no está incorporado en el modelo. Reproducir un pase de seguimiento real concreto requiere datos TDM reales más el solucionador de determinación de órbita de espacio profundo: eso es D2, no D1. Todo lo que sigue es aditivo (los valores de referencia de reproducibilidad no cambian; mismo SHA, sin regeneración).
| Término | Estado | Evidencias |
|---|---|---|
| Distancia y Doppler de 1/2/3 vías (solución de dos tramos de Moyer) | validated (modelo) |
src/radiometric.rs: one_way_range/two_way_range componen las soluciones de tiempo de luz retardada (tramo descendente) y adelantada (tramo ascendente) de D0; la convención de ida y vuelta completa es ρ₂ = c·(τ_up + τ_down) (m), documentada y coherente. one_way_doppler/two_way_doppler/three_way_doppler forman el desplazamiento de portadora f_D = −(M·f_ul/c)·(ρ̇_up + ρ̇_down) (Hz) a partir de la velocidad de variación de la distancia en la línea de visión, convención de signo: una nave que se acerca da un desplazamiento positivo (hacia el azul). Pruebas: distancia de dos vías = suma de los tramos con una diferencia <1 mm (~2 AU de ida y vuelta Tierra–Sol); distancia de una vía = c·τ exactamente; el Doppler de una vía coincide con el −(f/c)·ρ̇ analítico para un emisor radial de velocidad constante hasta ppt; el de tres vías con estaciones coubicadas colapsa byte a byte al de dos vías. |
| Retransmisión coherente del transpondedor (razones exactas de DSN) | validated |
src/radiometric.rs turnaround_ratio: los números racionales exactos de retransmisión de DSN/CCSDS M = f_down/f_up (Moyer §13; DSN 810-005 módulo 201/214): S/S 240/221, S/X 880/221, X/S 240/749, X/X 880/749, X/Ka 3344/749, Ka/Ka 3360/3599. Probado por igualdad exacta; un par de bandas no definido hace panic (falla de forma ruidosa, nunca inventa una razón). two_way_doppler_coherent aplica la portadora de banda + la razón de extremo a extremo y es igual al two_way_doppler explícito hasta la precisión de máquina. |
| Medición de distancia regenerativa / PN (CCSDS 414; ambigüedad) | validated |
src/radiometric.rs: regenerative_range_ambiguity = c/(2·chip_rate) (la distancia sin ambigüedad a escala de resolución por chip) y pn_range_ambiguity = eso × la longitud del código (la distancia sin ambigüedad del código PN completo c·L/(2·f_chip)), según CCSDS 414.1-B. Probado: un reloj de distancia de 1 MHz da ~149,9 m; el código PN de votación ponderada de CCSDS-414.1 (1.009.470 chips) a 1 Mchip/s da la distancia sin ambigüedad de diseño de ~151.000 km; duplicar la tasa de chips reduce a la mitad la ambigüedad por chip. |
| Δ-DOR (CCSDS 506, plano del cielo) | validated (modelo) |
src/radiometric.rs delta_dor: el retardo diferencial en el plano del cielo Δτ = −B⃗·(ŝ_sc − ŝ_quasar)/c (s) para una línea base interferométrica B⃗ (CCSDS 506.1-B). Probado: coincide con la proyección analítica exacta −B·sin(Δθ)/c para un desfase alineado con la línea base conocido con una diferencia de 1e-15 s, con la magnitud de ángulo pequeño |Δτ| ≈ B·Δθ/c y con el nulo (una nave alineada con el cuásar da un retardo diferencial exactamente cero). |
| Calibración de plasma 1/f² de doble frecuencia | validated (modelo) |
src/radiometric.rs: solar_plasma_delay = K_PLASMA·TEC/(c·f²) (el retardo de grupo dispersivo 1/f² de partículas cargadas, K_PLASMA = 40.3 m·Hz²·TECU⁻¹); coronal_tec_from_sep la columna de corona TEC ∝ 1/sin(SEP) de clase Cassini (sustituto analítico, no una corona calibrada); dual_freq_plasma_calibration la inversión de dispersión K_disp = (Δt_X−Δt_Ka)/(1/f_X²−1/f_Ka²) que usa la DSN para eliminar el plasma. Probado: la ley 1/f² d_X/d_Ka = (f_Ka/f_X)²; la corona aumenta hacia la conjunción; y un TEC inyectado se recupera con una diferencia <1 % (en realidad ≪ 1e-9 sin ruido): dual_frequency_recovers_injected_plasma. |
| Medios tropo / iono (reutilizan modelos GNSS) | validated (modelo) |
src/radiometric.rs tropo_delay/iono_delay: el segmento de estación terrestre de espacio profundo atraviesa la misma atmósfera terrestre que el paquete GNSS ya modela, por lo que delegan en gnss_sim::tropo_delay_m (cenit de Saastamoinen + mapeo de Niell, no dispersivo) y gnss_sim::klobuchar_delay_m (iono difundida). Probado conectado y con signo físico: tropo positivo y mayor a baja elevación que en el cenit; iono un retardo oblicuo no negativo (la fidelidad numérica corresponde a las propias pruebas del paquete GNSS referidas a hojas de datos). |
| Análisis / emisión de CCSDS-TDM 503 + puente radiométrico | validated |
src/ccsds_tdm.rs: un lector y escritor KVN (notación clave-valor) de CCSDS 503.0-B-2 (cabecera + segmentos META_START…META_STOP / DATA_START…DATA_STOP; registros RANGE/DOPPLER_*/ANGLE_*/*_FREQ). Pruebas (#[cfg(test)] + tests/fixtures/deepspace/reference.tdm): el archivo de referencia se analiza hasta los campos con nombre esperados; analizar→emitir→analizar da una estructura igual (ida y vuelta semántica); el puente to_radiometric_obs asigna los registros inequívocos RANGE/DOPPLER_* a RadiometricObs (vía desde PATH 1,2/1,2,1/1,2,3, banda desde TRANSMIT_BAND, km→m); un archivo de varios segmentos reinicia la máquina de estados. Omisión honesta en lugar de conjetura: los ángulos/frecuencias, las bandas desconocidas, las épocas en día del año y los sistemas de tiempo no reconocidos se omiten, nunca se asignan mal, y sigma se deja en 0.0 para que quien llama lo pondere. |
| Benchmark DSN/ESTRACK (precisión del modelo ≫ suelo publicado) | validated (model) |
tests/radiometric_benchmark.rs: los observables son cálculos geométricos exactos, por lo que el benchmark honesto consiste en que el error numérico propio del modelo está muy por debajo del suelo de medida publicado de DSN/ESTRACK: el modelo no es el cuello de botella de la exactitud, lo es la σ que aporta quien llama. Cada prueba calcula un observable de dos maneras independientes (o recupera una verdad inyectada) y afirma que el residuo está por debajo del suelo: la distancia hace el ciclo de ida y vuelta con una diferencia <1 mm ≪ el suelo de ~1 m de la medición de distancia PN (DSN 810-005 mód. 214 / CCSDS 414.1-B); el Doppler coincide con la velocidad de variación de la distancia retardada exacta de forma cerrada v/(1+v/c) con una diferencia de ~10⁻⁶ m/s, varias × por debajo del suelo de banda X de ~0,05 mm/s (DSN 810-005 mód. 203 / Moyer); el residuo es el suelo de diferenciación de distancias en f64 a ~1 AU, una característica numérica y no un error de modelado; el Δ-DOR reproduce la proyección de forma cerrada con un ángulo equivalente en el plano del cielo ≪ 1 nrad ≪ el suelo de ~1–10 nrad (DSN 810-005 mód. 210 / CCSDS 506.1-B); el plasma de doble frecuencia recupera el retardo inyectado con una diferencia ≪ 1 %; y el retardo de Shapiro se sitúa en la banda publicada de ~100–250 µs de la conjunción Tierra–Marte. Las cifras publicadas se enuncian y etiquetan como especificaciones de DSN de orden de magnitud, no como números exactos fabricados, y la documentación del módulo es explícita en que este benchmark mide la PRECISIÓN DEL MODELO, no la reproducción de un pase real (eso es D2 + TDM reales). |
OD de dinámica reducida de espacio profundo — D2 (src/deepspace_od.rs, src/clock_state.rs, src/mars_atmos.rs)#
El tercer hito del motor de navegación de espacio profundo: el estimador que convierte los observables radiométricos de D1 en una trayectoria recuperada: un filtro de información de raíz cuadrada (SRIF) numéricamente robusto con aceleraciones empíricas de dinámica reducida, un reloj de a bordo de tres estados, un modelo de resistencia de Marte y las parciales de medida radiométrica que conectan distancia/Doppler con el estado del filtro, cerrado de extremo a extremo mediante una recuperación sintética de determinación de órbita de una órbita baja de Marte (LMO). Alcance honesto: la recuperación es un lazo cerrado sintético (la verdad y el filtro comparten el mismo propagador de Marte, y las observaciones son el mismo modelo geométrico de observables que invierte el filtro, más ruido gaussiano inyectado): valida la maquinaria del estimador, no la fidelidad absoluta del modelo de fuerzas de Marte; la comprobación cruzada externa de grado DE es el crate xval/anise-mars-od, condicionado al núcleo (D0.8b). Todo lo que sigue es aditivo (los valores de referencia de reproducibilidad no cambian; mismo SHA, sin regeneración).
| Término | Estado | Evidencias |
|---|---|---|
| Núcleo SRIF (filtro de información de raíz cuadrada) | validated |
src/deepspace_od.rs Srif: un filtro de información de raíz cuadrada de Bierman hecho a mano: R triangular superior con Λ = RᵀR, vector de información b, actualizaciones de medida/tiempo de Householder, aritmética de Vec<f64> pelado (sin nalgebra). Pruebas: el SRIF secuencial coincide con la solución de mínimos cuadrados ponderados por lotes (gauss_newton) tanto en estado como en covarianza con una diferencia de 1e-9 en un problema lineal-gaussiano diseñado (srif_matches_batch_on_linear); la covarianza recuperada P = R⁻¹R⁻ᵀ es simétrica (1e-12) y definida positiva por construcción tras una larga secuencia de actualizaciones de medida/tiempo (srif_covariance_is_spd, Cholesky tiene éxito); y la información se acumula (la traza de P decrece de forma monótona a medida que se incorporan medidas de la misma geometría). |
| Aceleraciones empíricas de dinámica reducida (ajuste crucero↔LMO) | validated |
src/deepspace_od.rs ReducedDynamicOd: el filtro [r; v; a_emp] de nueve estados con aceleraciones empíricas RTN como estados de proceso de Gauss–Markov de primer orden, la técnica de dinámica reducida de JPL/ESOC expuesta como un único parámetro dynamic_tightness (casi dinámico ⇒ suaviza el ruido en un arco balístico; casi cinemático ⇒ el nivel empírico absorbe una maniobra/resistencia sin modelar). Pruebas: un filtro casi cinemático sigue una maniobra escalonada (por propulsor) con <½ del residuo del casi dinámico, mientras que el filtro casi dinámico suaviza mejor un arco balístico con ruido (reduced_dynamic_tracks_maneuver); barrer la rigidez desplaza el residuo posterior al ajuste de forma monótona, un continuo y no un interruptor (tuning_is_a_continuum). |
| Reloj de a bordo de 3 estados (fase/frec/deriva, Q de van Loan, Allan) | validated |
src/clock_state.rs ClockState3: estado de error de fase + frecuencia fraccionaria + deriva de frecuencia con el ruido de proceso discreto exacto de van Loan y una actualización estabilizada de Joseph. Pruebas: la Q discretizada coincide con el polinomio de van Loan derivado a mano con una diferencia de 1e-12 y se reduce exactamente a la Q de KalmanClock de dos estados cuando la deriva = 0 (un superconjunto estricto); una inercia de varios pasos hace crecer la varianza de fase hasta la relación analítica de holdover de NIST SP 1065 mediante el término de carrera aleatoria T⁵; el estado de deriva recupera una rampa de envejecimiento verdadera con una diferencia <5 %; se recupera un perfil de Allan de clase USO (ADEV solapada en τ=1 s dentro del umbral de calibración) y el estimador se mantiene consistente en NEES (>95 % dentro de 3σ) y PSD a lo largo de una ejecución con Q/R severa. ClockClass contiene las cifras σ_y(1 s) citadas de CSAC/USO/DSAC (USO: oscilador ultraestable; DSAC: reloj atómico de espacio profundo) y el suelo Doppler de Δv = c·σ_y. |
| Resistencia atmosférica de Marte (Mars-GRAM-lite (GRAM: modelo atmosférico global de referencia)) | validated (model) |
src/mars_atmos.rs: un perfil de densidad neutra de Marte exponencial por tramos (superficie ~0,020 kg/m³, altura de escala cercana a la superficie ~11 km, la media de bajo polvo de Mars-GRAM 2010 / MCD (Mars Climate Database)) y la aceleración de resistencia cuadrática calculada respecto a la atmósfera de Marte corrotante, más una variante ..._scaled que el SRIF puede multiplicar. Pruebas: la densidad decrece de forma monótona y continua entre bandas, la altura de escala cercana a la superficie recuperada es la física de ~11 km, la resistencia es estrictamente antiparalela a la velocidad relativa (el producto vectorial se anula con una diferencia de 1e-12) con una magnitud razonable en LMO de ~3e-4 m/s², y es lineal en el término balístico. Alcance honesto: una atmósfera de ingeniería representativa, no un Mars-GRAM/MCD validado en vuelo con dependencia de polvo/estación/hora local. |
| Parciales de medida radiométrica (distancia/Doppler) para el SRIF | validated |
src/deepspace_od.rs range_observable / range_rate_observable: las parciales de la distancia en la línea de visión ρ = |r_sc − r_sta| (∂ρ/∂r = û, ∂ρ/∂v = 0) y de su velocidad de variación ρ̇ = û·(v_sc − v_sta) (∂ρ̇/∂v = û, ∂ρ̇/∂r = (v_rel − ρ̇·û)/ρ) que conectan los observables de D1 con el estado del filtro, más la parcial de frecuencia de reloj del Doppler de una vía ∂ρ̇_obs/∂y = c. Pruebas: ambas parciales coinciden con una diferencia finita central del observable con una diferencia de 1e-6 (range_partial_matches_finite_difference, range_rate_partials_match_finite_difference); una sola actualización de distancia reduce la covarianza en la dirección observada (línea de visión, LOS) en ≫1000× y la mantiene definida positiva (PD), y una actualización Doppler reduce la varianza de la velocidad en LOS (radiometric_update_reduces_covariance_in_observed_direction, range_rate_update_observes_velocity). |
| OD de extremo a extremo en LMO de Marte a partir de datos radiométricos | validated (synthetic closed-loop) |
tests/mars_lmo_od.rs: un arco de órbita baja de Marte de referencia propagado bajo la gravedad Body::mars_gmm3(4) genera distancia (σ=1 m) + Doppler (σ=0,1 mm/s) de dos vías con ruido contra dos estaciones de seguimiento; el SRIF de dinámica reducida lo recupera a partir de un estado inicial perturbado ~2,7 km. Logrado: RMS de posición convergido ≈ 0,2 m (submétrico, muy por dentro del criterio de finalización de metros a decenas de metros) sobre un arco de 3 órbitas con cadencia de 30 s, con la covarianza factorizada definida positiva en cada época (la garantía del SRIF, afirmada en todo momento). El continuo de ajuste crucero→LMO se ejercita de extremo a extremo: con una verdad de resistencia sin modelar que la plantilla del filtro no tiene, el parámetro de dinámica reducida (rigidez 1) recupera ~14 m frente a ~677 m de la ejecución casi dinámica (rigidez 0): una mejora de 48× gracias a que el nivel empírico absorbe la resistencia. Alcance honesto: lazo cerrado sintético (la verdad = el mismo propagador que usa el filtro); la comprobación cruzada externa de grado DE es el xval/anise-mars-od condicionado al núcleo (D0.8b), que nunca se ejecuta aquí, sin red. |
Escenario PNT de espacio profundo y fusión de una vía + dos vías — D3 (src/mars_pnt.rs, src/deepspace_od.rs)#
El cuarto hito del motor de navegación de espacio profundo: un escenario de producto PNT de Marte ejecutable que une el cuerpo/marco de Marte de D0, los observables radiométricos de D1 y la OD de dinámica reducida de D2 en un único tipo de escenario mars-pnt. Modela una pequeña constelación de retransmisión de estilo MARCONI que difunde una señal en el espacio de una vía (acoplada al reloj) y además retransmite un enlace de dos vías (coherente, sin reloj) a una estación de espacio profundo, y navega tres usuarios de referencia (transferencia a Marte, orbitador en órbita baja de Marte, punto fijo en superficie) mediante el estimador de fusión conjunta de una vía + dos vías de D3.1: un SRIF de doce estados que aumenta el bloque de órbita/empírico de dinámica reducida de D2 con un reloj de a bordo de tres estados. Alcance honesto: toda figura de mérito es la cota de covarianza formal del estimador (posición de 1σ / 3σ por época) y el RMS logrado frente a una verdad de lazo cerrado sintético (la verdad y el filtro comparten la misma dinámica de Marte y el mismo modelo geométrico de observables, más ruido gaussiano inyectado): una FoM de navegación simulada, NO un nivel de protección certificado para aviación, y NO una afirmación de vuelo (sin modelo de fallos certificado, sin monitor de integridad, sin datos de seguimiento reales). Todo lo que sigue es aditivo (los valores de referencia de reproducibilidad no cambian; mismo SHA, sin regeneración).
| Término | Estado | Evidencias |
|---|---|---|
| Fusión radiométrica conjunta de una vía + dos vías (la fusionada supera a cada una por separado) | validated |
src/deepspace_od.rs FusionOd: el SRIF de dinámica reducida de D2.2 aumentado con los tres estados del reloj de a bordo (ClockState3), que ingiere una serie temporal mixta de distancia/Doppler de dos vías (sin reloj, fija la órbita: columnas de reloj nulas en la parcial) y de una vía (acoplada al reloj: la parcial de frecuencia ∂ρ̇_obs/∂y = c) mediante fused_observable. La estructura de calibrar y luego propagar por inercia: los pases de dos vías fijan la órbita, y los datos de una vía calibran entonces el reloj y propagan la órbita por inercia entre pases con un error acotado por la estabilidad de Allan del reloj. Probado en src/deepspace_od.rs #[cfg(test)]: la solución fusionada supera a cada tipo de enlace por separado; el error de propagación por inercia de una ejecución solo de una vía crece con el intervalo entre pases de dos vías de forma coherente con la cota de Allan de la clase de reloj; la covarianza conjunta se mantiene SPD (simétrica definida positiva) en todo momento. |
| Constelación MARCONI (radio areoestacionario, ocultación) | validated (model) |
src/mars_pnt.rs MarconiConstellation: un conjunto de cinco relés: tres relés areoestacionarios en r = (μ/ω²)^{1/3} ≈ 20 428 km (el radio síncrono de Marte a partir de μ/velocidad de giro publicadas; probado en la banda de 20.400–20.500 km) equiespaciados 120° en longitud con 5° de inclinación, más dos relés en una órbita circular más alta (1,4× areoestacionaria) inclinada 60° para cobertura en el plano del cielo. Los estados de los relés por época se integran hacia adelante bajo la gravedad mars_gmm3; la prueba de visibilidad por ocultación de Marte es la geometría de cuerda que libra la esfera (chord_clears_sphere, probado: un relé diametralmente opuesto queda ocultado, un relé cenital es visible). Alcance honesto: una geometría mínima y representativa de difusión más relé construida a partir de constantes publicadas de Marte, no un diseño de constelación de vuelo concreto. |
Escenario mars-pnt accesible mediante CLI / Python / WASM (WebAssembly) / MCP (Model Context Protocol) |
validated |
src/mars_pnt.rs MarsScenario / run_mars_pnt está conectado como el escenario kind = "mars-pnt" en todas las superficies (D3.3): el ejecutor de la CLI, el enlace de Python, la compilación WASM/playground y el despacho del servidor MCP encaminan todos hacia él (prueba de ida y vuelta de src/api.rs mars_pnt_kind_round_trips_through_the_dispatch). Escenarios de referencia incluidos: scenarios/mars-pnt-lmo.toml, scenarios/mars-pnt-surface.toml, scenarios/mars-pnt-transfer.toml. El resultado lleva un fom_note explícito que etiqueta la FoM como una cota de covarianza (no un PL certificado), y las salidas summary / to_svg repiten la etiqueta de honestidad. |
| Objetivos de MARCONI / LightShip reproducidos: orbitador < 100 m, rover < 15 m | validated (synthetic closed-loop, under stated assumptions) |
tests/mars_pnt_targets.rs: los objetivos publicados del programa MARCONI / LightShip (orbitador < 100 m, superficie/rover < 15 m) reproducidos en simulación. Supuestos compartidos: la constelación MARCONI por defecto de cinco relés; todo relé a la vista da una distancia + Doppler de una vía por época; un pase coherente de estación de dos vías cada 30 min; ruido de clase DSN (σ de distancia = 1 m, σ de Doppler = 0,1 mm/s); el filtro de fusión conjunta de órbita de dinámica reducida + reloj de 3 estados inicializado a partir de un estado a priori perturbado ~2,7 km (rigidez 0,1); FoM = RMS de posición 3-D convergido de la segunda mitad del arco frente a la verdad sintética. Orbitador (LMO ~400 km / 60° de inclinación, reloj USO, cadencia de 60 s, arco de ~2 h ≈ una órbita): RMS convergido logrado ≈ 0,40 m ≪ el objetivo de 100 m (media de 3,1 relés a la vista, covarianza SPD en todo momento). Rover (punto fijo ecuatorial de superficie, reloj USO, cadencia de 30 s, arco de ~2 h): RMS convergido logrado ≈ 5,1 m < el objetivo de 15 m (media de 3,0 relés a la vista, covarianza SPD). Ambos objetivos se alcanzan sin relajar ninguna aserción: el USO es la clase menos capaz de los relojes de a bordo realistas (un DSAC solo ayudaría) y la cadencia de dos vías de 30 min es conservadora para un calendario rutinario de red de relés, de modo que los supuestos son físicamente razonables para un sistema de clase MARCONI y no están ajustados para pasar. Alcance honesto: reproducción simulada bajo los supuestos indicados, NO una afirmación de vuelo ni un nivel de protección certificado; la verdad de lazo cerrado sintético comparte la dinámica de Marte y el modelo de observables del filtro. |
Tiempo coordenado lunar — tasa relativista del reloj Tierra-Luna (src/lunar_time.rs)#
Una escala de Tiempo Coordenado Lunar (LTC/TCL (TCL: Temps-Coordonnée Lunaire, el nombre francés del Tiempo Coordenado Lunar)) requiere la tasa secular a la que funciona un reloj en la superficie lunar respecto a un reloj en el geoide terrestre (TT). src/lunar_time.rs la calcula a partir de primeros principios: una identidad postnewtoniana de primer orden que suma la diferencia de autopotencial (el potencial convencional del geoide L_G de la IAU W0 = L_G·c² ≈ 6.26369e7 m²/s² menos el autopotencial de la superficie de la Luna GM_moon/R_moon ≈ 2.822e6 m²/s²) y el término cinético (efecto Doppler de segundo orden) −<v²>/2c² a partir de la velocidad geocéntrica de la Luna (por diferencias finitas de la serie lunar de Montenbruck-Gill de src/ephem.rs). El término dominante de autopotencial da ≈ 57,5 µs/día, el término cinético ≈ −0,5 µs/día, para un total ≈ 57 µs/día. El escenario lunar-time-offset informa de esta tasa y del desfase LTC−TT acumulado sobre un horizonte, y admite un conjunto mínimo de varianza inversa (un reloj de papel lunar); las conversiones TT↔LTC hacen el ciclo de ida y vuelta con una diferencia < 1 ns/día.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Tasa relativista del reloj Tierra-Luna (LTC/TCL) | modelled |
src/lunar_time.rs lunar_rate_breakdown, tt_to_ltc/ltc_to_tt, lunar_ensemble, LunarTimeScenario. Referencia independiente: una identidad relativista interna de forma cerrada (geopotencial L_G de la IAU / de las convenciones del IERS y el autopotencial GM/r (GM: parámetro gravitacional, G por la masa)), comprobada de forma cruzada con la banda publicada de tasa del reloj lunar [56, 59] µs/día. Pruebas (lunar_time::tests): el término de autopotencial ≈ 57,5 µs/día, la velocidad de la Luna ≈ 1 km/s, el término cinético un pequeño valor negativo, el total dentro de la banda con los términos nombrados sumando hasta él, el desfase LTC−TT de 1 día ≈ 57 µs, y un ciclo de ida y vuelta TT↔LTC con una diferencia < 1 ns/día. Alcance honesto: la cifra principal de µs/día depende de la referencia: depende de las superficies de referencia elegidas (geoide terrestre W0 frente a un selenoide lunar), de la ventana de promediado temporal y de las correcciones centrífugas/J₂ inferiores a µs/día que se desprecian; por eso lo que se publica es una banda, no un único número certificado. Esto es una comprobación de autoconsistencia Modelled, NO una validación externa, NO una exactitud absoluta inferior al nanosegundo, y NO está certificado para la medición del tiempo operativa. |
VLBI geodésico lunar — retardo de campo cercano para una línea base terrestre que observa una baliza lunar (src/lunar_vlbi.rs)#
Un observable de VLBI (interferometría de línea base muy larga) geodésico para dos estaciones terrestres (una línea base) que observan una señal de una vía de un transmisor de clase NovaMoon en la superficie lunar. La Luna está en campo cercano, no es una onda plana, por lo que el retardo geométrico es la diferencia exacta de dos distancias tau_geom = (|r2 − r_B| − |r1 − r_B|)/c y no la proyección en el plano del cielo. El observable completo añade la diferencia de desfases de reloj de las estaciones y un término de Shapiro diferenciado del potencial terrestre (reutilizado de src/radiometric.rs). Las estaciones se sitúan en coordenadas inerciales geocéntricas (GCRS) mediante src/frames.rs + src/cio.rs; la baliza mediante src/ephem.rs (Luna geocéntrica) + src/lunar.rs (selenográfico→MCMF (MCMF: centrado en la Luna y fijo a ella)) + src/lunar_frame.rs (ME fija al cuerpo→inercial de IAU-2015). El escenario lunar-vlbi muestrea el retardo, su tasa por diferencias finitas y la corrección de campo cercano a lo largo de un pase.
La referencia independiente es el observable Δ-DOR de onda plana del mismo código delta_dor en src/radiometric.rs: en el límite de campo lejano (una baliza sintética a 1e15 m) el retardo geométrico debe colapsar a −(B·ŝ_B)/c = delta_dor(r_B, [0,0,0], B) hasta la precisión de máquina; a la distancia lunar real, la corrección de campo cercano por curvatura del frente de onda es distinta de cero (de decenas a cientos de µs). Las parciales de la baliza dtau/dr_B = ((r_B−r2)/|r_B−r2| − (r_B−r1)/|r_B−r1|)/c (y las parciales de las estaciones) se verifican por diferencia finita central (error relativo < 1e-5).
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Retardo de VLBI geodésico lunar + parciales | modelled |
src/lunar_vlbi.rs geometric_delay_s, vlbi_delay_s, delay_partials_beacon/_station1/_station2, near_field_correction_s, LunarVlbiScenario. Referencia independiente: ReferenceImpl: el delta_dor de onda plana del mismo código (src/radiometric.rs) en el límite de campo lejano, más parciales por diferencias finitas. Pruebas (lunar_vlbi::tests): magnitud de la estación ≈ radio terrestre, distancia de la baliza a la distancia lunar (356–407 Mm), el retardo geométrico de campo lejano coincide con delta_dor con una diferencia < 1e-9 s, una corrección de campo cercano distinta de cero a la distancia lunar, parciales de baliza/estación por DF con un error relativo dentro de 1e-5, un término de reloj exacto y una ejecución finita del escenario despachada mediante run_toml. Alcance honesto: Modelled, NO validado frente a datos reales de VLBI. El movimiento polar se descarta (xp = yp = 0), por lo que las posiciones inerciales de las estaciones llevan un error de marco de unos pocos metros; la baliza mezcla una serie lunar de ecuador medio de la fecha con un desfase fijo al cuerpo en ICRF (Marco de Referencia Celeste Internacional) (jd_tdb ≈ jd_tt), una incoherencia de marcos inferior a la fidelidad del modelo pero no rigurosa; y no hay iteración del tiempo de luz, ni rotación terrestre durante el tiempo de luz, ni medios (tropo/iono/plasma), ni término de aberración más allá del Shapiro diferenciado. No se afirma ningún TRL (nivel de madurez tecnológica), herencia de vuelo ni aval de ninguna agencia. 0,30: frente a los tiempos de luz de ANISE a través de DE440, ningún retardo de esta ruta analítica queda dentro de 1 ps (mayor diferencia 24 µs); el hallazgo queda fijado. |
| VLBI geodésico lunar, ruta de kernel | validated (0.30) |
src/lunar_vlbi.rs KernelGeometry (la Tierra y la Luna de DE440, los ejes principales lunares de DE440, la orientación terrestre ITRF93, con cada tiempo de luz convergido en el marco baricéntrico), ejecutada por el escenario lunar-vlbi cuando se establecen las tres rutas de núcleo. Referencia independiente: biblioteca: tiempos de luz convergidos de NAIF SPICE Toolkit N0067 (spiceypy 8.2.0) hacia DSS-14/43/63, preregistrado: 75 retardos dentro de 1 ps (peor 0,06 ps), parciales de baliza y de estación dentro de 1e-6, en 25 épocas cerca de J2000 (una enmienda tras fallar las 2024 épocas por la propia época de emisión en doble precisión de SPICE, de unos 6 ps, divulgada y fijada). El término de Shapiro diferenciado, la tasa de retardo y la corrección de campo cercano del escenario no se comparan. |
OD lunar conjunta multitécnica + reloj — recuperación simulada de lazo cerrado (src/lunar_combination.rs)#
Un ajuste de mínimos cuadrados por lotes de una sola época (instantánea) (crate::batch_ls::gauss_newton_qr, un paso QR de Householder desde 0,30) que fusiona las técnicas de VLBI geodésico, de distancias radiométricas/de medición de distancia local lunar y de medición de distancia entre satélites sobre una red lunar SIMULADA para recuperar, conjuntamente, la posición 3-D de una estación en la superficie lunar, las posiciones por satélite de una pequeña constelación y el desfase de reloj de cada elemento. Los observables son: (1) retardos de VLBI geodésico de línea base terrestre hacia la estación lunar tratada como baliza (reutilizando src/lunar_vlbi.rs, inercial geocéntrico): la técnica principal; (2) distancias radiométricas geocéntricas de estación terrestre→satélite (que multilateran la constelación desde las estaciones terrestres bien repartidas) y distancias locales lunares estación↔satélite (distancia euclídea MCI (inercial centrado en la Luna) más el término de reloj diferenciado); (3) distancias entre satélites (misma forma); más una única pseudoobservación de sincronización de reloj de estación que ancla el desfase de reloj común, de otro modo inobservable. El vector de estado es [station_pos(3), {sat_pos(3)}×N_sat, station_clk, {sat_clk}×N_sat]. No hay propagación de modelo de fuerzas dentro del solucionador: los satélites son puntos fijos, distintos e ilustrativos sobre una órbita lunar representativa; es un ajuste de instantánea deliberadamente limpio. Internamente, las posiciones se escalan y los relojes se estiman en metros equivalentes de distancia para que la matriz normal siga bien condicionada en f64; las distancias de VLBI y a distancia lunar se restan de su media respecto a la geometría nominal para que el jacobiano por diferencias finitas no sufra una cancelación catastrófica. El escenario lunar-joint-od-clock ejecuta la resolución con y sin los tramos de VLBI sobre la misma semilla/verdad e informa de ambas soluciones además del factor de mejora de observabilidad de la estación.
El resultado principal honesto: la medición de distancia local lunar desde una estación polar hasta un puñado de satélites que se encuentran todos hacia un lado del cielo deja la posición de la estación débilmente observada a lo largo de una dirección, de modo que la resolución solo con distancias está mal condicionada y el error 3-D recuperado de la estación es grande (o la resolución no converge). Añadir los retardos de VLBI de línea base terrestre hace observable la posición 3-D completa de la estación, y el error recuperado de la estación se reduce al nivel de metros. La prueba vlbi_restores_station_observability afirma que el error de la estación con VLBI es claramente (≥5×) menor que el error solo con distancias sobre la misma verdad inyectada: que el VLBI restituya la dirección de la estación, de otro modo inobservable, es el objetivo de la fase.
La referencia independiente es la consistencia interna: un estado de verdad inyectado (estación ~50 m/eje, satélites ~30 m/eje, relojes ~1e-7 s, con una fluctuación por componente con semilla) se transforma en observables sintéticos mediante el mismo modelo geométrico que invierte el solucionador, se añade ruido gaussiano con semilla (valores ilustrativos por defecto: σ de VLBI ≈ 1e-11 s, σ de distancia ≈ 0,1 m, σ de ISL ≈ 0,1 m; pesos 1/σ²), y el estimador debe recuperar la verdad inyectada dentro del ruido a partir de una estimación inicial de ceros. Un NEES medio de Monte Carlo Δxᵀ(HᵀWH)Δx sobre semillas (formal_covariance_nees) se sitúa dentro de una banda amplia en torno a n_params, una comprobación del realismo de la covarianza.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| OD lunar conjunta multitécnica + reloj | validated (0,30, P2: el álgebra lineal de la resolución) |
src/lunar_combination.rs estimate, formal_covariance_nees, LunarCombinationScenario. Referencia independiente de 0,30: P2: numpy 2.4.6 (LAPACK gelsd e inv) recalcula cada paso de Gauss-Newton, la solución ponderada convergida, las sigmas formales y el error de la estación sobre los jacobianos incorporados de seis redes (tests/lunar_joint_od_numpy_oracle.rs, pasos dentro de 2.4e-11, sigmas dentro de 1.3e-11); los modelos físicos de observación y las magnitudes siguen siendo MODELLED. Referencia independiente anterior: InternalConsistency: recuperación de una verdad simulada inyectada + consistencia de covarianza NEES. Pruebas (lunar_combination::tests): la fusión completa recupera la verdad (estación < 5 m, RMS de satélites < 5 m, relojes < 1e-8 s, convergido); el VLBI restituye la observabilidad 3-D de la estación (error de la estación ≥5× menor con VLBI que solo con distancias sobre la misma verdad); determinista (misma semilla → solución idéntica bit a bit, semilla distinta → solución distinta pero recuperada); NEES medio dentro de una banda amplia en torno a n_params; cifras informadas finitas/protegidas incluso cuando la resolución solo con distancias está mal condicionada; escenario despachado mediante run_toml. Alcance honesto: esto es una recuperación simulada de lazo cerrado (la verdad comparte el modelo de observación), NO una validación con datos reales; sin propagación de modelo de fuerzas dentro del solucionador; las posiciones de los satélites y la geometría de la estación terrestre/lunar son ilustrativas. No se afirma ningún TRL, herencia de vuelo ni aval de ninguna agencia. |
Realización del marco de referencia lunar — ajuste de datum de Helmert de 7 parámetros (src/lunar_frame_realise.rs)#
Mientras que src/lunar_frame.rs aplica la orientación del cuerpo lunar WGCCRE de la IAU 2015 (un modelo directo), este módulo estima (realiza) un marco de referencia lunar a partir de una red de coordenadas puntuales estimadas ligadas a un datum. El núcleo de estimación es una clásica transformación de semejanza de 7 parámetros (Helmert) —tres de traslación, tres de rotación de ángulo pequeño y uno de escala— que asigna los puntos p_i (marco estimado) a q_i (marco del datum) como q_i = t + (1 + s)·R(θ)·p_i, con R(θ) = rz(θz)·ry(θy)·rx(θx) construida a partir de crate::precession::{rx, ry, rz, matmul, mat_vec}. Los siete parámetros [tx, ty, tz, θx, θy, θz, s] se estiman a partir de ≥ 3 pares de puntos no colineales mediante mínimos cuadrados ponderados con crate::batch_ls::gauss_newton: el modelo directo predice cada q_i a partir de su p_i y aplana las tres componentes de todos los puntos en el vector observable, las coordenadas observadas del datum forman z, los pesos son 1/σ², y la resolución parte de x0 = zeros. Los ángulos de rotación se estiman en µrad y la escala en ppb para que el jacobiano por diferencias finitas siga bien escalado a la magnitud de coordenadas de la superficie lunar (~1.7e6 m). Un pequeño icrf_orientation_tie compone la pequeña rotación realizada mediante la orientación IAU cuerpo→ICRF (transpose(crate::lunar_frame::icrf_to_iau_moon(jd_tdb))) y devuelve el desfase residual de ángulo pequeño del marco realizado respecto a los ejes ICRF: un cambio de marco de expresión deliberadamente simple, no una estimación independiente del polo lunar.
La referencia independiente es la consistencia interna: una transformación de Helmert conocida (traslación ~decenas de m, rotación ~µrad, escala ~1e-7) se inyecta en una red sintética de puntos bien repartidos (latitud/longitud selenográficas variadas → MCMF, algunos puntos con altitud), se añade ruido gaussiano con semilla y el ajuste debe recuperar los parámetros inyectados. Con datos sin ruido la recuperación llega a ~precisión de máquina (traslación < 1e-6 m, rotación < 1e-9 rad, escala < 1e-12); con ruido de metros, los parámetros recuperados quedan dentro de unas pocas × la σ formal y el residuo RMS posterior al ajuste se sitúa cerca del nivel de ruido. El escenario lunar-frame-realisation informa del datum recuperado, del error de recuperación por parámetro frente a la verdad inyectada, del residuo RMS posterior al ajuste y del enlace de orientación ICRF de la rotación realizada.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Realización del marco de referencia lunar | modelled |
src/lunar_frame_realise.rs helmert_fit, apply_helmert, realise_frame, icrf_orientation_tie, LunarFrameRealiseScenario. Referencia independiente: InternalConsistency: recuperación de una transformación de semejanza de 7 parámetros inyectada más la identidad algebraica de ida y vuelta de apply_helmert. Pruebas (lunar_frame_realise::tests): recuperación sin ruido de la transformación inyectada (traslación < 1e-6 m, rotación < 1e-9 rad, escala < 1e-12); recuperación con ruido dentro de unas pocas × σ y residuo RMS cercano al nivel de ruido; ciclo de ida y vuelta aplicar-luego-invertir; determinista (misma semilla → idéntico bit a bit, semilla distinta → distinto pero recuperado); el enlace ICRF con rotación nula es cero y el enlace conserva la magnitud de la rotación; escenario despachado mediante run_toml. Alcance honesto: es una comprobación de autoconsistencia —recupera una transformación inyectada sobre una red sintética—, NO una realización del marco de referencia lunar frente a datos reales de seguimiento / VLBI, y no afirma ninguna exactitud absoluta del marco. El enlace de orientación ICRF es un simple cambio de expresión, no una estimación independiente del polo. No se afirma ningún TRL, herencia de vuelo ni aval de ninguna agencia. |
Volumen de servicio de navegación lunar — DOP / cobertura / disponibilidad + PL de ARAIM lunar generalizado (src/lunar_service.rs)#
Este módulo compone piezas ya construidas en un análisis de volumen de servicio de navegación lunar: barre una malla de latitud/longitud selenográficas sobre un horizonte temporal frente a una constelación de órbita lunar ilustrativa, de fuente pública, de clase Moonlight / LCNS (LCNS: Servicios de Comunicaciones y Navegación Lunares) e informa de DOP / cobertura / disponibilidad más una envolvente generalizada de nivel de protección ARAIM lunar. Las dos reutilizaciones son esenciales y explícitas. La geometría DOP es el núcleo VALIDATED (frente a gnss_lib_py) crate::orbit::dop: service_dop es un fino filtro de máscara de elevación más ese núcleo, y una prueba afirma la identidad (service_dop es igual a un orbit::dop directo sobre las mismas posiciones visibles). La integridad reutiliza la maquinaria de ARAIM lunar de LunaNet LNIS (LunaNet Interoperability Specification) crate::lunar::lunar_araim (σ_URE ≈ 30 m, P_sat ≈ 1e-4); lunar_protection_level generaliza el nivel de protección existente del polo sur a un punto arbitrario de la superficie, y una prueba afirma que se reduce al caso del polo sur (en el polo sur, con la misma geometría/presupuesto, devuelve exactamente el resultado existente de lunar::lunar_araim con una diferencia < 1e-9).
Los parámetros de la constelación son una aproximación ilustrativa de las descripciones públicas de la ESA de la clase de sistema (≈ 4 satélites en órbitas lunares elípticas congeladas que favorecen la cobertura del polo sur: apolunio sobre el hemisferio sur; 4 es el valor por defecto de la biblioteca, y el moonlight-service-volume.toml incluido establece 8 porque el nivel de protección necesita al menos 6 a la vista). No son la efeméride real de Moonlight/LCNS y no implican ninguna afiliación, aval, herencia, certificación ni TRL. La composición (cobertura / disponibilidad / integridad) es MODELLED: un conjunto de relés kepleriano circular/elíptico (no una efeméride de NRHO (órbita de halo casi rectilínea) 9:2 de LCNS corregida diferencialmente), una Luna de rotación media (sin libración física ni polo en precesión) y parámetros de integridad publicados de LunaNet LNIS. Demuestra el método del volumen de servicio, no una cifra de disponibilidad operativa. Determinista (geometría pura; sin aleatoriedad). El escenario moonlight-service-volume informa del porcentaje de cobertura, de las envolventes del recuento de visibles y del PDOP, de la envolvente de HPL/VPL sobre el volumen y de la disponibilidad del nivel de protección frente al límite de alerta.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Volumen de servicio de navegación lunar | modelled |
src/lunar_service.rs LunarConstellation, visible_sats, service_dop, coverage, lunar_protection_level, LunarServiceScenario. Geometría DOP validada por reutilización del núcleo crate::orbit::dop validado con gnss_lib_py; la integridad reutiliza el ARAIM lunar publicado de LunaNet/LNIS (crate::lunar::lunar_araim, σ_URE ≈ 30 m). Pruebas (lunar_service::tests): service_dop es una identidad sobre el núcleo validado; lunar_protection_level en el polo sur es igual al PL existente de lunar::lunar_araim con una diferencia < 1e-9 (se reduce al caso del polo sur); la cobertura no decrece con el tamaño de la constelación; la visibilidad respeta la máscara de elevación; el escenario es determinista y se despacha mediante run_toml. Alcance honesto: la constelación es ilustrativa, de fuente pública, NO afiliada a la ESA: no es la efeméride real de Moonlight/LCNS; la composición de cobertura/disponibilidad/integridad es MODELLED (relés keplerianos circulares/elípticos, Luna de rotación media, parámetros publicados de LNIS), NO una cifra de disponibilidad operativa de Moonlight. No se afirma ningún TRL, herencia de vuelo ni aval de ninguna agencia. |
PNT diferencial lunar — cancelación de modo común + residuo creciente con la línea base + niveles de protección DGNSS (src/lunar_dpnt.rs)#
Un análogo lunar de DGNSS (navegación diferencial por satélite) / SBAS: una estación de referencia de clase NovaMoon en una ubicación selenográfica conocida calcula correcciones diferenciales por satélite a partir de una constelación ilustrativa, de fuente pública, de clase Moonlight / LCNS, y un usuario móvil desplazado de ella por una línea base las aplica, de modo que los errores de efemérides difundidas de modo común se cancelan. Cada satélite i lleva un vector común inyectado de error de órbita 3-D e_i y un error de reloj común c_i. El residuo de pseudodistancia de la estación de referencia es la corrección −e_i · û_ref,i + c_i; el error bruto del usuario es −e_i · û_user,i + c_i; el error corregido del usuario es su diferencia −e_i · (û_user,i − û_ref,i). El término de reloj c_i se cancela exactamente (es idéntico en ambas observaciones), y el término de órbita colapsa a la proyección sobre la diferencia de los dos vectores unitarios de línea de visión, que → 0 cuando la línea base → 0 (el suelo de decorrelación espacial) y crece ≈ linealmente con la línea base. Los errores de distancia corregidos por satélite se proyectan a través de la geometría del usuario mediante una pequeña resolución de instantánea de mínimos cuadrados ponderados con pocas dependencias (estado [x, y, z, clock] mediante crate::orbit::invert4; un sesgo constante de distancia lo absorbe la incógnita de reloj en lugar de corromper la solución) para dar el error de posición del usuario. El nivel de protección del usuario reutiliza la maquinaria de nivel de protección SBAS de DO-229E (crate::sbas::sbas_protection_level, factores K de aproximación de precisión) con la σ residual diferencial como presupuesto de error de 1 σ de cada satélite.
NovaMoon se menciona solo como clase de sistema (una descripción pública de una estación de referencia lunar); la constelación reutiliza la crate::lunar_service::LunarConstellation ilustrativa de fuente pública. Son parámetros ilustrativos para ejercitar el método diferencial, no una efeméride real, y no implican ninguna afiliación, aval, herencia, certificación ni TRL. El escenario lunar-differential-pnt informa del error de posición del usuario con y sin correcciones, del factor de reducción, de la curva de error frente a línea base y del nivel de protección. En la configuración por defecto, el error corregido del usuario con una línea base de 50 km es ≈ 0,008 m frente a ≈ 24 m sin corregir (una reducción de ~3000×), y ≈ 0 con línea base cero.
La referencia independiente es la consistencia interna: la cancelación de modo común es una identidad algebraica exacta (con noise = 0, error corregido < 1e-6 m con línea base cero; el término de reloj se cancela hasta la precisión de máquina con cualquier línea base), el residuo crece de forma monótona con la línea base y el nivel de protección es el mismo algoritmo de DO-229E frente al que está fijada la pila SBAS. El residuo de decorrelación espacial es un modelo geométrico de primer orden, no un modelo de decorrelación ajustado a partir de seguimiento lunar real.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| PNT diferencial lunar | modelled |
src/lunar_dpnt.rs differential_corrections, corrected_user_range_errors, user_position_error_m, lunar_dgnss_protection_level, LunarDpntScenario. Referencia independiente: InternalConsistency: la identidad de cancelación diferencial de errores más la reutilización de la maquinaria de nivel de protección SBAS de DO-229E (crate::sbas). Pruebas (lunar_dpnt::tests): con línea base cero, el error corregido del usuario y cada error de distancia corregido por satélite son ~0 (< 1e-6 m) y ≪ el error sin corregir; el término de reloj se cancela exactamente con cualquier línea base (caso de error de órbita nulo); el error corregido crece de forma monótona con la línea base mientras sigue ≪ al sin corregir con líneas base modestas; el diferencial supera al autónomo con un margen claro (> 2×); el nivel de protección es igual a una llamada directa a sbas::sbas_protection_level y escala con la σ residual; una geometría subdeterminada devuelve None; el escenario es determinista (con semilla) y se despacha mediante run_toml. Alcance honesto: MODELLED: la cancelación de modo común es una identidad exacta, pero el residuo de decorrelación espacial es un modelo geométrico de primer orden, NO un modelo de decorrelación ajustado a partir de seguimiento lunar real, y esto NO está validado con datos reales. NovaMoon se menciona solo como clase de sistema (ilustrativa, de fuente pública, no afiliada a la ESA). No se afirma ningún TRL, herencia de vuelo ni aval de ninguna agencia. |
Exportación de interoperabilidad lunar — CCSDS OEM + KIF alineados con LunaNet/IOAG con ajuste a la norma de ida y vuelta (src/lunar_interop.rs)#
El marco de referencia lunar, la escala de tiempo lunar y la efeméride lunar se exportan en formas de intercambio alineadas con LunaNet/IOAG (IOAG: Grupo Asesor de Operaciones Interagencias) y basadas en CCSDS. Esta fase no inventa un formato de transmisión: reutiliza el emisor y el analizador de CCSDS OEM (Orbit Ephemeris Message) 2,0 ya existentes en el crate (crate::oem::OemFile::to_oem_string / crate::oem::parse_oem) y el envoltorio del Kshana Interchange Format (crate::interchange::Envelope), reetiquetados para el contexto lunar. export_lunar_oem fija el REF_FRAME del OEM al marco del cuerpo lunar WGCCRE de la IAU 2015 (MOON_ME Tierra media o MOON_PA ejes principales), TIME_SYSTEM a la escala de tiempo lunar (LTC / TCL / UTC) y CENTER_NAME a MOON, sobre una efeméride de muestra ilustrativa, de fuente pública, de clase LCNS (posiciones de crate::lunar_service::LunarSat::position_mci, velocidad por diferencia finita central). export_lunar_time_metadata emite un descriptor de tiempo lunar alineado con LunaNet/IOAG (identificador de escala, tasa secular en µs/día de crate::lunar_time::lunar_rate_breakdown, la banda publicada de 56–59 µs/día, superficie de referencia) que hace el ciclo de ida y vuelta mediante serde_json. export_kif_lunar envuelve el OEM + el descriptor + la etiqueta de marco en el envoltorio KIF existente con la etiqueta de honestidad MODELLED.
La referencia independiente es el ciclo de ida y vuelta / ajuste a la norma de campos. Como oem.rs incluye ambas direcciones, el OEM hace el ciclo de ida y vuelta mediante crate::oem::parse_oem (de vuelta a un segmento igual, con el marco/tiempo lunar y el número de estados conservados) y se comprueba de forma independiente mediante oem_conformance, que verifica que está presente cada palabra clave de cabecera exigida por CCSDS/LunaNet, que REF_FRAME lleva un token lunar MOON_* y que TIME_SYSTEM no está vacío, que se mantiene la estructura META_START … META_STOP y que las líneas de datos de posición+velocidad están bien formadas; devuelve un resultado estructurado más la lista de campos presentes/ausentes, de modo que una exportación rota (p. ej., un TIME_SYSTEM omitido) se detecta y se nombra. Los metadatos de tiempo hacen el ciclo de ida y vuelta mediante parse_lunar_time_metadata, y el envoltorio KIF lo hace mediante Envelope::parse hasta artefactos iguales que llevan la etiqueta MODELLED.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Exportación de interoperabilidad lunar | modelled |
src/lunar_interop.rs export_lunar_oem, export_lunar_time_metadata, parse_lunar_time_metadata, export_kif_lunar, oem_conformance, LunarInteropScenario. Referencia independiente: InternalConsistency: ciclo de ida y vuelta determinista (CCSDS OEM mediante crate::oem::parse_oem; KIF mediante crate::interchange::Envelope::parse; metadatos de tiempo mediante serde_json) más ajuste a la norma de los nombres de campo frente a la semántica de campos publicada de CCSDS OEM + LunaNet/IOAG. Pruebas (lunar_interop::tests): el OEM exportado lleva los tokens lunares REF_FRAME (MOON_ME/MOON_PA) y TIME_SYSTEM (LTC/TCL), CENTER_NAME = MOON, el objeto y líneas de datos bien formadas; los metadatos de tiempo lunar hacen el ciclo de ida y vuelta (tasa/banda/referencia) y rechazan basura; el envoltorio KIF se serializa y deserializa hasta un valor igual con la etiqueta de honestidad MODELLED presente; un OEM deliberadamente roto (sin TIME_SYSTEM) falla oem_conformance y se informa como ausente; el escenario se despacha mediante run_toml. Alcance honesto: los nombres/unidades de campo están alineados con normas públicas (CCSDS 502.0-B OEM, marcos lunares WGCCRE de la IAU 2015, la LunaNet Interoperability Specification / la arquitectura lunar de IOAG); la exportación es MODELLED: el ciclo de ida y vuelta determinista + el ajuste a la norma de los nombres de campo es la referencia independiente, esto NO es una prueba certificada de ajuste a la norma de interoperabilidad, la efeméride es ilustrativa, de fuente pública, no afiliada a la ESA, y no se afirma ningún TRL, herencia de vuelo ni aval de ninguna agencia. |
Predicciones preregistradas#
Una predicción preregistrada es un resultado MODELLED congelado antes de que exista ningún dato con el que puntuarlo, con el protocolo de puntuación fijado al mismo tiempo. No es una validación y no añade ninguna fila al registro. Cada una reside en docs/predictions/, con sus entradas congeladas, su resultado y sus hashes SHA-256, y tests/prediction_frozen.rs falla si se mueve cualquier byte congelado; un supuesto modificado se responde con una predicción nueva y fechada junto a la antigua, nunca editándola.
| Predicción | Congelada | Puntuada frente a | Estado |
|---|---|---|---|
| Cobertura de una estación de referencia lunar | c05dac1d, 2026-10-12 | exactitud, disponibilidad, cobertura y niveles de protección publicados de una estación diferencial lunar polar sur, por cualquier parte | aún no puntuada (sin resultados publicados) |
Registro de representatividad de la demostración y de brechas hacia el vuelo (src/representativeness.rs)#
El resultado de una simulación solo sirve como evidencia si declara, de forma visible, a qué está anclado, qué supone y qué lo separa todavía de un sistema de vuelo. El registro de representatividad lo convierte en una salida de primera clase, comprobada por máquina: un registro Representativeness contiene los Anchor externos de la demostración, sus supuestos modelados, sus Gap hacia el vuelo (cada uno con la fase/actividad que lo cerraría) y la banda de TRL para la que es representativo. Es el complemento por resultado de la matriz verification a nivel de capacidad.
La referencia independiente es un conjunto de invariantes de forma cerrada, impuestas por representativeness::tests: un registro Validated debe enumerar al menos un ancla ExternalDataset (una simulación no puede validarse frente a sí misma); un registro Modelled debe enumerar al menos una brecha hacia el vuelo y no puede afirmar una banda de TRL representativa por encima de 4 (la maduración más allá de eso requiere evidencia de hardware/vuelo, que es una brecha y no una salida de simulación); la banda de TRL debe estar bien formada; y un registro PartnerOwned no debe afirmar nada. Estas invariantes ponen en práctica la disciplina de «representatividad justificada + brechas restantes hacia el vuelo claramente identificadas».
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Registro de representatividad y de brechas hacia el vuelo | modelled |
src/representativeness.rs Representativeness/Anchor/Gap, check/is_valid/report/to_json. Referencia independiente: InternalConsistency: invariantes de honestidad de forma cerrada ligadas a la frontera entre estado/tipo de referencia independiente de verification. Pruebas (representativeness::tests): un registro Validated sin ancla externa falla; un ancla interna (ReferenceImpl) no satisface Validated; un registro Modelled sin brecha falla; un registro Modelled por encima de TRL 4 falla; las bandas de TRL mal formadas se detectan; el registro se serializa a JSON con los campos esperados y produce un informe legible. Alcance honesto: el registro comprueba la clasificación de la evidencia de un resultado; no demuestra que las anclas nombradas se resuelvan en pruebas vivas (estas están curadas, exactamente igual que la matriz verification); la afirmación de «comprobado por máquina» se limita a las invariantes de estado/ancla/brecha/TRL. |
Evidencia unificada del compromiso cuántico frente a clásico (src/qtrade.rs)#
Toda área de aplicación de PNT cuántico responde a la misma pregunta de la misma manera: fijar un marco de comparación (escenario + semilla + versión del motor), encaminar un candidato cuántico y una línea base clásica por una misma vía de código neutra, puntuarlos con figuras de mérito comunes e informar —con un intervalo de confianza y una etiqueta honesta de validado/modelado— de dónde gana lo cuántico y dónde no. TradeEvidence da a esa respuesta una única forma, de modo que las verticales de temporización, navegación y detección de anomalías emiten el mismo objeto reproducible y honestamente etiquetado. No reimplementa ningún compromiso: las cifras por FoM proceden de los motores existentes (quantum_trade, crossover y los módulos de las verticales); esto es el contrato más la envoltura de reproducibilidad/representatividad, construida sobre el registro de representatividad y las etiquetas de verificación.
La referencia independiente son identidades de beneficio/ganador de forma cerrada más una envoltura fiel de la salida existente del compromiso. qtrade::tests: la razón de beneficio tiene la polaridad correcta (orientada de modo que >1 signifique siempre que el lado cuántico es mejor, tanto para el holdover, donde más es mejor, como para las FoM de error, donde menos es mejor); un objeto de evidencia construido a partir de un quantum_trade::TradeResult real reproduce sus razones de beneficio; la evidencia deshonesta se rechaza (una representatividad Modelled sin brecha, o una FoM Validated cuyo registro de compromiso no lleva ancla externa); el JSON es determinista y lleva los campos de marco/semilla/motor/FoM/representatividad.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Evidencia del compromiso cuántico frente a clásico | modelled |
src/qtrade.rs TradeEvidence/TradeFom/TradeFrame/Winner. Referencia independiente: InternalConsistency: identidades de beneficio/ganador de forma cerrada + envoltura fiel de quantum_trade::TradeResult; honestidad ligada al registro de representatividad y a la frontera entre estado/tipo de referencia independiente de la verificación. Pruebas (qtrade::tests) como arriba. Alcance honesto: el arnés normaliza cómo se informa y se reproduce un compromiso; la física subyacente de cada FoM es la que aporte el motor contribuyente, con su propia etiqueta de validado/modelado; TradeEvidence no eleva una FoM modelada a validada. |
Biblioteca de modelos de error de dispositivos cuánticos (src/quantum_devices.rs)#
Un único lugar que expone los dispositivos de PNT cuántico entre los que el demostrador hace compromisos —relojes ópticos / de iones atrapados / de iones de mercurio, relojes de referencia clásicos, el interferómetro de átomos fríos y los enlaces de transferencia de tiempo—, cada uno como una DeviceCard que lleva su especificación principal y un registro de representatividad. La mayor parte de la física de los dispositivos se reutiliza (estabilidades de reloj de holdover::QuantumClockClass y clock_state::ClockClass; el interferómetro de átomos fríos de quantum_trade/crossover; enlaces clásicos ópticos/RF de timetransfer_adv). El único modelo realmente nuevo es el enlace de transferencia de tiempo por entrelazamiento / fotón único, cuya precisión de temporización está limitada por el ruido de disparo: σ_t ≈ jitter/√(R·τ) en la tasa de coincidencias detectadas R y la integración τ, degradada por una penalización de cuentas oscuras √(1 + dark/R) y con un suelo fijado por un sistemático irreducible.
La referencia independiente son los coeficientes publicados y reutilizados de relojes/CAI más identidades de forma cerrada de ruido de disparo/pérdidas. quantum_devices::tests: el orden de estabilidad de reloj reutilizado es razonable (red óptica < ion de mercurio < CSAC en σ_y(1 s)); la precisión por entrelazamiento mejora como 1/√τ (4× de integración reduce a la mitad σ) cuando está limitada por el ruido de disparo; la tasa de coincidencias detectadas cae 10× por cada 10 dB de pérdida del enlace; las cuentas oscuras degradan la precisión de forma monótona; el suelo sistemático acota la precisión por debajo; cada ficha de dispositivo es un registro de representatividad válido y Modelled.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Biblioteca de modelos de error de dispositivos cuánticos | modelled |
src/quantum_devices.rs DeviceCard, quantum_clock_card/classical_clock_card, EntanglementTimeLink. Referencia independiente: InternalConsistency: coeficientes publicados reutilizados de relojes/CAI + identidades de forma cerrada de ruido de disparo/pérdidas para el enlace por entrelazamiento. Pruebas (quantum_devices::tests) como arriba. Alcance honesto: los parámetros de los dispositivos de reloj/CAI se reutilizan de los modelos de coeficientes publicados ya existentes en el motor; el modelo del enlace por entrelazamiento es MODELLED a partir del comportamiento publicado de sincronización cuántica de relojes, con valores ilustrativos de fuente pública de tasa de pares/eficiencia/pérdidas: no está validado frente a un enlace medido, y el hardware real de fuente/canal/detector es una brecha declarada hacia el vuelo. |
Temporización cuántica de confianza — cadena de extremo a extremo, difusión segura, anomalías + compromiso (src/timetransfer_chain.rs)#
El escenario quantum-time-transfer compone la cadena de temporización que necesita un demostrador de PNT cuántico: un presupuesto de tiempo de usuario de extremo a extremo (error de inercia del reloj de referencia y precisión de temporización del enlace combinados en cuadratura) para una cadena cuántica (reloj de red óptica + enlace por entrelazamiento/fotón único) frente a una cadena clásica (CSAC + enlace RF bidireccional); un nivel de protección de temporización (TPL, reutilizado de tpl) que acota el error de tiempo no detectado; una figura de mérito de seguridad frente a ataques de retardo/repetición 1 − P_md con una tasa de falsas alarmas indicada (reutilizada de detection); una probabilidad de detección de anomalías de reloj + latencia de detección de cambios por CUSUM (suma acumulada); y la comparación cuántico frente a clásico como qtrade::TradeEvidence honesta que lleva un registro de representatividad + brechas hacia el vuelo.
La referencia independiente es un presupuesto en cuadratura de forma cerrada sobre núcleos reutilizados y validados por separado (ADEV frente a Stable32/NIST; la cota del TPL; detection::analytic_pd/analytic_pmd). timetransfer_chain::tests: la precisión cuántica mejora con el tiempo de integración; la cadena cuántica puede ganar y puede perder en la FoM de precisión (con honestidad: no es una victoria universal; un enlace con muchas pérdidas invierte el resultado); el nivel de protección es finito y positivo; la FoM de seguridad está en [0.1] y crece con el retardo del ataque; la probabilidad de detección de anomalías es monótona con la magnitud del fallo; y la evidencia del compromiso es internamente honesta (is_honest()).
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Temporización cuántica de confianza (cadena + difusión segura + anomalías + compromiso) | modelled |
src/timetransfer_chain.rs QuantumTimeTransferScenario/Report, to_svg; kind="quantum-time-transfer". Referencia independiente: InternalConsistency: presupuesto en cuadratura de forma cerrada sobre núcleos validados reutilizados (ADEV/Stable32-NIST, cota del TPL, Pd/Pmd analíticas de detección); honestidad ligada al registro de representatividad. Pruebas (timetransfer_chain::tests) como arriba. Alcance honesto: los parámetros de reloj/enlace son ilustrativos, de fuente pública; el enlace por entrelazamiento es el modelo MODELLED limitado por el ruido de disparo de quantum_devices; esto modela la clase de sistema de temporización de confianza: no está validado frente a un enlace de extremo a extremo medido, y el hardware real de reloj/enlace/canal espacial es una brecha declarada hacia el vuelo; no se afirma ningún TRL, herencia de vuelo ni certificación. |
Navegación cuántica sin GNSS (src/quantum_nav_od.rs)#
El escenario quantum-gnss-free-nav compara la navegación por estima durante una interrupción de GNSS con un presupuesto inercial cuántico (un acelerómetro de interferómetro de átomos fríos, reutilizado de inertial::quantum_imu/quantum_trade, cuyo suelo de ruido blanco de CAI está validado dentro de ~2 órdenes de magnitud respecto a Freier et al. 2016) frente a un INS clásico de grado de navegación. Informa del crecimiento del error de posición durante la inercia, del tiempo de holdover hasta un umbral de posición y del compromiso cuántico frente a clásico como qtrade::TradeEvidence honesta. La observabilidad se declara con honestidad: sin ninguna solución externa durante la interrupción, el sesgo del acelerómetro es inobservable, por lo que el error de posición crece sin cota (≈ ½·sesgo·t² más un término de paseo aleatorio de velocidad); un sensor cuántico de menor sesgo ralentiza ese crecimiento pero no cierra la brecha: solo lo hace una solución externa.
La referencia independiente son los presupuestos inerciales reutilizados (QuantumNavBudget/ClassicalInsBudget, ambos implementan el trait PositionDrift) más identidades de deriva de forma cerrada. quantum_nav_od::tests: el presupuesto cuántico supera al clásico en una interrupción larga (menor error, mayor holdover); el error crece con la duración de la interrupción en ambos (la brecha de observabilidad); la ventaja depende de la interrupción y no es un factor de ganancia constante (la curva cuántica está dominada por el ruido en inercias cortas y por el sesgo en las largas); la evidencia del compromiso es internamente honesta.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Navegación cuántica sin GNSS | modelled |
src/quantum_nav_od.rs QuantumNavOdScenario/Report, to_svg; kind="quantum-gnss-free-nav". Referencia independiente: InternalConsistency: presupuestos inerciales reutilizados (CAI validado por reutilización ~2 órdenes frente a Freier 2016; deriva clásica de forma cerrada); honestidad ligada al registro de representatividad. Pruebas (quantum_nav_od::tests) como arriba. Alcance honesto: una comparación estática de presupuestos de navegación por estima, no un filtro dinámico sobre trayectorias reales; se declara que el sesgo es inobservable sin una solución externa; los parámetros de los dispositivos son ilustrativos, de fuente pública; modela la clase de navegación cuántica sin GNSS: el hardware real de IMU de átomos fríos, una plataforma dinámica y el entorno de vuelo son brechas declaradas hacia el vuelo; no se afirma ningún TRL/vuelo/certificación. |
Detección de fallos / anomalías en sistemas de PNT cuántico (src/quantum_faults.rs)#
El escenario quantum-anomaly-detect define un catálogo etiquetado de fallos de PNT cuántico (salto de frecuencia del reloj, deriva, pérdida de enganche; sesgo escalonado del sensor, caída de señal), puntúa un estadístico de detección en ventanas nominales frente a ventanas con fallo, e informa de la discriminación del detector como un AUC de la ROC y de un fallo mínimo detectable con una tasa de falsas alarmas fija. El enfoque cuántico frente a clásico: una referencia de reloj cuántico más estable reduce el ruido σ del monitor, por lo que detecta fallos más pequeños; se emite como qtrade::TradeEvidence honesta con un registro de representatividad.
La referencia independiente es un AUC de forma cerrada para el estadístico de detección gaussiano (nominal N(0,σ), fallo N(μ,σ) ⇒ AUC = Φ(μ/(σ√2))), comprobado de forma cruzada con el eval_stats::bootstrap_auc_ci validado externamente (validado frente a scikit-learn) y con los umbrales analíticos de detection. quantum_faults::tests: el AUC analítico coincide con valores conocidos (0,5 en μ=0, →1 para μ/σ grande, monótono); el IC de AUC por bootstrap empírico acota la forma cerrada; el monitor cuántico tiene mayor AUC y un fallo mínimo detectable menor; la ventaja desaparece con fallos enormes (ambos detectan a la perfección: no es un margen universal); el catálogo tiene cinco clases etiquetadas; el compromiso es internamente honesto.
| Capacidad | Estado | Referencia independiente / alcance honesto |
|---|---|---|
| Detección de fallos/anomalías en PNT cuántico | modelled |
src/quantum_faults.rs FaultKind, QuantumAnomalyScenario/Report, analytic_auc, min_detectable_fault; kind="quantum-anomaly-detect". Referencia independiente: InternalConsistency: AUC gaussiano de forma cerrada comprobado de forma cruzada con el AUC por bootstrap de eval_stats, validado externamente (frente a scikit-learn), y con los umbrales analíticos de detection. Pruebas (quantum_faults::tests) como arriba. Alcance honesto: el estadístico de detección es un modelo gaussiano, no telemetría real; el catálogo de fallos es sintético etiquetado; los niveles de ruido del monitor cuántico/clásico son ilustrativos, de fuente pública; modela la clase de detección de anomalías de PNT cuántico: la telemetría real de hardware con etiquetas de referencia es una brecha declarada hacia el vuelo; no se afirma ningún TRL/vuelo/certificación. |
Ajuste a las normas — formatos de intercambio, presupuesto de enlace e integridad (comprobaciones con referencia independiente externa)#
Estas normas se validan recuperando los ejemplos resueltos literales / valores de referencia publicados en las propias normas (o en una implementación de referencia independiente), no mediante el ciclo de ida y vuelta propio de Kshana. Recuperar el ejemplo de anexo de una norma es la mejor comprobación de ajuste a la norma disponible para un analizador de formatos de intercambio.
| Norma | Estado | Referencia independiente externa |
|---|---|---|
| CCSDS OEM (502.0-B Orbit Data Messages) | validated |
tests/ccsds_reference.rs: parse_oem recupera las épocas exactas y los vectores de estado X/Y/Z/Ẋ/Ẏ/Ż del ejemplo KVN de OEM de CCSDS 502.0-B-3, Anexo G §G6, Figura G-11 («OEM Example with No Acceleration, No Covariance», p. G-10), con los dos segmentos de efemérides, incluidos los valores de origen con ceros a la izquierda (-063.042). El archivo de prueba tests/fixtures/ccsds/oem_502_b3_figG11.oem se reproduce carácter por carácter del Libro Azul oficial (no se incluyen los marcadores editoriales «< intervening data records omitted here >», que no son registros OEM válidos). |
| CCSDS TDM (503.0-B Tracking Data Message) | validated |
tests/ccsds_reference.rs: TdmFile::parse recupera los 41 registros RANGE (el primero 3198,03679519614 km, el último 3270,46440460551 km) y los metadatos del ejemplo KVN de TDM de CCSDS 503.0-B-2, Anexo E, Figura E-9 («Range Data with TIMETAG_REF=TRANSMIT», p. E-9). El archivo de prueba tests/fixtures/ccsds/tdm_503_b2_figE9.tdm es literal del Libro Azul. (Esta es la referencia independiente del Libro Azul publicado, junto al ciclo de ida y vuelta ya existente de reference.tdm escrito a mano en src/ccsds_tdm.rs.) |
| CCSDS 133,0 (Space Packet Protocol) | validated |
src/space_packet.rs primary_header_matches_published_independent_test_vectors: el codificador reproduce los vectores de prueba de la cabecera primaria a nivel de byte de la biblioteca spacepackets independiente (us-irs/spacepackets-py, tests/ccsds/test_space_packet.py), p. ej. 18 02 40 34 00 16 y el 1F FF FF FF FF FF de todo máximos, más el caso canónico de telemetría (TM) con todo unos, cada uno con ciclo de ida y vuelta mediante la decodificación. Anchuras/orden de los campos de bits según CCSDS 133.0-B-2 §4.1.3. |
| CCSDS 401 / DSN (presupuesto de enlace, DSN 810-005) | validated |
src/linkbudget.rs link_equation_reproduces_descanso_galileo_dct: la cadena de FSPL (pérdida en el espacio libre) y C/N₀ reproduce la tabla publicada de control de diseño de telemetría de espacio profundo de J. H. Yuen (ed.), Deep Space Telecommunications Systems Engineering (DESCANSO/JPL (DESCANSO: Deep Space Communications and Navigation Systems Center of Excellence) Pub. 82-76), Tabla 1-1: el enlace descendente en banda X de Galileo (8420,43 MHz) a 6,37 AU: pérdida en el espacio libre 290,54 dB (<0,05 dB) y Pr/N₀ = 54,6 dB-Hz recibido (<0,2 dB). Los centros de banda quedan dentro de las asignaciones de enlace descendente de espacio profundo de DSN/CCSDS-401 (DSN 810-005 Módulo 201). Los parámetros de misión por defecto siguen siendo representativos (no un transpondedor calibrado); lo que se fija es la ecuación del enlace. |
Normas GNSS — estado de la referencia independiente externa y las brechas honestas que quedan:
| Norma | Estado y salvedad honesta |
|---|---|
| RAIM / ARAIM | Núcleo, geometría y nivel de protección de ARAIM validados externamente. El núcleo de detección —el umbral de detección de fallos χ², la no centralidad de detección omitida de χ² no central y los multiplicadores K de ley normal— reproduce SciPy (tests/raim_reference.rs, 171 casos, ≤ 1e-6 rel), y la geometría que lo envuelve reproduce gnss_lib_py (DOP). El valor del nivel de protección (PL) de ARAIM también queda ahora fijado: frente al «ejemplo numérico LPV-200 (LPV: aproximación con guiado vertical y prestaciones de localizador)» del ADD (Documento de Descripción de Algoritmos) v3.1 de referencia de ARAIM del WG-C (WG: Grupo de Trabajo), src/araim_reference.rs / tests/araim_reference_vectors.rs dan VPL 18,2926 m frente a 18,3 m, HPL 13,4063 m frente a 13,45 m y σ_v,acc 1,3694 m frente a 1,3694 m, dentro de la propia TOL_PL = 0,05 m de la referencia (el tipo araim-reference-check). Alcance: modos de fallo de hasta un satélite o una constelación (N_fault,max = 1); los subconjuntos de fallos de eventos múltiples y la exclusión no están implementados, y RAIM clásico sigue sin tener ningún vector de prueba publicado canónico de entrada→HPL. Véase ARAIM_REFERENCE.md. |
| SBAS / DO-229E | Algoritmo del nivel de protección validado ahora externamente. Dados (el, az, σ) por satélite, el sbas_protection_level de kshana reproduce la bifurcación SBAS-PL de RTKLIB (zsiki/rtklib_ws waasprotlevels(), Siki y Takács 2017, «DO-229D Appendix J»), alimentada con la propia σ de esa herramienta calculada a partir de mensajes difundidos reales de EGNOS + RINEX real de BUTE, con una diferencia de HPL < 2e-3 m en 6 épocas (tests/sbas_reference.rs); ESA gLAB v6.0.0 (core/filter.c) confirmó la misma convención. Los factores K (K_H,PA=6.0, K_V=5.33, K_H,NPA≈6.18) coinciden con DO-229E, Apéndice J. Qué está validado y qué no: esto fija el algoritmo del PL (entra σ → salen HPL/VPL); el modelado aguas arriba de σ a partir de los mensajes brutos UDRE/GIVE queda fuera del alcance de kshana: ahí es donde las herramientas independientes de cadena completa siguen discrepando en metros con datos reales. K_V se igualó al valor redondeado 5,33 de la referencia independiente (el Φ⁻¹(1−5e-8)=5.3267 exacto de kshana → VPL ~0,06 % menor; la componente vertical se valida sin factor K como d_U). |
| IONEX / Klobuchar | Modelo difundido validado externamente. El modelo de Klobuchar en L1 reproduce el ionmodel de RTKLIB (tests/klobuchar_reference.rs, < 1e-4 m): paridad de implementación con la referencia abierta de facto, ya que no existe ningún ejemplo resuelto oficial de verdad medida. El lector de mapas de TEC de IONEX ya existe (src/ionex.rs, probado con pruebas unitarias); la brecha restante es una comprobación cruzada del mismo frente a un producto GIM real, no el modelo difundido. Véanse las filas de Klobuchar en Afirmaciones frente a realidad. |
| Código de ensanchamiento GPS L1 C/A (IS-GPS-200) | Generación de código validada externamente. src/sdr.rs (ca_first_ten_chips_match_is_gps_200_octal): el generador de código C/A con LFSR G1/G2 (registro de desplazamiento con realimentación lineal) reproduce exactamente las asignaciones de fase de código publicadas en la Tabla 3-Ia de IS-GPS-200: el octal de los diez primeros chips para PRN (ruido pseudoaleatorio) 1–9 ({1440, 1620, 1710, 1744, 1133, 1455, 1131, 1454, 1626}). Esto fija la secuencia de chips del código de ensanchamiento frente a la especificación de interfaz de GPS; las piezas circundantes de modulación, separación espectral y seguimiento de código con DLL (lazo de seguimiento de retardo) (navsignal) siguen siendo MODELLED. |
Temporización para redes, espectro, el sistema solar, constelaciones, campañas y LEO-PNT#
Las capacidades añadidas en la línea 0,28 se califican fila por fila en el documento generado VERIFICATION-MATRIX.md; esta sección resume cuáles de ellas llevan una referencia independiente externa. Una fila es VALIDATED solo con una referencia independiente externa; todo lo demás es MODELLED.
| Capacidad (tipo de escenario) | Estado | Referencia independiente externa, o por qué sigue siendo modelada |
|---|---|---|
MTIE (error máximo de intervalo de tiempo) y TDEV (desviación de tiempo) de telecomunicaciones sobre una serie de holdover (telecom-timing) |
validated |
tests/telecom_timing_reference.rs: 17 factores de promediado de MTIE y 12 de TDEV sobre una serie de holdover de reloj a escala de chip de 2 048 muestras incluida en el repositorio, frente a allantools 2024,06, con error relativo < 1e-12 / < 1e-9. Los veredictos PASS/FAIL de la máscara de la UIT-T (Unión Internacional de Telecomunicaciones, Sector de Normalización de las Telecomunicaciones) y los ajustes predefinidos de osciladores según hoja de datos siguen siendo MODELLED. Véase TELECOM-TIMING.md. |
Predicción de holdover a partir de un registro de reloj medido (slot-timing) |
validated |
tests/slot_timing_cs5071a_holdout.rs: se ajusta sobre el primer tercio del registro real del cesio 5071A, se predice el instante en que se supera un sigma en seis umbrales y se mide sobre los dos tercios reservados; umbral: un factor de 1,5 en cualquier sentido, con cocientes observados de 0,84 a 1,03. El presupuesto de guarda de ranura y la cadencia de fijación construidos sobre ello siguen siendo MODELLED. |
Densidades espectrales de potencia en banda L en forma cerrada y separación espectral (spectrum) |
validated |
Formas cerradas de navsignal frente a valores publicados (fila de la matriz "Closed-form L-band signal power spectral densities…"). La cascada con J/S por banda (relación interferente-señal) y C/N0 efectiva (densidad portadora-ruido), y la entrada/salida SigMF (Signal Metadata Format), siguen siendo MODELLED. |
Posiciones de los planetas a partir de los elementos de Standish del JPL (Jet Propulsion Laboratory) y tiempo de luz entre cuerpos (solar-system) |
validated |
0,30, preregistrado frente a JPL Horizons (DE441): tests/solar_system_standish_preregistered.rs y tests/solar_system_standish_earth_icrf_preregistered.rs, RMS por planeta y componente como máximo igual a la cifra de la Tabla 8.10.1 del Explanatory Supplement (peor caso 0,778), con la división de la Tierra y la rotación ICRF incluidas; tests/solar_system_light_time_solver_preregistered.rs, el solucionador de tiempo de luz sobre posiciones DE441 dentro de 1e-6 s del tiempo de luz de Horizons (peor caso 6.7e-9 s). La comparación anterior con el doble del valor nominal (tests/solar_system_horizons_reference.rs), cuyo umbral se fijó después de la primera comparación, se conserva como regresión no determinante. Urano/Neptuno de la Tabla 1, Plutón, las lunas, las constantes de los cuerpos y body-pnt siguen siendo MODELLED. |
Geometría Walker y ranuras publicadas de GPS, Galileo y GLONASS (sistema mundial de navegación por satélite); dilución de precisión global de GPS (constellation-design) |
validated |
constellation::tests: Walker 24/3/1 reproduce la tabla de definición del servicio abierto de Galileo con 1e-9°, la fórmula de ranuras del documento de control de interfaz de GLONASS y los cruces ecuatoriales de GPS; la mediana de HDOP de la línea base de GPS es 0,940 frente a 0,94 del estándar de prestaciones del Servicio de Posicionamiento Estándar. Los mapas de cobertura multiconstelación arbitrarios alrededor de cualquier cuerpo siguen siendo MODELLED. |
Campañas: misiones encadenadas, barridos, conjuntos de Monte Carlo, ejecuciones con condiciones compartidas (campaign) |
modelled |
tests/campaign_composition_reference.rs (11 tests): una campaña de una sola fase reproduce la ejecución independiente byte a byte, un barrido de un solo nodo lee el mismo número y un conjunto con semilla es estable byte a byte. Son identidades de composición, no una referencia independiente externa. |
| Física del enlace LEO (órbita terrestre baja): coeficientes de lluvia ITU-R (Sector de Radiocomunicaciones de la UIT) P.838, atenuación por lluvia y centelleo P.618, pérdida de penetración en edificios P.2109, ionosfera de primer orden, Doppler máximo | validated |
tests/leo_link_reference.rs, tests/leo_doppler_reference.rs: las propias tablas de las Recomendaciones UIT-R y los ejemplos de validación de la Comisión de Estudio 3 (incluidos en el repositorio con su fuente y fecha de obtención), el cociente de retardo de grupo de IS-GPS-200 para la ionosfera, y la tabla publicada de Doppler máximo de Leclere, Marathe y Reid (ION GNSS+ 2025, arXiv 2509,19551). |
Mensaje de navegación LEO: algoritmo de usuario de efemérides de difusión del ICD (documento de control de interfaz) de Galileo, CRC-24Q (comprobación de redundancia cíclica de 24 bits), pesos globales promedio de SISRE (error de distancia de la señal en el espacio) (leo-navmsg) |
validated |
tests/leo_navmsg_reference.rs: el algoritmo de usuario de Galileo reproduce RTKLIB (una biblioteca de código abierto de posicionamiento cinemático en tiempo real) con 1 mm sobre cuatro efemérides de difusión reales de Galileo; CRC-24Q da el valor de comprobación de catálogo 0xCDE703 y los bytes de comprobación de la trama de ejemplo 1005 de RTCM (Radio Technical Commission for Maritime Services); los pesos de SISRE reproducen la tabla publicada de MEO/GEO. El ajustador, la actualización a mitad de pasada, la codificación binaria, el texto de estilo RINEX-4/CSV (valores separados por comas) y los modelos de efemérides seleccionables siguen siendo MODELLED. |
Diseño de señal LEO, pasada y presupuesto de enlace, Doppler y posicionamiento conjunto GNSS+LEO, convergencia de PPP (posicionamiento preciso de punto), posicionamiento 5G NTN (red no terrestre), transferencia de tiempo LEO (leo-signal, leo-pass, leo-pvt, leo-ppp, ntn-positioning) |
modelled |
tests/leo_signal_reference.rs, tests/leo_fusion_scenarios.rs: formas cerradas, coherencia del filtro (por ejemplo, el NEES promediado por ejecución del filtro PPP dentro de su banda del 95%) y comparaciones de tendencias publicadas; sin datos de campo. |
Un sistema LEO-PNT de extremo a extremo (leo-pnt-chain) |
modelled |
tests/leo_pnt_chain.rs: cada valor transferido es igual a la salida propia de la etapa anterior, y cambiar una entrada anterior modifica todas las cifras posteriores que dependen de ella. |
| Resiliencia LEO y verticales (spoofing por Doppler y por coherencia entre bandas, sondeo de la ionosfera) | modelled |
tests/leo_resilience_verticals.rs (10 tests). Los escenarios de resiliencia y de verticales se enumeran en RESILIENCE-CROSSWALK.md. |
Las salidas que son representaciones y no evidencias tienen tests pero no una fila de la matriz: las exportaciones de intercambio (CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemérides STK (Systems Tool Kit), SigMF (Signal Metadata Format)), cada una releída por un validador escrito a partir de la especificación del formato (tests/interop_formats.rs, 13 tests; véase INTEROP.md); las animaciones (tests/animation.rs: repeticiones idénticas byte a byte, recuentos exactos de fotogramas, SVG (Scalable Vector Graphics) bien formado, ninguna dirección externa en el reproductor HTML (HyperText Markup Language)); y el informe de ejecución (tests/advanced_report.rs, tests/advanced_report_cli.rs: cada escenario incluido genera informe sin ninguna sección vacía ni valor de relleno, las etiquetas coinciden con la matriz y el comando registrado reproduce result.json y el informe byte a byte).
Envolvente de operación#
Cada paquete se ejercita a lo largo de su envolvente de entrada declarada mediante tests/scenario_coverage.rs, que comprueba que toda salida numérica es finita (sin NaN/Inf (NaN: no es un número)) y acotada. La tabla indica el intervalo de entrada probado por paquete, el comportamiento esperado de la salida y el test que lo cubre.
| Paquete | Entrada barrida | Intervalo probado | Salida esperada | Test de cobertura |
|---|---|---|---|---|
| clock | threshold_ns (especificación de temporización) |
1 – 500 ns | FoM de holdover/temporización/seguridad finitas | clock_pack_covers_the_spec_threshold_envelope |
| inertial | accel.bias |
1e-7 – 1e-2 m/s² (de átomos fríos a MEMS (sistemas microelectromecánicos) básico) | RMS/p95 de posición finitos y acotados | inertial_pack_covers_the_accel_bias_envelope |
| orbit | mask_deg (máscara de elevación) |
5° – 30° | DOP/disponibilidad finitos; acotados | orbit_pack_covers_the_elevation_mask_envelope |
| spoof | attack.rate_ns_per_s |
0,1 – 50 ns/s | P_md / seguridad finitas, acotadas | spoof_pack_covers_the_attack_rate_envelope |
| hybrid | position_spec_m |
10 – 1000 m | holdover de temporización/posición finito | hybrid_pack_covers_the_position_spec_envelope |
| órbita (real) | TLE reales de gps-ops de Celestrak |
instantánea de 30 satélites, con suma de comprobación estricta | solo se carga con sumas de comprobación válidas; geometría acotada | real_gps_constellation_scenario_loads_with_valid_checksums_and_bounded_output |
| reloj (flicker) | flicker_floor activado/desactivado |
0 frente a 1e-12 | activar el suelo 1/f empeora la deriva en p95 de temporización | flicker_fm_floor_degrades_the_clock_holdover_when_enabled |
| fusión (realismo) | accel.bias 0 frente a 5.88e-7 m/s² |
cero frente a un valor realista distinto de cero | el filtro sigue convergiendo, dentro de 3× el error con sesgo cero | fusion_filter_converges_with_a_realistic_non_zero_bias |
Las filas de flicker-FM y de sesgo de fusión cierran dos carencias concretas de realismo: los términos de ruido están desactivados por defecto pero afectan demostrablemente a la salida cuando se activan, y el filtro de fusión conjunto no depende de que los sesgos se anulen: converge también con un sesgo residual realista de calidad de átomos fríos.
Limitaciones conocidas#
- Las ejecuciones cuánticas y clásicas usan ahora semillas independientes del RNG (generador de números aleatorios) (semilla clásica = semilla + 0x9e3779b97f4a7c15), de modo que sus realizaciones de ruido no están correlacionadas; corregido tras la revisión.
holdover_stiene en cuenta los segmentos: las líneas temporales de interrupción se dividen en segmentos contiguos en cada readquisición de GNSS y el valor notificado es la deriva del peor caso (la más corta) entre ellos. Sigue estando acotado por la resolución de la rejilla temporal (es una cota inferior).- La resincronización de la transferencia de tiempo ISL modela la incertidumbre residual del enlace como un jitter nuevo de media cero en cada paso de medida, más un reanclaje en el intervalo configurado.
Afirmaciones frente a realidad: referencia rápida#
La lista de comprobación de un revisor hostil. Para cada término que pueda leerse como algo más de lo que es: qué hace Kshana hoy y dónde se sitúa en la hoja de ruta la versión real.
| Término que puede encontrar | Qué es realmente hoy | Qué no es (todavía) |
|---|---|---|
| "simulador PNT híbrido cuántico/clásico" | un simulador estocástico clásico impulsado por coeficientes de Allan/ruido publicados de sensores cuánticos | física cuántica de primeros principios (fase de Mach–Zehnder, ruido de proyección, sistemáticos); véase QUANTUM-MODELS.md |
| "fusión de Kalman conjunta" / paquete de fusión | el paquete ejecutable fusion observa el reloj y la posición por separado (una fijación directa de tiempo y una fijación directa de posición), para lo cual el estimador óptimo es genuinamente diagonal por bloques: dos filtros de dos estados con una FoM combinada |
un filtro acoplado para el caso de pseudodistancia existe ya como fusion::coupled::CoupledPntFilter (4 estados apilados [pos,vel,phase,freq], covarianza cruzada entre bloques distinta de cero, validado con NEES) pero todavía no está integrado en el paquete ejecutable, y el paquete es de 1 DOF (un grado de libertad): la extensión 3-D de 8 estados es trabajo futuro |
FoM de seguridad (tipo de escenario spoof) |
1 − P_md de un detector estocástico de spoofing de tiempo: una prueba χ²₁ bilateral / de Neyman–Pearson sobre un estadístico de monitor asistido por reloj, con umbral fijado a partir de una P_fa objetivo, con P_md evaluada a la magnitud de la especificación tanto en forma cerrada como por Monte Carlo (que concuerdan hasta unas pocas veces 1/√N) |
un detector RAIM/ARAIM multisatélite; véase INTEGRITY.md; el estadístico del monitor es un modelo gaussiano con el σ derivado de la PSD del reloj, no una correlación a nivel de señal |
| "detección de spoofing asistida por reloj" | un monitor de discrepancia temporal de un solo reloj (estadístico gaussiano, σ de la PSD del reloj), NO un RAIM multi-SV (SV: vehículo espacial, es decir, un satélite) | RAIM multi-SV en el dominio de la distancia con niveles de protección |
| P_md del detector de spoofing (forma cerrada frente a Monte Carlo) | la P_md analítica basada en Φ y la estimación empírica de mc_runs ensayos coinciden dentro del error de muestreo (≈ 1/√N); validado en los tests de src/spoof.rs / src/detection.rs con una desviación forzada (μ/σ = 2) |
una ROC de detector medida frente a datos de spoofing registrados |
modelo de pseudodistancia de gnss-sim |
una simulación directa: ρ = geometric + clocks + Klobuchar iono + Saastamoinen·Niell tropo + noise + multipath. Cada modelo atmosférico se prueba unitariamente frente a valores calculados a mano (ZHD (retardo hidrostático cenital) ≈ 2,3 m, Niell = 1 en el cenit, oblicuidad de Klobuchar), y el modelo de difusión completo de Klobuchar se contrasta con la implementación de referencia ionmodel() de RTKLIB con precisión submilimétrica (klobuchar_agrees_with_rtklib_reference_implementation, 6,1278 m para el caso de coeficientes por defecto de RTKLIB; no existe ningún vector de prueba oficial publicado de Klobuchar, de modo que esto es paridad de implementación, no verdad medida); una ejecución sin ruido reproduce la geometría y las correcciones con precisión submilimétrica (residuo RAIM ≈ 0) |
una solución de posición a partir de señales reales (PPP/RTK (PPP: posicionamiento preciso de punto)), combinación libre de ionosfera de doble frecuencia, o resolución de ambigüedad de fase de portadora; no está modelada |
modelo de jamming (tipo de escenario jamming) |
una cadena de presupuesto de enlace: J/S a partir de la pérdida en el espacio libre + la ganancia de antena por dirección → C/N₀ efectiva mediante la ecuación antiinterferencia (ganancia de desensanchamiento × separación espectral Q) → pérdida de enganche en un umbral (Kaplan y Hegarty §9,4) |
multitrayecto, dinámica del AGC (control automático de ganancia) en el tiempo, la propia búsqueda de adquisición (la histéresis opcional de [acquisition] es un par de umbrales); la pérdida de cuantificación opcional de [front_end] es la de una entrada gaussiana, no válida para un interferente CW; la matriz opcional [crpa] es de banda estrecha e ideal (sin acoplamiento ni desadaptación), y el apantallamiento opcional de [terrain] es un solo filo de cuchillo sobre una sola tesela SRTM; Q es una constante representativa por tipo, no derivada de la PSD medida del interferente |
| FoM de integridad (paquetes de reloj/holdover) | autoconsistencia del filtro (fracción de muestras de interrupción dentro de su propia cota k·σ) | HPL/VPL, riesgo de integridad / P_HMI, límites de alerta, DO-229E/316/ED-259A: esos se notifican por separado mediante el tipo de escenario integrity (RAIM / ARAIM) y las funciones SBAS, y nunca se integran en esta FoM |
FoM del paquete de escenario inertial heredado |
un presupuesto de error de acelerómetro/giróscopo de un solo eje (1 DOF) (VRW/ARW, inestabilidad de sesgo) con reinicio por ajuste a la verdad | el paquete heredado es de 1 DOF; la ruta de 3 ejes se incluye en el paquete gnss-ins (fila siguiente) |
biblioteca strapdown de 3 ejes + paquete gnss-ins (src/inertial/, src/fusion/pack.rs) |
un navegador verificado de cuaternios/NED (NED: norte-este-abajo) con un modelo determinista de error de IMU (factor de escala, desalineación, sensibilidad a g, cuantización, rampa de velocidad modelados; IEEE Std 952-1997 §A.2; Groves 2013 §4,3), ahora impulsado por el paquete de escenario gnss-ins y configurable por sensor desde TOML (Tom's Obvious Minimal Language, el formato de los escenarios) ([imu_*.error_model]) |
no modelados: error de rectificación por vibración, deriva por gradiente de temperatura. El error de deriva fusionada está limitado por un suelo debido al error de actitud en el traspaso (inclinación/sesgo del acelerómetro débilmente separables), por lo que no se afirma una calibración por sesgo |
"Integración PNT híbrida" (paquete hybrid) |
navegación por estima en lazo abierto delimitada por reinicios GNSS con ajuste a la verdad | una mezcla de Kalman GNSS–INS acoplada (débil/fuerte); eso corresponde al paquete gnss-ins (EKF) y al tipo de escenario hybrid-ukf, que son distintos |
| "Positioning Performance" (paquetes de reloj) | RMS de temporización de fase de reloj en ns (timing_rms_ns) |
una precisión en el dominio de la posición ponderada por RMS/CEP/SEP/DOP (SEP: probable error esférico) |
FoM de posición inercial (pos_rms_m) |
un RMS/p95 de posición de un solo eje en metros, a partir de una sola semilla salvo que runs = N pida un conjunto (entonces media, dispersión y un intervalo de confianza bootstrap del 95% por métrica) |
una distribución de CEP / 2DRMS (el doble del RMS de distancia) de conjunto (hoja de ruta: CEP de Monte Carlo) |
| "validado hasta ~2%" | una concordancia observada típica; el umbral que se aplica es un error relativo de 20–25% | una cota de precisión garantizada del 2% |
| "reproducible / idéntico bit a bit" | repetición idéntica bit a bit en el mismo SO (sistema operativo) + cadena de herramientas fijada; entre Linux, macOS y Windows, la CI comprueba un SHA-256 incluido en el repositorio de la huella de entrada y la forma de cada resultado (tests/cross_platform_golden.rs) y los valores numéricos hasta 1e-6 (tests/golden.rs) |
un resultado completo idéntico byte a byte entre sistemas operativos (diferencias de libm en el último dígito) |
escenario SGP4 de GPS (orbit-sgp4-gps.toml) |
una instantánea genuina de gps-ops de Celestrak (2021-07-28, 30 satélites, sumas de comprobación estrictas), con cada satélite propagado desde su propia época de TLE |
una constelación actual; actualice la instantánea con scripts/fetch_tles.sh (véase REAL_TLE_GUIDE.md); los números de catálogo del NORAD (Mando de Defensa Aeroespacial de América del Norte) son los reales |
Contrastes cruzados del artículo de PNT lunar (evidencia de regresión, no filas de la matriz)#
La suite lunar/cislunar (las capacidades "Lunar & cislunar" y "Lunar PNT suite" del README) tiene sus afirmaciones de artículos publicados contrastadas de forma independiente en tests/validate_p*.rs, cada una frente a una referencia independiente de una implementación distinta:
- huella orbital de transmisión/captura frente a
scipy.special.j1(Bessel J1 de Cephes); - DOP de geometría de balizas en superficie frente a una resolución independiente de
(HᵀH)⁻¹con NumPy; - crecimiento del error de predicción de persistencia de UT1/EOP frente a una relectura con NumPy de las mismas filas literales de
finals2000Adel IERS; - familia plana de órbitas retrógradas distantes frente a la Three-Body Periodic Orbit Database de NASA/JPL;
- presupuesto de precisión de medida de distancia por RF frente a una referencia de primeros principios.
Los fixtures y los scripts generadores de referencias independientes están en tests/fixtures/{p1_footprint,lunar_service,eop_prediction,rf_ranging_precision,dro_family_jpl,p2_independent_dop}/. Refuerzan la evidencia de capacidades que siguen siendo MODELLED en la matriz comprobada por máquina (src/verification.rs); son comprobaciones de regresión, no nuevas filas VALIDATED de la matriz, de modo que no modifican por sí mismas el recuento de la matriz comprobada por máquina. Ese recuento no se reproduce aquí, porque una copia escrita a mano se desfasa: el reparto vigente es la cabecera generada de VERIFICATION-MATRIX.md, que gen_validation_artifacts escribe a partir de verification_matrix() y que tests/verification_artifacts_doc_sync.rs fija.