Skip to content
ULAP ONE
Research preview
AI-RAN WG3 · WI#6 · TVWS sensing

SIDSense spectrum sensing

TVWS 470-698 MHz

Is this channel safe to transmit on right now, and how much should you trust that? The gate below is the answer. The pipeline under it is how the answer was reached, stage by stage, each with its own state and its own confidence.

PAWS · unknown
Waiting Not a snapshot Updated nothing has answered yet Sources 0 of 4 sources answering · 4 waiting
Classifier no answer yet PAWS database no answer yet Model card no answer yet OTA captures no answer yet
Data provenance

What this page reads, and what it is allowed to conclude

Waiting

Identity

Read by
Your browser, over this origin. No server-side cache sits in between.
Mode
Live poll. This is not a snapshot and it is not a recording.
Last read
not yet
Sources
4

Measurements

Classifier
Waiting · never
POST /api/tvws/api/v1/sense · every 1 s · ResNet18 inference over one synthesised I/Q window
PAWS database
Waiting · never
GET /api/paws/status · every 1 s · the transmit authority — grant state and emergency waiver
Model card
Waiting · never
GET /api/tvws/api/v1/model/info · every 60 s · checkpoint identity and self-reported accuracy
OTA captures
Waiting · never
GET /api/tvws/api/v1/ota/captures · every 60 s · the index of real over-the-air captures mounted on this deployment

Thresholds, and where they come from

Stale after 2.5 poll cadences (floor 4 s, cap 90 s)
Source: ui/src/lib/domain/liveness.svelte.ts — derived from wall clock, not set by the poll, so a loop that DIED is still detected
Not answering after 3 consecutive misses
Source: ui/src/lib/domain/liveness.svelte.ts — one miss is a blip, three is a fault
Static after 20 poll cadences with no change in the reported value (floor 60 s, cap 5 min)
Source: ui/src/lib/domain/liveness.svelte.ts — an ORTHOGONAL axis. A static source is still live: it answered. The two facts are separate because on 2026-08-03 a tile read 0.0 Mbps for fifteen minutes beside a chip that said "Live · just now". Only sources that report their value to feed.ok(id, value) are judged; the rest claim nothing.

What this proves

  • Each source above answered your browser at the stated time.
  • The audit rows below were written from those answers and from nothing else.

What this does NOT prove

  • A live classifier does not mean a correct classifier. On the 28-channel 2026-08-04 UHF survey this checkpoint detected 2 of 10 live multiplexes; the physics detector, same unchanged checkpoint, detects 10 of 10 — but it is opt-in and this service was not restarted, so a live verdict here is the classifier’s unless occupancy_source says physics-detector.
  • Nothing on this page is an authorisation to transmit.
  • The classifier’s I/Q input is synthesised in this browser. It is not a capture, and it cannot reproduce the over-the-air failure.

Environment

