Masintõlge, mida emakeelne kõneleja pole üle vaadanud. Võrdlusallikaks on ingliskeelne versioon.

AjastusMuuda GitHubisAllikas: docs/CLOCK-LOG-FORMATS.md

Kellalogi vormingud

src/clock_log.rs loeb mõõdetud kellalogi üheks normaliseeritud faasireaks: ühtlane ruudustik valimitest (time_s, phase_s), kus valimi intervall tau0 on öeldud või leitud, iga lünk on loetud ja logi ühikud nimetatud. Loetakse kaheksat vormingut, igaüks dokumenteeritud alamhulgana. Kõik, mis jääb alamhulgast välja, lükatakse tagasi veaga, mis nimetab leitud sisu, mitte ei loeta ligikaudselt.

Lühendid. RINEX on Receiver Independent Exchange Format. TICC on TAPR (Tucson Amateur Packet Radio) ajaintervalli loendur. ADEV on kattuv Alani hälve, TDEV ajahälve ja MTIE maksimaalne ajaintervalli viga. tau0 on valimi intervall sekundites.

Kus logi saab kasutada#

  • telecom-timing: [series.clock_log] asemel series.samples või series.csv_path. Logi faas ns-des on ajavea rida, mida kontrollitakse maskide vastu, ning aruandesse lisandub plokk clock_log, mis ütleb, kuidas seda loeti.
  • Stsenaariumi liik „clock“: tabel [clock_log] lisab käitusele ploki measured: kuidas logi loeti, tabeli SHA-256 (input_sha256; käituse scenario_hash tabelit ei kata) ning faasivalimite räsi ning kattuv ADEV, TDEV ja MTIE oktaavkeskmistamise teguritel. See vajab runs = 1. Simuleeritud holdover on muutmata.

Ilma tabelita parsitakse, räsitakse ja esitatakse mõlemad stsenaariumi liigid täpselt nagu varem.

[clock_log]                 # or [series.clock_log] in a telecom-timing scenario
format = "ticc"             # "rinex-clk", "timelab", "ticc", "ptp4l", "phc2sys", "ts2phc",
                            # "chrony-tracking" or "chrony-statistics"
path = "logs/ticc.txt"      # or text = "..." inline (the only choice in WebAssembly)
channel = "chA"             # TICC: needed when the log holds more than one channel
gaps = "linear"             # "refuse" (default), "longest" or "linear"
# clock = "G08"             # RINEX, linuxptp, chrony: needed when the log holds more than one clock or source
# tau0_s = 1.0              # overrides a header and the detected spacing
# units = "ns"              # TimeLab phase units: s (default), ms, us, ns, ps
# data = "phase"            # TimeLab: phase (default) or frequency

Vormingud#

rinex-clk: RINEX clock failid, versioonid 2,00 ja 3,00 kuni 3,04 (kaasa arvatud 3,04 üheksamärgiline nimeväli). Kirjet RINEX VERSION / TYPE kontrollitakse ja iga muu versioon lükatakse tagasi, nimetades leitud versiooni: IGS avaldab kellavormingu (rinex_clock300.txt, 302, 304) kuni 3,04-ni ning RINEX 4,00, 4,01 ja 4,02 dokumendid defineerivad ainult vaatlus-, navigatsiooni- ja meteoroloogiafailid, seega kellafailil pole versiooni 4,00, mida lugeda. Päist loetakse ainult selle TIME SYSTEM ID jaoks ja see jäetakse vahele kuni END OF HEADER. Andmekirjetest hoitakse ainult ühe kella AS (satelliidi) ja AR (vastuvõtja või jaama) kirjed, valitud nime järgi. Nende esimene väärtusväli, kella nihe sekundites, on faas. Jätkuread ning CR, DR ja MS kirjed jäetakse vahele. Epohhid on kirje kalendriväljad sekunditena alates 1980-01-06 00:00:00 faili enda ajasüsteemis, ilma teisenduseta.

