Tutorial 2 — Holdover do relógio: durante quanto tempo se consegue navegar em inércia
Kind: clock · Cenário: scenarios/clock-holdover.toml (cópia didática: scenarios/clock.toml) · Dificuldade: principiante · ~20 min
No final, terá executado um holdover de relógio com os sinais GNSS (Global Navigation Satellite System) negados, lido a figura de mérito de temporização e compreendido a lei de deriva √(q_wf·T) que explica porque o relógio ótico dura mais do que o de escala de chip, com a lei obtida do NIST (o National Institute of Standards and Technology dos EUA), não inventada.
O que é este cenário#
Quando os sinais GNSS desaparecem, um sistema mantém a hora com o seu próprio relógio de bordo. A fase desse relógio deriva lentamente e, quando a deriva excede a especificação operacional de temporização, o sistema fica fora de serviço. O Holdover é o tempo que se permanece dentro da especificação após a perda de GNSS — a figura de mérito de autonomia principal.
O cenário executa uma cronologia de 2 h: 10 min de sincronização GNSS, depois 6600 s (1,83 h) de negação, face a uma especificação de temporização de 20 ns, amostrada a cada 10 s. Compara dois relógios com código idêntico e com o seu próprio ruído publicado:
- Quantum: um relógio ótico de rede de estrôncio, objetivo espacial σ_y(1 s) = 1×10⁻¹⁵ (arXiv:1503,08457), um alvo de demonstrador em terra, não lançado. σ_y(τ) é o desvio de Allan, a medida padrão da estabilidade de frequência de um relógio para o tempo de média τ.
- Clássico: um relógio atómico à escala de chip (CSAC) Microchip SA.45s, σ_y(1 s) = 3×10⁻¹⁰ (folha de especificações) — um componente comercial em utilização.
Execute-o#
cargo run -- scenarios/clock-holdover.toml
Python:
import json, kshana
r = json.loads(kshana.run(open("scenarios/clock-holdover.toml").read()))
print(r["quantum"]["fom"]["holdover_s"], r["classical"]["fom"]["holdover_s"])
Ler o resumo de uma linha#
Com seed = 42, a especificação de 20 ns e a interrupção de 6600 s:
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
quantum holdover 6600s— o relógio ótico mantém-se durante toda a interrupção de 6600 s sem violar 20 ns. O seu erro de fase no percentil 95 é 1.20e-4 ns, cerca de um décimo de milésimo de nanossegundo: praticamente não se move.classical holdover 2610s— o CSAC viola a especificação de 20 ns aos ~2610 s, menos de metade da interrupção. O seu erro de fase p95 (19,7 ns) fica mesmo sobre a linha da especificação.security n/a (no attack)— este cenário não configura nenhum ataque, pelo que não há nada a detetar e o resumo não imprime um número. O JSON continua a conter o limite analítico de deteção de spoofing de cada relógio emfom.security(0,997 para o relógio ótico; 0,000 para o CSAC, cujo próprio ruído de deriva ao longo da janela já excede 20 ns), assinalado comoapplicable: falseno blocofigure_tiers. Pontuar a deteção face a um ataque real é a história do Tutorial 3.integrity 1.000— aqui trata-se de autoconsistência do filtro (a fração das amostras da interrupção dentro do limite k-sigma do próprio filtro de Kalman), não de um nível de proteção horizontal ou vertical de aviação (HPL/VPL). Verdocs/INTEGRITY.md.
A referência independente não circular: porquê 2610 s para o CSAC?#
Para um relógio de modulação de frequência branca (white-FM), o erro de fase de 1-σ cresce como σ_x(T) ≈ √(q_wf · T), em que q_wf = σ_y(1 s)² tem unidades de s². Esta relação provém da NIST Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis) — as relações σ_y(τ)↔fase — a mesma relação da SP-1065 face à qual tests/calibration.rs valida o desvio de Allan do motor até ~2 %.
Para o CSAC, q_wf = (3×10⁻¹⁰)² = 9×10⁻²⁰ s². Resolva para o tempo em que a fase de 1-σ atinge 20 ns = 2×10⁻⁸ s:
T ≈ (2e-8)^2 / 9e-20 = 4e-16 / 9e-20 ≈ 4444 s (1-sigma crossing)
Os 2610 s do motor não são esse tempo de 1-σ, e não devem ser. holdover_s é o primeiro ponto da grelha de 10 s (step_s = 10) em que o erro de fase absoluto desta realização com seed excede 20 ns (src/fom.rs). A primeira travessia de um nível por um passeio aleatório ocorre muitas vezes bastante antes do tempo em que o seu envelope de 1-σ atinge esse nível, e a realização traz ainda o erro de frequência residual com que o filtro fica após a sincronização de 600 s. Assim, a lei fixa a escala, alguns milhares de segundos para um relógio de 3×10⁻¹⁰ face a 20 ns, não o valor exato. O teste afirma uma banda de 2000–3200 s em torno dele, não o número.
As âncoras das folhas de especificações são elas próprias externas, citadas nas cadeias provenance do cenário: objetivo de rede ótica de Sr 1×10⁻¹⁵ (arXiv:1503,08457); Microchip SA.45s CSAC 3×10⁻¹⁰ (folha de especificações). E o adev_curve exportado coincide com o σ_y(τ) da folha de especificações até ~2 % (tests/calibration.rs, NIST SP 1065). Represente-o como um gráfico log-log “Estabilidade do relógio (ADEV, desvio de Allan)” no playground.
O que o teste fixa#
tests/tutorials.rs::tutorial2_clock_holdover_holds:
quantum holdover >= classical holdover(o relógio ótico tem de aguentar pelo menos tanto tempo),quantum holdover ≈ 6600 s(aguenta toda a interrupção),classical holdover ∈ [2000, 3200] s— uma banda de tolerância em torno da escala white-FM da SP-1065, não um número mágico. A referência independente é a lei, não o valor.
Armadilhas e unidades#
- Os valores de temporização estão em nanossegundos, nunca em metros. (O holdover de posição é um pacote diferente — ver a secção inercial do Tutorial 3.)
q_wftem unidades de s² e é igual a σ_y(1 s)². É a ponte entre um valor de Allan da folha de especificações e o modelo.- O holdover é um limite inferior quantizado pela grelha (
step_s). Não leia demasiado no valor exato; leia a banda. integrityaqui é autoconsistência do filtro, não integridade de aviação.
Para onde ir a seguir#
- Nível 2: aperte
threshold_nsde 20 para 10 e veja o holdover do CSAC descer (2610 s → 1300 s, medido comexercises/tier2_sweep.py), ou usekind = "sweep"para tabelar o holdover face ao nível de ruído do CSACclassical_q_wf(scenarios/sweep-clock-stability.toml: 25 pontos de 10⁻²⁴ a 10⁻¹⁸ s², holdover clássico 2610 s → 250 s). - Nível 3: acrescente
runs = 200para transformar isto num ensemble de Monte Carlo e ler a banda de holdover [p05–p95] (scenarios/clock-ensemble.tomlimprimeclassical holdover 844s [220-2130]). - Depois, o tutorial final: Tutorial 3 — Resiliência quântica contra clássica.