Tradução automática, não revista por um falante nativo. O inglês é a referência.

ComeçarEditar no GitHubFonte: docs/tutorials/02-clock-holdover.md

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 em fom.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 como applicable: false no bloco figure_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). Ver docs/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_wf tem 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.
  • integrity aqui é autoconsistência do filtro, não integridade de aviação.

Para onde ir a seguir#

  • Nível 2: aperte threshold_ns de 20 para 10 e veja o holdover do CSAC descer (2610 s → 1300 s, medido com exercises/tier2_sweep.py), ou use kind = "sweep" para tabelar o holdover face ao nível de ruído do CSAC classical_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 = 200 para transformar isto num ensemble de Monte Carlo e ler a banda de holdover [p05–p95] (scenarios/clock-ensemble.toml imprime classical holdover 844s [220-2130]).
  • Depois, o tutorial final: Tutorial 3 — Resiliência quântica contra clássica.