timelab: TimeLabi stiilis ASCII faasi- või sageduslogid, lihttekstivorming, mida TimeLab ekspordib ning mida selle ASCII import ja Stable32 loevad. Ühel real on üks lugem: kas üks veerg ühtlase tau0 juures või kaks veergu time value. Veerge võivad eraldada tühikud, komad või semikoolonid.

  • Read, mis algavad märgiga #, ; või %, on kommentaarid. Kommentaar kujul key = value (või key: value) määrab tau0 (s), units (s, ms, us, ns või ps, faasi jaoks), data (phase või frequency) või time_units (s või mjd, kahe veeru esimese jaoks).
  • Üks eelnev mittenumbriline rida loetakse veeru päiseks.
  • Sageduse andmeid (suhteline sagedus) aktsepteeritakse ainult ühe veeruna. See integreeritakse faasiks kujul x[i+1] = x[i] + y[i]·tau0 (NIST SP 1065, 2008, §4,1).
  • TimeLabi binaar- ja .tim projektifaile ei loeta.

ticc: TAPR TICC loenduri logid (TICC Operation Manual, redaktsioonid 23 november 2016 ja 15 detsember 2025, „measurement modes“). Iga andmeväli on sekundid 12 kümnendkohaga (11 vaikimisi püsivarast 20251101: loetakse iga arv kuni 15). Ajatempel loetakse selle kümnendtekstist täisarvuna femtosekundeid, mitte kahendujukomaarvuna, nii et loenduri käivitamisest päevi hiljem võetud logi faas säilitab loenduri enda eraldusvõime: f64 ajatemplil 3.0e5 s on samm 5.8e-11 s, umbes loenduri 60 ps.

  • Ajatempli režiimi read (<seconds> chA, <seconds> chB) ja TimeLabi režiimi pseudoajatempli kanal (chC) on sündmuste ajatemplid. Valitud kanali faas on selle ajatempel miinus nominaalne tikk: x[k] = t[k] − t[0] − n[k]·tau0, kus n[k] on täisarv tau0 esimesest sündmusest alates. Vahele jäänud sündmus on lünk.
  • Intervalli režiimi read (<seconds> TI(A->B) või mis tahes silt, mis algab TI) loetakse otse faasina, üks lugem tau0 kohta. Stsenaarium peab ütlema tau0_s, sest rida ei sisalda aega.
  • Paired Timestamp režiim trükib samad read kanalite järjekorras ja loetakse Timestamp režiimina; 3-Corner Hat režiim lisab sünteesitud chC, mida loetakse nagu ülal.
  • Period-režiimi ja Debug-režiimi väljund lükatakse tagasi. Kanal, mille lugemid ei kasva, teatatakse Period-režiimina. Binaarne Timestamp režiim ei ole tekst ja selle fail lükatakse tagasi teatega, mis seda ütleb.
  • Read, mis algavad märgiga #, ja read, mis ei ole kujul <number> <label> (näiteks käivitusmenüü), jäetakse vahele ja loetakse.

linuxptp ja chrony logid#

Need viis vormingut loevad seda, mida töötav ajadeemon oma kella kohta kirjutab. Need on mõeldud ajastusahela järelkontrolliks (piirikell, suurmeistri PHC, chrony klient) samade hindajatega nagu teised logid. Need ei loe deemoni seadistust ja siin ei räägi miski deemoniga.

ptp4l, phc2sys, ts2phc: linuxptp servo read, iga vorming loeb ainult oma programmi ridu. Lugem on rida kujul