Classifier input
Synthesised in the browser. No radio is attached to this deployment and nothing here transmits.
Real spectrum
Two receive-only capture sets, both a recording and neither a live feed. The five 2026-07-29 captures are what this page can DISPLAY — served from /api/tvws/api/v1/ota/* and selectable above — and that set is entirely occupied, so no vacancy claim rests on it. The 28-channel 2026-08-04 UHF survey (560 records, 10 occupied / 15 vacant / 3 ambiguous) is what the head-to-head numbers on this page are measured on; it has no spectrogram on this surface.

Provenance

Classifier
POST /api/tvws/api/v1/sense · every 1 s
PAWS database
GET /api/paws/status · every 1 s
Model card
GET /api/tvws/api/v1/model/info · every 60 s
OTA captures
GET /api/tvws/api/v1/ota/captures · every 60 s
Caveat, verbatim

Research preview, not a spectrum-access authority. Use PAWS grant state as the authority and treat sensing as advisory.

Raw source

  • docs/SENSING-OTA-RESULT.md the full over-the-air method and result

May this channel be transmitted on?

PAWS is the authority Ch 21 · 512 MHz

The gate says

No authority

Neither a grant nor a denial. The authority was not reached, so this console asserts nothing in either direction. Do not transmit on the strength of this screen.

No decision has been taken yet on this page load. Nothing is granted and nothing is denied.

How much to trust this

The authority
PAWS reported unknown, round trip not measured. It is a simulator, and it is the only thing here that can grant.
The advisory classifier
On the 28-channel 2026-08-04 UHF survey it detected 2 of 10 live multiplexes and called 48 of 300 vacant records occupied. Do not act on a vacancy it reports.
The physics detector
On the same survey, same unchanged checkpoint, it detected 10 of 10 multiplexes and called 0 of 15 vacant channels occupied. It is opt-in and not on this live loop: with no calibrated control floor configured the service falls back to the classifier and reports occupancy_source = cnn-confidence.

Nothing on this page is an authorisation to transmit, and no radio is attached to this deployment.

How the answer was reached

  1. AI classifier
    No inference yet

    Not yet measured

    Model confidence
    not yet measured

    Advisory input. It can never grant, and a model vacancy is not an authorisation.

  2. Physics detector
    Not run on this input

    No verdict

    Confidence
    no threshold is used for occupancy

    The detector has no HTTP endpoint and did not run on the classifier input. Select a real capture below to see its committed verdict.

  3. PAWS database
    Did not answer

    Unknown

    Measured round trip
    not measured

    The only transmit authority on this page. A grant is asserted only from a state it reported.

  4. Compliance gate
    No authority

    No authority

    Decided from
    PAWS unknown

    This is the answer. Everything to the left of it is how it was reached.

Stage 2 has no HTTP endpoint. It is a measurement committed on 2026-08-03 against the five real captures below, and it reads "not run on this input" for everything else — including the synthesised window stage 1 is being given. An empty stage is an absent measurement, never a pass.

Authority state (demo actuator)

Spectrum

Synthesised in this browser not yet read
Never on air

browser loop · 1 Hz · 1024 bins · no radio attached

Rows are generated in this browser at 1 Hz and scroll downward so the display is visibly a running synthetic trace, not a captured one. This is the same family of waveform the classifier above is being fed: centred in an otherwise empty window, which is exactly the capture geometry the model was found to be keying on. It therefore cannot reproduce the over-the-air failure and must not be read as evidence the model works.

Generated bins — there is no frequency axis, because nothing was received 1 Hz, newest row at the top

Live classifier

ResNet18 advisory Ch 21 (512 MHz)
Model prediction Not yet measured Advisory only. A model vacancy is not an authorisation to transmit.
Model confidence not yet measured The model's own certainty, not accuracy and not reliability. Measured at 0.93 to 0.99 on answers that were wrong.
Inference not yet measured Measured by the service, per call.
Signal class not yet measured One of six. There is no DVB-T2 class.
The exact input the classifier is being given
Calls made 0 By this browser, this page load.
Avg latency not measured Over zero calls this reads 'not measured', not 0ms.
Called occupied not measured Share of this page's own calls.

No radio is attached. These samples are generated in the browser, centred in an otherwise empty window — exactly the capture geometry the model was found to be keying on. Checkpoint not reported; its self-reported accuracy is not yet read, measured on a held-out split of the same synthetic generator it trained on, so it cannot detect a leak shared by the whole corpus. On the 28-channel 2026-08-04 UHF survey the same checkpoint detects 2 of 10 live multiplexes. See method and limits.

Channels this page has inferred

6 MHz raster · 470-698 MHz 0 of 23 measured

No channel has been inferred yet on this page load.

23 channels never inferred
model says occupied model says vacant · advisory

Only the selected channel is ever inferred, so every other channel is not measured and carries no confidence figure. This grid uses the 6 MHz US TVWS raster (channel 14 = 470 MHz); the real captures above use the 8 MHz UHF raster (UHF 25 = 506 MHz). The same number means two different frequencies, so the two are never keyed to each other.

Compliance audit log

not assessed against any regulatory regime
Compliance audit log — every grant decision this page has taken, newest first
TIMESTAMPCHCLASSMODEL CONFPAWS STATEDECISIONWAIVER ID
No decisions recorded yet.
Compliance gate

How the last decision was reached

No authority PAWS unknown

Identity

Channel
21 (512 MHz, 6 MHz raster)
Authority
PAWS database, RFC 7545, simulated in this deployment
Advisory input
ResNet18 classifier verdict for this channel
Physics detector
Not on this path — it has no HTTP endpoint and did not see this input
Waiver
none active

Measurements

Decision
No authority
No decision has been taken yet on this page load. Nothing is granted and nothing is denied.
What it permits
No transmission is authorised here
Neither a grant nor a denial. The authority was not reached, so this console asserts nothing in either direction. Do not transmit on the strength of this screen.
PAWS round trip
not measured
Measured by this browser. It was a hardcoded 50ms until 2026-08-04.
Model verdict
Not yet measured
Advisory. Never an authorisation.
Model confidence
not yet measured
Certainty, not accuracy.

Thresholds, and where they come from

A grant is asserted only from a state PAWS reported connected | degraded | down
Source: grantDecision() in ui/src/lib/domain/sensing.ts — anything else, including an unreachable database, is NO AUTHORITY
Waiver channels 21, 23, 25, 27, 29
Source: The emergency waiver payload issued to the PAWS simulator
theta_sense 0.85
Source: The service configuration. It does NOT catch the over-the-air failures, which all arrived above it.

What this proves

  • The decision on screen was taken against the PAWS state named above, and that state came from a real response.
  • When the database cannot be reached, no grant is asserted in either direction.

What this does NOT prove

  • It does NOT mean a transmission is lawful. The PAWS database here is a simulator, and this console is not assessed against any regulatory regime.
  • A GRANTED row does not mean the channel is clear. It means the authority granted it; the model may still be wrong about occupancy.
  • It does NOT carry the physics detector’s verdict. That runs offline, on committed captures, and never on this loop.

Environment

PAWS backend
paws-simulator, RFC 7545 shaped, states connected / degraded / down
Radio
None attached. No TVWS transmitter exists in this deployment.

Provenance

PAWS state
GET /api/paws/status
Decision logic
grantDecision() — ui/src/lib/domain/sensing.ts
Audit rows
Written in this browser, in memory, last 50 only
Caveat, verbatim

The Compliance Audit Log on this page is not assessed against any regulatory regime. It records what this console decided and why. Until 2026-08-04 the first row written on every page load was a GRANTED, produced before PAWS had been polled at all.

Raw source

  • ui/src/lib/domain/sensing.ts — grantDecision()
Amini Amini Infratech for the Global South

Every link and every data fetch on this console is origin-relative. One origin fans out by path: / gateway, /video/, /grafana/, /prom/, /api/. An absolute http://localhost:NNNN URL works on exactly one machine, the one it was written on, and is blocked as mixed content the moment the page is served over https, which is how every operator actually reaches this stack.