feat(gps): add timer-based assisted reacquisition
Remove the fixed pseudorange start offset, preserve per-PRN navigation assistance across RF loss and power cycles, and seed coherent navigation measurement phase on reacquisition. Add full LNAV almanac visibility scheduling, power-safe QSPI journaling, RF-domain reset isolation, and PPS Gray CDC hardening with Linux, sanitizer, RTL, and end-to-end coverage.
This commit is contained in:
@@ -300,10 +300,10 @@ def page_executive(report: Report) -> None:
|
||||
0.07,
|
||||
y,
|
||||
"Bu projede konum WLS'i doğru çalışırken elde edilen dördüncü state, doğrudan "
|
||||
"125 MHz receiver clock fazı değildir. Pseudorange'lar her epoch'ta minimum "
|
||||
"ABS_SAMPLE ile normalize edildiği için RF sayacının mutlak fazı observation'dan "
|
||||
"çıkar. WLS bias; 68.802 ms sentetik datum ile minimum kanalın gözlenen uçuş "
|
||||
"süresi arasındaki ortak farkı taşır.",
|
||||
"125 MHz receiver clock fazı değildir. Pseudorange'lar her epoch'ta corrected RF "
|
||||
"sample ve satellite transmit-time farklarıyla kurulduğu için sayacın mutlak fazı "
|
||||
"observation'dan çıkar. WLS bias, referans kanalın negatif uçuş süresini ve "
|
||||
"satellite clock correction'ini taşıyan göreli datumdur.",
|
||||
width=100,
|
||||
fontsize=10.2,
|
||||
)
|
||||
@@ -556,7 +556,7 @@ def page_project_map(report: Report) -> None:
|
||||
(0.77, 0.54, 0.17, 0.10, "Tracking ISR", "event queue +\nshadow counter", LIGHT, NAVY),
|
||||
(0.54, 0.54, 0.18, 0.10, "Linked-list state", "TOW owner\nsequence + sample", LIGHT, NAVY),
|
||||
(0.28, 0.54, 0.20, 0.10, "Coherent snapshot", "25 ms window\nmodulo unwrap", PALE_GREEN, GREEN),
|
||||
(0.06, 0.54, 0.17, 0.10, "Pseudorange", "minimum +\n68.802 ms", PALE_GREEN, GREEN),
|
||||
(0.06, 0.54, 0.17, 0.10, "Pseudorange", "ΔS_RF −\nΔT transmit", PALE_GREEN, GREEN),
|
||||
(0.06, 0.34, 0.17, 0.10, "Satellite model", "TOW + 180 ms\nephemeris/clock", PALE_BLUE, BLUE),
|
||||
(0.32, 0.34, 0.23, 0.10, "Weighted LS", "[X Y Z b]\niono + tropo + URA/el", PALE_GREEN, GREEN),
|
||||
(0.64, 0.34, 0.30, 0.10, "Bugünkü çıkış", "position log + static last_solution[4]\nclock bias dışarı taşınmıyor", "#FBEAEA", RED),
|
||||
@@ -651,14 +651,14 @@ def page_pseudorange(report: Report) -> None:
|
||||
y = 0.84
|
||||
ax.text(0.08, y, "1 Fractional RF sample düzeltmesi", fontsize=11, color=NAVY, weight="bold")
|
||||
y = report.equation(ax, y - 0.025, r"A_i^{corr}=A_i^{raw}-\frac{REM_i}{1.023\times10^6}")
|
||||
ax.text(0.08, y, "2 Wrap-safe coherent unwrap ve minimum seçimi", fontsize=11, color=NAVY, weight="bold")
|
||||
y = report.equation(ax, y - 0.025, r"A_{min}=\min_i\left(A_i^{corr}\right)")
|
||||
ax.text(0.08, y, "3 C kodundaki sentetik propagation datum'u", fontsize=11, color=NAVY, weight="bold")
|
||||
ax.text(0.08, y, "2 Corrected RF sample ve transmit-time farkı", fontsize=11, color=NAVY, weight="bold")
|
||||
y = report.equation(ax, y - 0.025, r"\Delta t_i=\frac{S_i-S_{ref}}{16.367981\,MHz}-(T_{tx,i}-T_{tx,ref})")
|
||||
ax.text(0.08, y, "3 Offset-free göreli pseudorange datum'u", fontsize=11, color=NAVY, weight="bold")
|
||||
y = report.equation(
|
||||
ax,
|
||||
y - 0.025,
|
||||
r"P'_i=c\left[\frac{A_i^{corr}-A_{min}}{16.368\,MHz}+S\right]+c\,\delta t_{SV,i}",
|
||||
"S = 68.802 ms; gps_ip.c içinde ms formunda hesaplanır",
|
||||
r"P'_i=c\left[\Delta t_i+\delta t_{SV,i}\right]",
|
||||
"Free-running counter başlangıcı ve ortak uzun-dönem drift farkta yok olur",
|
||||
face=PALE_ORANGE,
|
||||
)
|
||||
report.box(
|
||||
@@ -667,8 +667,8 @@ def page_pseudorange(report: Report) -> None:
|
||||
0.17,
|
||||
0.40,
|
||||
0.14,
|
||||
"Minimum neden var?",
|
||||
"Raw ABS_SAMPLE'ın receiver açılışına bağlı büyük ortak sayısını çıkarır. Uydular arası arrival-time farkları korunur; konum geometrisi bu farklarda bulunur.",
|
||||
"Referans neden var?",
|
||||
"RF counter'ın receiver açılışına bağlı ortak sayısını wrap-safe çıkarır. Uydular arası arrival/transmit-time farkları korunur; konum geometrisi bu farklarda bulunur.",
|
||||
face=PALE_BLUE,
|
||||
)
|
||||
report.box(
|
||||
@@ -677,8 +677,8 @@ def page_pseudorange(report: Report) -> None:
|
||||
0.17,
|
||||
0.40,
|
||||
0.14,
|
||||
"68.802 ms neden var?",
|
||||
"Göreli range'leri fiziksel 20–26 bin km büyüklüğüne taşır ve WLS common bias'ı sıfıra yakın tutar. Yeni bilgi eklemez; datum seçer.",
|
||||
"Sabit offset neden yok?",
|
||||
"WLS dördüncü state göreli datumun büyük ortak bias'ını zaten çözer. Fiziksel konum için kalibre edilmiş nominal uçuş süresi gerekmez.",
|
||||
face=PALE_GREEN,
|
||||
edge="#9BC9AF",
|
||||
title_color=GREEN,
|
||||
@@ -1136,7 +1136,7 @@ def page_sim_method(report: Report) -> None:
|
||||
("Navigation", "Ortak 20 ms transmit-bit epoch; NAV_SOLVE_TIMER=10 → 200 ms"),
|
||||
("Satellite", "Sentetik gerçekçi ECEF/az-el geometrisi, satellite clock, path delay"),
|
||||
("Corrections", "Earth rotation, Klobuchar, aktif C troposfer modeli, URA/elevation noise"),
|
||||
("Firmware", "Modulo unwrap, minimum + 68.802 ms, clock correction, cached four-state WLS"),
|
||||
("Firmware", "Raw-counter/transmit-time difference, clock correction, cached four-state WLS"),
|
||||
("Latency", "Satellite arrival span, WLS compute, scheduler stall, APB jitter"),
|
||||
("PPS", "125 MHz raw oscillator, coarse mapping, timestamped/untagged PI, 8 ns edge grid"),
|
||||
]
|
||||
@@ -1264,7 +1264,7 @@ def page_verification(report: Report) -> None:
|
||||
fig, ax = report.new_page("Doğrulama matrisi ve beklenen sonuç")
|
||||
tests = [
|
||||
("ABS common +5 ms", "XYZ aynı; normalized b aynı", "Observation common phase iptalini kanıtlar"),
|
||||
("STARTOFFSET +1 ms", "XYZ aynı; b +c×1 ms", "Datum dönüşüm işaretini kanıtlar"),
|
||||
("RF counter common shift", "XYZ ve göreli b aynı", "RF counter origin iptalini kanıtlar"),
|
||||
("32-bit ABS wrap", "Pseudorange süreklidir", "Signed modulo unwrap"),
|
||||
("Reference SVID değişimi", "Raw b step; mapped GPS time continuous", "Min datum ownership"),
|
||||
("APB +50 ms delay", "Timestamped PPS fazı değişmez", "Epoch association"),
|
||||
@@ -1340,7 +1340,7 @@ def page_conclusion(report: Report) -> None:
|
||||
("1", "Raw clocks", "16.368 MHz measurement + 125 MHz monotonic counter"),
|
||||
("2", "Paired capture", "ABS / REM / C125 / sequence aynı event"),
|
||||
("3", "Coherent WLS", "minimum datum + all-satellite [XYZ b]"),
|
||||
("4", "GPS receive time", "T_TX(epoch-aligned) + 68.802 ms − b/c"),
|
||||
("4", "GPS receive time", "T_TX(epoch-aligned) − b/c"),
|
||||
("5", "Atomic mapping", "(C125,k, TGPS,k, seq) shadow + commit"),
|
||||
("6", "Disciplined PPS", "immutable raw counter + low-bandwidth PI accumulator"),
|
||||
]
|
||||
@@ -1414,7 +1414,7 @@ def generate(output_pdf: Path) -> None:
|
||||
report,
|
||||
"İlk HOW neden PPS receive-now değildir?",
|
||||
required_plots[4],
|
||||
"Sentetik acquisition/subframe Monte Carlo: mevcut hardware delivery, dokuzuncu takip eden bit nedeniyle HOW sınırından 180 ms ve signal flight time kadar sonradır. HOW +180 ms +68.802 ms kaba yaklaşım bırakır; WLS flight-time + paired timestamp doğru handover'dır.",
|
||||
"Sentetik acquisition/subframe Monte Carlo: mevcut hardware delivery, dokuzuncu takip eden bit nedeniyle HOW sınırından 180 ms ve signal flight time kadar sonradır. HOW +180 ms tek başına uçuş süresi kadar hata bırakır; offset-free WLS flight-time + paired timestamp doğru handover'dır.",
|
||||
)
|
||||
plot_page(
|
||||
report,
|
||||
|
||||
Reference in New Issue
Block a user