Scenario kind pagesEdit on GitHubSource: docs/kinds/by-kind/spectrum.md

spectrum (scenario kind)

Scenario kind of the engine v0.38.0, family Jamming, spoofing and the spectrum. Advisory: analysis output from a research and engineering tool, not type-approved navigation equipment and not a safety-of-life service. Every label here is the engine's or the verification matrix's; a kind is MODELLED unless the matrix says otherwise (how a label is earned: the README's Evidence section).

What it does#

L-band spectrum model and waterfall: the whole GNSS L band as one power spectral density (PSD), frequency across, time down, over a scripted jammer timeline. SIGNALS: GPS L1 C/A and L2C (BPSK(1)), Galileo E1 open service (MBOC(6,1,1/11), or BOC(1,1)), GPS L5 and Galileo E5a (BPSK(10)), each at its carrier with the interface-specification minimum received power (IS-GPS-200, IS-GPS-705, Galileo OS SIS ICD) unless overridden; GLONASS, BeiDou and Galileo E6 are not modelled. JAMMERS: continuous-wave tone, flat narrowband noise, linear sawtooth chirp and broadband noise matched to a band's own modulation, each with a centre, a bandwidth, a received power (direct, or EIRP and range through the jamming kind's free-space path loss) and on/off times. Each jammer is scored against each band by its spectral separation coefficient kappa over the receiver bandwidth, and (C/N0)_eff = [1/(C/N0) + sum (J/S) kappa]^-1; for one jammer this equals the jamming kind's anti-jam equation with Q = 1/(R_c kappa), and the report carries that cross-check (and the jamming kind's representative-Q figure beside it). The noise floor is k T_sys with T_sys = T_ant + 290 K (F - 1). The waterfall averages each cell over its bin and its row (chirps exactly, whole sweeps plus the partial one; jammers switching mid-row by their duty), so the C/N0 timeline and the picture come from the same numbers; result.json carries the grid block-averaged in power, per-band C/N0 and J/S per row, and per jammer per band the SSC, Q, J/S, in-band J/S and steady C/N0. Optional [iq]: the model drawn as complex IQ at one instant, written to and read back from a SigMF recording (cf32_le or ci16_le), and compared with a Welch estimate. Optional [recording] (native builds): a real SigMF recording's Welch PSD beside the model. VALIDATED: the signal PSDs against the textbook main-lobe widths (BPSK(n) 2n x 1.023 MHz null to null; BOC(1,1) lobes centred at +/-1.023 MHz) and the spectral separation coefficients against their Parseval closed forms and Kaplan & Hegarty's Q = 1 (CW) and 1.5 (matched). MODELLED: jammer powers, timeline, front-end bandwidths, the continuous-spectrum (no code lines) treatment and the absence of AGC, blanking and antenna pattern.

One run of scenarios/l-band-waterfall-jamming.toml summarises as: scenario spectrum | 5 bands | 3 jammers | noise floor -202.0 dBW/Hz | worst band gps-l1ca min C/N0 3.2 dB-Hz (J/S 60.2 dB)

Inputs#

From the schema (kshana kinds --json):

  • Required fields: none
  • Optional fields: seed, duration_s, step_s, receiver, grid, bands, jammers, iq, recording

The example scenarios/l-band-waterfall-jamming.toml sets, among others:

Field Value Unit
duration_s 60 s
grid.f_max_mhz 1590 MHz
grid.f_min_mhz 1160 MHz
grid.n_freq 430 not stated
iq.centre_mhz 1575.42 MHz
iq.datatype cf32_le text
iq.log2_samples 16 not stated
iq.nfft 1024 count
iq.sample_rate_mhz 20.48 MHz
iq.t_s 35 s
jammers[0].bandwidth_mhz 16 MHz
jammers[0].centre_mhz 1575.42 MHz

Run it#

kshana scenarios/l-band-waterfall-jamming.toml

3 bundled scenarios use this kind; the others are in scenarios/.

What it gives#

The scalar results of that run, with the units the engine states:

Result Value Unit
duration_s 60 s
iq.centre_hz 1575420000 Hz
iq.comparison.bins_compared 912 count
iq.comparison.integrated_power_ratio 0.999883 1
iq.comparison.mean_abs_difference_db 5.439372 dB
iq.comparison.median_difference_db -0.521006 dB
iq.enbw_hz 30000 Hz
iq.n_samples 65536 count
iq.nfft 1024 count
iq.sample_rate_hz 20480000 Hz