ptp4l[5003.000]: master offset         40 s2 freq   +1480 path delay       497
phc2sys[7000.000]: CLOCK_REALTIME phc offset       -30 s2 freq    +100 delay   1200
ts2phc[8000.000]: /dev/ptp0 offset          3 s2 freq         -2
  • Ajatempel on esimene [seconds.fraction] real (deemoni monotoonne kell). Seda loetakse ka syslogi prefiksi järel, kus protsessi id, näiteks ptp4l[812]:, ei sisalda murdosa ja seda ei võeta.
  • Faas on logitud offset nanosekundites, teisendatud sekunditeks. See on deemoni mõõdetud orjakella ajaviga oma etaloni suhtes, nii nagu logitud: positiivne, kui ori on ees. See on servo juhtimisel järele jääv viga, mitte vabalt jooksva kella triiv.
  • Sõnad ajatempli ja offset vahel nimetavad allika (master, eth0 master prefiksi [eth0] korral, CLOCK_REALTIME phc, /dev/ptp0). Logi, kus on rohkem kui üks allikas, vajab clock = "<that text>"; viga loetleb need.
  • Lugemid enne seda, kui servo esimest korda teatab s2 (lukustatud), jäetakse välja ja loetakse väljal n_skipped_lines: s0 ja s1 on lukustamata ja sammu olekud, mille nihked on sissetõmbe siirded. Servo, mis ei jõua kunagi olekusse s2, lükatakse tagasi. Rida, millel pole olekuvälja, loetakse sellisena, nagu see on.
  • Kokkuvõtterid (rms ... max ...), teated delay ja selected best master ning teiste programmide read jäetakse vahele ja loetakse.
  • Tagurpidi liikuvad ajatemplid (taaskäivitatud deemon) lükatakse tagasi; jaga logi.

chrony-tracking, chrony-statistics: chrony failid log tracking ja log statistics, loetud veeru positsiooni järgi. Lugem on rida vähemalt 14 veeruga (tracking) või 13-ga (statistics), mis algab UTC kuupäeva ja kellaajaga YYYY-MM-DD HH:MM:SS. Veeru päise rida jäetakse vahele ja loetakse; selle all olev joon ==== jäetakse vahele ilma lugemata.

  • Tracking: veerg 7, kohalik nihe kella uuenduse juures, sekundites. IP-aadress või etalon-id muutub valitud allikaga, nii et ilma clock loetakse iga rida ühe kohaliku kellana. clock = "<id>" hoiab ühe etalon-id.
  • Statistics: veerg 5, allika hinnanguline nihe sekundites. Allika aadressi kohta on üks rida, ja logi vajab clock = "<address>", kui see sisaldab rohkem kui ühte.
  • Epohhid on sekundid alates 1980-01-06 00:00:00 UTC, ilma lisasekundite käsitlemiseta. Chrony kirjutab rea uuenduse või allika valimi kohta, seega vahe ei ole ühtlane. tau0 on mediaanvahe; lugem, mis jääb alla poole tau0 pärast säilitatud eelmist, jäetakse välja ja loetakse väljal n_duplicates, ning pikem vahe on lünk, mida gaps = "refuse" teatab. Anna tau0_s ja gaps = "linear" logi jaoks, millel on püsiv küsitlusintervall.

Chrony veerud ja linuxptp reapaigutused on deemonite avaliku dokumentatsiooni omad. Kataloogis tests/fixtures/clock_log/linuxptp_chrony/ olevad testandmestikud on Kshana jaoks kirjutatud väljamõeldud väärtustega (vt NOTICE.md); päris logi ei loetud, seega võib deemoniversioonide vahel erinev paigutus siiski tagasi lükata või valesti lugeda. Rida, mis ei vasta, jäetakse vahele ja loetakse, mitte kunagi ei arvata.

tau0 ja lüngad#

Kui logi kannab ajatempleid ja tau0 pole antud, on tau0 järjestikuste ajatemplite mediaanvahe, ümardatud neljale tüvenumbrile, ning allikaks esitatakse median-spacing. Loenduri vahe erineb nominaalsest etaloni sageduse nihke võrra, 10^6 osa või vähem. Stsenaariumi tau0_s võidab alati (allikas input), seejärel päisekommentaar tau0 (allikas header).

