-
Notifications
You must be signed in to change notification settings - Fork 0
Stats and Learnings
The service records every near-miss, transit and prediction into a local
SQLite history DB (data/history.db). From v0.41.0 you can turn that into a
founded, all-time statistical report β in absolute and percentage terms β
either in the browser or on the command line. The report also derives
recommended default settings from your own data.
In the browser (no SSH): click π Stats in the header. The report is generated on demand, shown as text, and downloadable as TXT / CSV / JSON.
On the Pi (CLI):
npm run analyze # text report
node scripts/analyze-history.js --csv > transit-stats.csv
node scripts/analyze-history.js --json > transit-stats.jsonBoth paths call the same core (src/stats.js) β the API endpoints are
/api/stats/report, /api/stats/report.csv, /api/stats/report.txt.
| Question | Key metric | |
|---|---|---|
| a | How many aircraft come by regularly | visits β₯2 / β₯5 / β₯10, returned-on-another-day |
| b | What % of transits were serious candidates | projected and time-confirmed sep <0.1/0.2/0.3/0.5/1/2Β° |
| c | How often a capture would (theoretically) have triggered | imminent-stage episodes/day + actual arms/day |
| d | Typical computational drift of a candidate | sep |finalβbest| and closest-approach time shift |
| e | Aircraft per day | distinct ICAO in the corridor/day |
| f | Typical altitude / distance / elevation of a real candidate | medians + p10βp90 |
| g | When the sep prediction is most exact | error at β₯90 s / 30β60 s / <15 s lead |
| h | Sun vs Moon, best hour, lead time, grazes, top routes/flights | β |
| i | Directional corridor (v0.42.0) | which compass axis (N-S/E-W/β¦) produces your transits β antenna-aiming insight |
| j | Capture yield (v0.42.0) | of the captures actually fired, what % hit a genuine on-disc transit |
The report's recommended defaults are interactive in the π Stats modal: tick the ones you want and Apply selected β it writes them straight to the live SharpCap config (no Settings round-trip). The measure β recommend β apply loop, in two clicks.
For hands-off operation there are two opt-in self-tuning toggles in Settings β Scopes (default off):
-
Self-tune drift window (
sharpcap.adaptiveDrift) β every ~6 h, re-derivesmaxDriftSfrom your measured closest-approach time error (p95). -
Self-tune elevation floor (
sharpcap.adaptiveElevation) β every ~6 h, lowersminElevationDegto a site-specific floor that keeps ~90 % of your confirmed candidates (it only ever lowers it, never raises).
Both are strictly opt-in, clamped, and logged β a hand-set value is only ever changed while its toggle is on.
A busy site directly under the NW-European corridor (10 093 distinct aircraft in 37 days). Your numbers will differ β the point is how to read them.
Traffic is dense, not the bottleneck. ~275 new aircraft/day, 79 % return at least once (median 4 visits; one regular logged 149). At a site like this, selection matters more than opportunity.
The honest "serious candidate" rate is small. Of all 10 093 aircraft ever seen, 9.1 % (917) came within 0.5Β° of the Sun or Moon. The funnel against the β₯30Β°-overhead subset reads much higher (45.9 %) but is apples-to-oranges β most real transits happen below 30Β° (see elevation, below), so that denominator doesn't match the numerator. Use the "of all seen" figure.
Projected β confirmed β the single most important column. 1 132 episodes projected a separation <0.3Β°, but only 124 were time-confirmed that tight β a ~9Γ drop. That gap is the separation drift in action. Confirmed on-disc (<0.27Β°) transits: 119 in 37 days β 3.2/day β the real photographable rate. Tightest confirmed: 0.009Β° (a 33-arcsec bullseye).
How rare is a really tight pass? Of all 10 093 detected aircraft, only 0.83 % (84) actually came confirmed within 0.2Β° β about 1 in 120, or ~2.3/day. The projection is far more optimistic: 688 episodes projected <0.2Β° (6.8 % of all detected), but only 84 (β 12 % of them) held that tight when timed. The denominator matters β the same 84 is 4.1 % of transit episodes, or 14.3 % of confirmed transits. Quote the one that fits the question.
Time is predicted superbly; separation drifts. Closest-approach time
error: median 1.5 s (p95 26.4 s). Separation drift |final β best|:
median 0.31Β° β large against a 0.5Β° disc. Don't trust an early "0.05Β°!"
projection; expect it ~0.3Β° wider by transit time. This one fact drives most of
the recommended defaults below.
Predictions sharpen toward the event, then plateau. Sep error β₯90 s = 0.20Β° β 30β60 s = 0.13Β° β <15 s = 0.13Β°. Past ~60 s out it's about as good as it gets; high-elevation cruise traffic is measurably steadier (0.17Β°) than low, maneuvering traffic (0.21Β°).
The typical real candidate is a cruising jet, fairly low in the sky. ~36 000 ft, ~27 km slant range, median elevation only 24Β° (p10 7Β°). 42 % of confirmed candidates were below 20Β°. Low elevation = worse seeing/haze, but also more opportunities β pick your floor by preference, not dogma.
Directional corridor (v0.42.0). Headings fold to a strongly EβW axis
(50 %), then NWβSE (26 %) β the Amsterdam-Schiphol stream (the top routes are
almost all β¦βAMS). NβS is only 4 %. So this site is an EβW corridor site;
the ADS-B antenna most needs a clear E/W horizon. Other sites will differ β the
report learns yours.
Rhythm. Sun vs Moon β 56/44. Busiest local hour ~10:00. Slight mid-week bump (Wed busiest, Fri quietest). First-warning lead time: median ~8 min.
The report ends with concrete suggestions (current β suggested + the rationale). The shipped v0.41.0 defaults were re-tuned on the data above:
| Setting | Old | New (v0.41.0) | Why |
|---|---|---|---|
sharpcap.preBufferS |
10 s | 5 s | Closest-approach time error is tiny (~1.5 s) β a long lead just wastes frames. |
sharpcap.postBufferS |
10 s | 15 s | A late aircraft is the common miss; bias the window to the tail. |
sharpcap.leadDriftFrac |
0.5 | 0.25 | 0.5 doubled the clip for early arms; re-arming already corrects a moved prediction. |
sharpcap.maxDriftS |
45 s | 30 s | Just above the measured time p95 (~27 s) β covers 95 %, the rest via re-arm. |
sharpcap.minElevationDeg |
20Β° | recommended per site | Many confirmed candidates sit below 20Β°; the report suggests a site-specific floor (e.g. 15Β°) so you re-include the 10β20Β° passes you like, best on clear days. |
The elevation floor stays a recommendation, not a forced global default β it's site-specific. A south-facing site under an E-W corridor sees a very different elevation distribution than a site under an N-S corridor, so the report learns your floor from your confirmed candidates rather than imposing one number on everyone.
-
Episode = one aircraft flyby, grouped across its
radio β candidate β imminentstages (so a single transit isn't counted three times). ISS is excluded from episode stats. -
Projected separation = tightest value the tracker ever projected;
confirmed = tightest value at the time-confirmed
imminentstage. -
Capture arm (v0.41.0): every time the SharpCap trigger actually fired is
logged to
capture_arms, so arms/day and the re-arm rate are real history, not just the session counter in the header.
See also: βοΈ Advanced β SharpCap capture trigger Β· π Reference β Configuration.