Result label (the engine's): MODELLED: an L-band power spectral density built from closed-form signal spectra (VALIDATED against the textbook main-lobe widths and spectral separation coefficients), jammer spectra and a kT noise floor, reduced to J/S and effective C/N0 by the spectral separation coefficient. The jammer powers, t

The chart the engine writes for scenarios/l-band-waterfall-jamming.toml, kind spectrum

Evidence#

MODELLED 3 · VALIDATED 2: the verification matrix rows that name this kind.

  • VALIDATED Unit-area power spectral densities of GPS L1 C/A and L2C (BPSK(1)), GPS L5 and Galileo E5a (BPSK(10)), sine-BOC(1,1) and Galileo E1 MBOC(6,1,1/11) (navsignal::Modulation::psd, with an MBOC variant added), their numerically located nulls and
  • MODELLED The spectrum kind: a frequency-by-time grid of the L-band power spectral density (thermal floor k T_sys with T_sys = T_ant + 290 K (F - 1), the signals at their interface-specification minimum received powers, and continuous-wave, narrowb
  • VALIDATED sigmf: read and write Signal Metadata Format recordings (JSON .sigmf-meta with the core global, captures and annotations fields; raw .sigmf-data as cf32_le, ci16_le or ci8, the integer decoders shared with realdata::iqif::load_iq), all on s
  • MODELLED The spectrum kind extended beyond the L band: bands given as a preset signal design (drawn with every component, band-limited to the transmit bandwidth, C/N0 and J/S referred to the tracked component) or as a custom carrier and modulation Tests: leo_signal_reference.rs.
  • and 1 more in the matrix.

The rows the run itself exercised, with the oracle the matrix gives each (the public sources are named there):

  • MODELLED Deterministic, scenario-hashed, SBOM + cross-platform golden gates. Oracle (ExternalDataset): SBOM conformance to the official CycloneDX 1.5 JSON Schema (+ valid SPDX identifiers) — an external published standard, zero validation errors over the full dependency graph; the FoM-determinism / byte-reproducibility part remains a pinned self-consistency check, so the row stays MODELLED
  • PARTNER Not provided — Kshana models signal performance, not payload/antenna hardware. Oracle (NoneKind): none: a partner-owned discipline, with no module and no test by design
  • VALIDATED Unit-area power spectral densities of GPS L1 C/A and L2C (BPSK(1)), GPS L5 and Galileo E5a (BPSK(10)), sine-BOC(1,1) and Galileo E1 MBOC(6,1,1/11) (navsignal::M. Oracle (ExternalDataset): Published textbook values: the BPSK(n) main lobe of 2n x 1.023 MHz null to null and the anti-jam coefficients Q = 1 for a narrowband (CW) jammer and Q = 1.5 for a spread-spectrum jammer matched to C/A (Kaplan & Hegarty, Understanding GPS/GNSS, 3rd ed., section 9.4); the BOC(m,n) main lobes centred at plus or minus m x 1.023 MHz (Betz, Binary Offset Carrier Modulations for Radionavigation, NAVIGATION 48(4), 2001); the
  • MODELLED The spectrum kind: a frequency-by-time grid of the L-band power spectral density (thermal floor k T_sys with T_sys = T_ant + 290 K (F - 1), the signals at the. Oracle (InternalConsistency): Reduction to the existing jamming kind's anti-jam equation and link budget (the same code, called on the same inputs), and the k T0 F noise-floor closed form. The signal spectra underneath are the validated row above; the jammer powers, timeline and front-end bandwidths are scenario inputs, the spectra are continuous (no spreading-code lines), and no automatic gain control, blanking or antenna pattern acts on the j
  • VALIDATED sigmf: read and write Signal Metadata Format recordings (JSON .sigmf-meta with the core global, captures and annotations fields; raw .sigmf-data as cf32_le, ci1. Oracle (ExternalDataset): scipy 1.18.1 scipy.signal.welch (BSD-3-Clause) with the same periodic Hann window, overlap, density scaling, no detrend and two-sided mean average: every bin within 1e-12 relative (observed 6.0e-14) over 27 cases, with segment counts taken from scipy's own spectrogram. sigmf-python 1.13.0 (LGPL-3.0, run as a tool) writes five third-party recordings (cf32_le, ci16_le, ci8, two captures with annotations, a non-zero fir

Limitations#

What the run's own report says is not modelled or not validated:

  • spreading-code line structure (for example the 1 kHz lines of C/A): tones are scored against the smooth envelope (result not_modelled[0])
  • automatic gain control, quantisation, pulse blanking and notch filtering (result not_modelled[1])
  • the receive-antenna pattern toward the jammer beyond one gain figure (result not_modelled[2])
  • intra-system multiple-access interference between satellites of one band (result not_modelled[3])
  • GLONASS G1/G2, BeiDou B1/B2 and Galileo E6 (result not_modelled[4])
  • a designed signal's emissions outside its transmit bandwidth: its spectrum is truncated there, so no out-of-band emission reaches a neighbouring band (result not_modelled[5])
  • a chirp's effect on the loop at sweep rates comparable with the loop bandwidth: its C/N0 uses the row-averaged spectrum (result not_modelled[6])
  • MODELLED: an L-band power spectral density built from closed-form signal spectra (VALIDATED against the textbook main-lobe widths and spectral separation coefficients), jammer spectra and a kT noise floor, reduced to J/S and effective C/N0 by the spectral separation coefficient. The jammer powers, timeline and front-end bandwidths are scenario inputs, not measurements. (result label)

See also#