Valimid paigutatakse ruudustikule t0 + i·tau0 ja puuduv epohh on lünk. Lugemid, mis on ruudustikust kaugemal kui 1 % väärtusest tau0, jäetakse välja ja loetakse, samuti duplikaadid (esimene säilitatakse). Lünga poliitika on üks järgmistest:

  • refuse (vaikimisi): iga lünk on viga, mis loeb lüngad üle;
  • longest: säilita pikim lüngavaba lõik;
  • linear: täida sisemised lüngad lineaarse interpolatsiooniga ja teata täidetute arv.

Hindajad vajavad lüngavaba kirjet, mistõttu lüngad lahendatakse siin.

Sinu enda kell#

Tabel [clock_log] kella liigil teatab, kui stabiilne sinu enda kell oli, simulatsiooni kõrval: scenarios/clock-measured-log.toml (kshana example clock-measured-log) on clock-holdover.toml koos IGS satelliidikella 96 lugemi väljavõttega sisemise TimeLab logina. Asenda text väljadega path ja format oma faili jaoks. Tulemuse plokk measured hoiab, kuidas logi loeti (vorming, tau0 ja kust see pärines, iga lünk) ning selle ADEV, TDEV ja MTIE; see ei muuda simulatsiooni.

Holdoveri käitamine sinu enda kellaga: [clock_fit]#

[clock_log]                      # the measured series, as above
format = "ticc"
path = "my-clock.txt"
channel = "chA"

[clock_fit]
replaces = "classical"           # or "quantum": the simulated clock whose noise the log replaces

Logi sobitatakse failis src/clock_library/card.rs oleva seadmekaardi protseduuriga (konditsioneerimine, ruutliige eemaldatud, lag-1 müra tuvastamine, kaalutud vähimruutude meetod valge PM-i, valge FM-i, flicker FM-i ja juhusliku käiguga FM-i jaoks keskmistamisaegadel, kus on vähemalt 30 vabadusastet). Nimetatud kell võtab seejärel q_wf = h_0 / 2, q_rw = 2 pi^2 h_-2, flicker_floor = sqrt(2 ln 2 h_-1) ja sobitatud drift; y0 jääb nii, nagu stsenaariumil on, sest logi kannab oma etaloni nihet, mitte kella nihet pärast distsiplineerimist. Valget faasimüra sobitatakse ja esitatakse, aga ei simuleerita. Tulemus saab ploki fitted (koefitsiendid, sobituspunktid, käivituse kasutatud väärtused, mis jäeti välja, logi SHA-256) ja kell kannab id-d measured:<12 hex of the phase hash>. Tingimusel runs > 1 tõmbab ansambel sobitatud kellast (plokk measured vajab runs = 1). Sobitus ilma sagedusmürata, sobitamiseks liiga lühike logi ja muu replaces kui quantum või classical on vead, mis seda ütlevad. scenarios/clock-fitted-log.toml on näide (6 tundi IGS satelliidikella).

Mida teadaoleva müraga võrdlus (tests/fixtures/clock_fit/RESULTS.md) näitab ja mida silmas pidada:

  • Täidetud: valge FM-i tase taastatakse 5 % piires igal sünteetilisel kirjel, kus see on; sobitatud kaart reprodutseerib tegeliku Alani hälbe teguri 1,35 piires igal keskmistamisajal, millel see sobitati; müraeksponent, mille sobitus tuvastab, on võrdne allantoolsi omaga igas punktis (5071A kirjel, kui faasihüpe, mille konditsioneerimine eemaldab, eemaldatakse ka allantoolsi sisendist).
  • Täitmata ja testiga kinnistatud: juhusliku käiguga FM taastatakse ainult siis, kui see domineerib kirje pikimatel keskmistamisaegadel, ja isegi siis ühel kolmest 131 072 s rea kirjest, mille ristumine on 3 000 s juures, andis sobitus selle flicker FM-ile ja triivile. Juhusliku käiguga FM-i ja flicker FM-i jaotus ei ole ühe kirje põhjal usaldusväärne. Käivitus reprodutseerib logi stabiilsuse keskmistamisaegadel, mida logi katab; sealt kaugemal lähevad need kaks valikut lahku (flicker FM on konstantne põrand, juhusliku käiguga FM kasvab keskmistamisaja ruutjuurena).
  • MODELLED: mis-oleks-kui selle kella müra kohta nii, nagu logi seda näitab, mitte kella kalibreering ega selle tulevase käitumise ennustus.

Vigane logi on viga, mis nimetab leitu (rida, versioon, puuduv valija), mitte kunagi osaline tulemus: tests/clock_log_real_allantools.rs kinnistab 24 sellist juhtu.

Tõendid#

MODELLED. See on parser ja selle väljund toidab hindajaid, mis on mujal allantoolsi vastu valideeritud. Failis src/clock_log.rs olevad ühiktestid kasutavad väikeseid käsitsi kirjutatud logisid ning linuxptp ja chrony vormingute jaoks kaustas tests/fixtures/clock_log/linuxptp_chrony/ olevaid fikstuure. tests/clock_log_allantools.rs käivitab võrdluse, mis on eelregistreeritud failis tests/fixtures/clock_log/PREREGISTRATION.md: kolm algväärtustatud sünteetilist logi, üks vormingu kohta, mida loeb tagasi sõltumatu lugeja, kirjutatud sellelt lehelt sama autori poolt, kusjuures ADEV, TDEV ja MTIE on kontrollitud allantools 2024,6 vastu; see võrdlus katab ainult kolm esimest vormingut ning linuxptp ja chrony lugejatel on parseritestid, aga oraaklivõrdlust pole. Selle võrdluse logid on sünteetilised, seega miski seal ei kirjelda päris kella ega loendurit; mõõdetud ridade võrdlust kirjeldatakse allpool.

Mõõdetud andmetel#

tests/clock_log_real_allantools.rs käivitab võrdluse, mis on eelregistreeritud failis tests/fixtures/clock_log_real/PREREGISTRATION.md (kinnitatud enne ühtki fikstuuri või käivitust), nelja mõõdetud rea peal: Stable32 PHASE.DAT, 5071A tseesiumkella esimesed 65 536 lugemit vesinikmaseri vastu ning IGS satelliidi G01 (30 s) ja jaama ABMF (300 s) kellad 2026-08-02 IGS lõplikust kellast, kaasa pakutud lõiguna koos selle NOTICE-iga. Esimesed kaks ei kanna levitamisluba: neist kirjutatud logid on git-ignoreeritud kaustas realdata-cache/ (scripts/gen_clock_log_real_ref.py) ja test ütleb seda ning läbib, kui need puuduvad, kui just pole KSHANA_REQUIRE_REALDATA=1. Iga logi loevad mootor ja sõltumatu lugeja ning ADEV, TDEV ja MTIE-d võrreldakse allantools 2024,6 omadega. Kirjutatud failis tests/fixtures/clock_log_real/RESULTS.md: kaasasoleval lugejal ebaõnnestusid eelregistreeritud läved TICC logide, päise versiooni ja viie veateate puhul; need parandati ja võrdlus käivitati muutmata kujul uuesti. Täidetud, välja arvatud üks paar: sagedusloogi MTIE erineb allantoolsi omast, sest allantools integreerib sageduse miinus selle keskmise (kinnistatud kui NOT MET; samaväärne võrdlus on täidetud). Rida jääb MODELLED: TICC logid on mõõdetud kellaandmed, mis meie skript on loenduri paigutusse ümber kodeerinud (päris TICC salvestust ei leitud), ja etalonlugejal on sama autor kui mootoril.