Data Models & Information Flow

From raw radar returns to decision-grade situational awareness — the complete data lifecycle powering multi-sensor intelligence fusion.

🗂️ Entity Relationships

Core Entity Relationship Graph

The domain model captures the full lifecycle of a radar observation: from physical sensor configuration through raw detection, multi-sensor fusion, and track management.

📡 RadarStatus
radar_idPK string
modelRadarModel
latitude / longitudefloat
altitude_mfloat
beam_azimuth_degfloat
max_range_mfloat
operationalbool
detection_countint
🎯 Detection
range_mfloat
azimuth_degfloat
elevation_degfloat
radial_velocity_mpsfloat
snr_dbfloat
range_bin / doppler_binint
cfar_flagbool
target_lat / lon / altfloat?
📋 RadarReport
radar_idFK string
modelRadarModel
timestamp_utcdatetime
frame_numberint
radar_status→ RadarStatus
detections[]→ Detection[]
🔮 FusedPosition
lat / lon / altfloat
num_radarsint
confidence (GDOP)float
timestampdatetime
contributing_radars[]FK string[]
📌 Track
track_idPK string
statetentative|confirmed|lost
lat / lon / altfloat
velocity_mpsfloat
heading_degfloat
last_updatedatetime
confidencefloat
positions_history[]→ FusedPosition[]
🌐 SituationalAwareness
timestampdatetime
scenario_stateScenarioState
scenario_time_sfloat
speed_multiplierfloat
radar_status[]→ RadarStatus[]
tracks[]→ Track[]
events[]dict[]
📊 Raw Data

Sensor-Level Data Types

The foundational measurements produced by each AERIS-10 radar unit on every scan cycle. These raw observations form the input layer of the intelligence pipeline.

🔧 RadarModel Enum

ValueVariantRangeArray
AERIS-10NNear-field3 km8×16 patch
AERIS-10XExtended20 km32×16 slotted waveguide

Determines transmit power (5 W vs 50 W), antenna gain (25 vs 35 dBi), scan rate, and beamwidth — directly affecting detection SNR and spatial resolution.

🎯 Detection Per-target measurement

FieldTypeDescription
range_mfloatSlant range to target
azimuth_degfloatBearing (0°=N, CW)
elevation_degfloatElevation above horizon
radial_velocity_mpsfloatDoppler velocity (neg = approaching)
snr_dbfloatSignal-to-noise after processing gain
range_binint [0–63]FFT range bin index
doppler_binint [0–31]FFT Doppler bin index
cfar_flagboolPassed CFAR threshold
target_lat/lon/altfloat?Geodetic position (computed)

📡 RadarStatus Telemetry heartbeat

FieldTypeDescription
latitude / longitudefloatRadar site WGS84 position
altitude_mfloatAntenna height ASL
beam_azimuth_degfloatCurrent beam pointing direction
max_range_mfloatMaximum instrumented range
operationalboolSensor health status
detection_countintDetections in current frame
max_snr_dbfloatStrongest return in frame

📋 RadarReport Composite frame

The atomic unit of sensor output — one complete scan frame from a single radar, bundling the radar's operational status with all detections observed during that scan cycle.

FieldTypeDescription
radar_idstringUnique sensor identifier (R1–R5)
modelRadarModelHardware variant
timestamp_utcdatetimeFrame capture time (UTC)
frame_numberintMonotonic frame counter
radar_statusRadarStatusEmbedded telemetry
detectionsDetection[]0–N detections per frame

Data rate: At 20 Hz with 5 radars, the system produces up to 100 RadarReports/s — each serialized as JSON (~0.5–2 KB depending on detection count).

🔮 Analyzed Data

Fusion & Track-Level Data Types

Data products generated by the analytics engine after multi-radar correlation, spatial clustering, and temporal track management.

🔮 FusedPosition Multi-radar fix

An SNR-weighted position estimate produced by clustering detections from multiple radars observing the same target.

FieldTypeSignificance
lat / lon / altfloatWeighted centroid of contributing detections
num_radarsintSensor diversity — higher = better triangulation
confidence (GDOP)floatGeometric dilution of precision (<2 excellent, >5 poor)
contributing_radarsstring[]Which sensors participated in this fix

Fusion algorithm: Greedy spatial clustering (1 km gate) → SNR-weighted centroid → GDOP from radar-target geometry matrix.

📌 Track Maintained object

A tracked air object with full kinematic state, lifecycle status, and observation history. The primary intelligence product.

FieldTypeSignificance
track_idstringPersistent identifier (TRK-XXXXXX)
stateenumtentative → confirmed → lost
velocity_mpsfloatGround speed from position differencing
heading_degfloatDirection of travel (0°=N)
confidencefloatLatest GDOP from contributing geometry
positions_historyFusedPosition[]Up to 100 historical fixes
Track Lifecycle: tentative (needs 3 updates to promote) → confirmed (active tracking) → lost (15s without update) → deleted (30s in lost state). Lost tracks can be re-acquired if the target re-enters sensor coverage.

🌐 SituationalAwareness Complete operational picture

The top-level composite message broadcast at 20 Hz via WebSocket. Contains the full operational state: all radar statuses, all active tracks, scenario timing, and the detection event timeline. This is the single data product consumed by the dashboard.

FieldTypeConsumers
timestampdatetimeWall-clock reference for client sync
scenario_stateScenarioStateUI state machine (stopped/playing/paused)
scenario_time_sfloatTimeline scrubber, scenario progress
radar_status[]RadarStatus[5]Radar health panel, range circles, beam lines
tracks[]Track[0–N]Map markers, trails, lost-trail conversion
events[]dict[≤200]Detection timeline sidebar

Delivery: Serialized as JSON (~5–15 KB per frame) over WebSocket at 20 Hz. Client-side rAF coalescing ensures only the latest frame is rendered per browser paint cycle.

🚀 Event Hub Delivery

Data Streams to Azure Event Hub

The analytics engine produces three distinct event streams for ingestion into Microsoft Fabric via Azure Event Hub. Each stream is optimized for its downstream consumers.

⚡ Stream radar_detections

Raw per-detection events from individual radars. Highest volume, lowest latency. Each message represents one CFAR-confirmed target observation.

Volume: ~50–500 events/s
Size: ~300 bytes/event
Partition key: radar_id
Retention: 7 days
▸ View JSON schema
{
  "radar_id": "R1",
  "model": "AERIS-10X",
  "timestamp_utc": "2026-04-15T08:14:31.086Z",
  "frame_number": 42850,
  "range_m": 14250.5,
  "azimuth_deg": 187.3,
  "elevation_deg": 4.2,
  "radial_velocity_mps": -28.5,
  "snr_db": 18.7,
  "target_lat": 61.4215,
  "target_lon": 24.0312,
  "target_alt": 1050.0
}

⚡ Stream fused_tracks

Multi-radar fused track updates. Each message represents the latest kinematic state of a maintained track, published on every track update.

Volume: ~10–60 events/s
Size: ~500 bytes/event
Partition key: track_id
Retention: 30 days
▸ View JSON schema
{
  "track_id": "TRK-A3F1B2",
  "state": "confirmed",
  "lat": 61.4523,
  "lon": 24.0678,
  "alt": 980.0,
  "velocity_mps": 32.5,
  "heading_deg": 182.4,
  "confidence": 1.42,
  "contributing_radars": ["R1","R3","R4"],
  "timestamp": "2026-04-15T08:14:31.086Z"
}

📦 Batch radar_telemetry

Periodic radar health and status snapshots. Lower frequency but critical for operational monitoring, maintenance planning, and historical analysis.

Volume: 5 events/s (1 per radar per second)
Size: ~400 bytes/event
Partition key: radar_id
Retention: 90 days
▸ View JSON schema
{
  "radar_id": "R3",
  "model": "AERIS-10N",
  "timestamp_utc": "2026-04-15T08:14:30.000Z",
  "latitude": 61.47,
  "longitude": 23.99,
  "altitude_m": 130.0,
  "beam_azimuth_deg": 245.7,
  "operational": true,
  "max_range_m": 3000.0,
  "detection_count": 2,
  "max_snr_db": 22.3
}

🔌 Delivery Mechanism

⚡ Real-Time Streaming Path

The analytics engine uses the Azure Event Hub Python SDK (azure-eventhub) with DefaultAzureCredential (Managed Identity) to publish events. Messages are serialized as JSON, partitioned by sensor or track ID for ordered delivery, and sent in micro-batches (up to 100ms window) to optimize throughput.

from azure.eventhub.aio import EventHubProducerClient
from azure.identity.aio import DefaultAzureCredential

credential = DefaultAzureCredential()
producer = EventHubProducerClient(
    fully_qualified_namespace="radar-ns.servicebus.windows.net",
    eventhub_name="radar-detections",
    credential=credential
)

# Micro-batch: accumulate up to 100ms, then flush
batch = await producer.create_batch(partition_key=radar_id)
batch.add(EventData(json.dumps(detection_event)))
await producer.send_batch(batch)

📦 Fabric Eventstream Ingestion

On the Fabric side, an Eventstream connects to the Event Hub as a source, applying optional transformations (timestamp extraction, schema validation) before routing to multiple destinations simultaneously:

  • Eventhouse (KQL DB) — hot path for real-time queries, alerts, and dashboards with sub-second latency
  • Lakehouse (Delta tables) — warm/cold path for historical analytics, ML training data, and compliance archival
  • Reflex triggers — event-driven alerts when track confidence drops below threshold or new tracks enter monitored zones

Eventstream handles exactly-once semantics via Event Hub consumer group checkpointing and Delta table ACID transactions.

🔽 Information Refinement

Intelligence Funnel

Raw electromagnetic returns are progressively refined through signal processing, spatial analysis, and temporal correlation — each stage reducing noise and increasing decision confidence.

📡 RF Returns & Range-Doppler Matrix 64 range bins × 32 Doppler bins × 360° scan = ~2,048 cells per radar per cycle — raw I/Q samples, FFT-processed into range-Doppler maps. Majority is noise and clutter.
🎯 CFAR Detection & Threshold Filtering Cell-Averaging CFAR eliminates ~99.9% of noise cells. Only targets exceeding adaptive threshold + 33 dB processing gain survive. Produces 0–5 detections per radar per cycle.
🌍 Coordinate Transform (Polar → WGS84) Range/azimuth/elevation converted to geodetic lat/lon/alt using spherical Earth model. Detections become geospatially comparable across all radar sites.
🔮 Multi-Radar Spatial Clustering & SNR Fusion Detections within 1 km gate from different radars are clustered → SNR-weighted centroid → GDOP confidence score. Position accuracy improves 40–60% with 2+ radars. Produces FusedPositions.
📌 Track Association & Lifecycle Management Fused positions associated to existing tracks (800m gate) or initiate new tracks. Constant-velocity prediction bridges scan gaps. Tracks promoted after 3 consistent updates. False targets filtered by track persistence.
🌐 Situational Awareness Picture Decision-grade output: confirmed tracks with kinematic state, identity, confidence scores, and full audit trail. From ~10,000 raw cells/s to 3–5 actionable tracks.
+ EXTERNAL DATA SOURCES
🌡️ IoTEnvironmental
📷 CameraVisual/thermal
🛰️ SatelliteSAR/optical
🌐 OSINTOpen source
📻 SIGINTSignals intel
🏢 Microsoft Fabric — Sensor Fusion Data Platform All data sources converge in Fabric's unified OneLake namespace. Eventstream handles real-time ingestion, Lakehouse provides Delta-table storage, Eventhouse enables sub-second KQL queries, and ArcGIS GeoAnalytics adds 160+ spatial functions for geospatial correlation across all source types. The platform transforms multi-source raw data into a joint operational intelligence picture.
📊 Power BIOperational dashboards
🗺️ ArcGIS MapsGeospatial analysis
🤖 ML ModelsThreat classification
⚡ Reflex AlertsAutomated response
🔗 API / B2BPartner data sharing
🔄 Data Flow

Raw-to-Analyzed Data Pipeline

End-to-end data transformation from raw electromagnetic returns through sensor fusion to operational intelligence products. Click any stage to view processing details.

📡

Stage 1 — Sensor Acquisition

⚡ 20 Hz per radar — highest cadence data

Input: Electromagnetic RF returns (10.5 GHz X-band)

Processing:

  • Analog-to-digital conversion → I/Q samples
  • 2D FFT → 64×32 range-Doppler matrix
  • Pulse compression (33 dB processing gain)
  • CA-CFAR adaptive thresholding

Output: Detection objects in polar coordinates

🌍

Stage 2 — Coordinate Transform

Detections become spatially interoperable across all sensors

Input: Detection (range, azimuth, elevation)

Processing:

  • Slant range → ground range projection
  • Radar-centric polar → WGS84 geodetic
  • Earth curvature correction (6,371 km radius)
  • Altitude computation from elevation angle

Output: Detection enriched with target_lat/lon/alt

🔮

Stage 3 — Multi-Radar Fusion

Position accuracy improves 40–60% with multi-radar triangulation

Input: Geo-located Detection[] from all 5 radars

Processing:

  • Spatial clustering (1 km proximity gate)
  • Cross-radar correlation (different radar_ids only)
  • SNR-weighted centroid computation
  • GDOP confidence from radar-target geometry

Output: FusedPosition — superior to any single-radar estimate

📌

Stage 4 — Track Management

Temporal filtering eliminates transient false alarms

Input: FusedPosition[] per cycle

Processing:

  • Association gating (800m, constant-velocity prediction)
  • Track initiation (new target hypothesis)
  • State promotion (tentative → confirmed after 3 updates)
  • Velocity/heading computation via position differencing
  • Track timeout and deletion lifecycle

Output: Track[] with full kinematic state and history

EDGE PROCESSING → CLOUD PLATFORM
🚀

Stage 5 — Event Hub Streaming

Radar data enters the Fabric data platform via partitioned Event Hub streams

Input: SituationalAwareness picture, individual Track and Detection events

Processing:

  • Three parallel Event Hub streams: radar-detections (partitioned by radar_id), fused-tracks (partitioned by track_id), radar-telemetry (partitioned by radar_id)
  • JSON serialization with schema-on-read compatibility
  • Micro-batch producer (100ms flush window) for throughput optimization
  • Managed Identity authentication (DefaultAzureCredential)

Output: Durable, ordered event streams in Azure Event Hub with 7–90 day retention

⚡ ~500 events/s combined throughput across all streams
🌐

Stage 6 — Multi-Source Ingestion

External data sources converge with radar data through Fabric Eventstream

Input: Radar Event Hub streams + external source feeds

External Sources:

  • 🌡️ IoT Sensors — Environmental monitoring (weather, wind, visibility) via IoT Hub; affects radar propagation modeling
  • 📷 Camera Systems — CCTV and thermal imagery events; visual confirmation of radar tracks
  • 🛰️ Satellite Imagery — SAR and optical reconnaissance; wide-area context beyond radar coverage
  • 🌐 OSINT — ADS-B transponder data, NOTAM feeds, flight plan databases; track-to-identity correlation
  • 📻 SIGINT — RF emission detection; electronic signature matching for track classification

Processing:

  • Fabric Eventstream routes each source to appropriate destinations
  • Schema validation and timestamp normalization across sources
  • Fan-out: same event → Eventhouse (hot) + Lakehouse (cold) simultaneously

Output: Unified event streams landing in OneLake with consistent schema and temporal alignment

🔗

Stage 7 — Lakehouse Correlation & Enrichment

Cross-source joins combine radar tracks with external intelligence for enriched situational context

Input: Delta tables in OneLake from all ingested sources

Processing:

  • Spatial correlation — ArcGIS GeoAnalytics ST_DISTANCE joins radar tracks with camera FOV polygons and satellite coverage tiles
  • Temporal correlation — Window joins (±30s) match radar detections with IoT weather readings and OSINT ADS-B positions
  • Identity enrichment — Correlate radar tracks with ADS-B transponder data to distinguish cooperative (known) from non-cooperative (unknown) targets
  • Threat classification — ML feature engineering: velocity profile, flight pattern, RF emission signature, proximity to restricted zones
  • Historical analysis — Delta time-travel enables pattern-of-life analysis across days/weeks of archived data

Output: Enriched track records with identity, classification, threat score, and full cross-source evidence chain

📦 Batch Spark notebooks on schedule + ⚡ Streaming Eventhouse KQL for real-time queries
📊

Stage 8 — Operational Intelligence Products

Decision-grade outputs for commanders, analysts, and automated response systems

Input: Enriched, correlated data from Lakehouse and Eventhouse

Intelligence Products:

  • 📊 Power BI Dashboards — Real-time operational monitoring with RLS-secured views per unit/role; track history, sensor health, coverage gaps
  • 🗺️ ArcGIS Maps for Fabric — Geospatial analysis: heat maps of activity density, track clustering, spatial anomaly detection, terrain-aware coverage modeling
  • 🤖 ML Classification Models — Automated threat scoring using velocity profiles, flight patterns, and multi-source feature vectors; trained on historical labeled data
  • Reflex Alerts — Event-driven triggers: new track in restricted zone, track confidence drop below threshold, sensor offline, anomalous flight pattern
  • 🔗 API / B2B Sharing — Secure partner data exchange via Fabric data sharing; filtered views with column-level security for coalition operations

Output: Actionable intelligence accessible through role-appropriate interfaces with full audit trail back to raw sensor data

⚙️ Configuration

Enumerations & Processing Constants

Fixed parameters that govern the physics simulation, detection logic, fusion rules, and track lifecycle.

📡 Radar Physics

Parameter10N10X
Transmit power5 W50 W
Antenna gain25 dBi35 dBi
Beamwidth2.5°
Scan rate6 RPM2 RPM
Frequency10.5 GHz
Range bins64
Doppler bins32
Processing gain33 dB

🔮 Fusion Engine

ParameterValue
Cluster gate1,000 m
SNR weighting10^(SNR/20)
GDOP excellent< 2.0
GDOP good2.0 – 5.0
GDOP poor> 5.0
Event buffer200 events

📌 Track Manager

ParameterValue
Association gate800 m
Confirm threshold3 updates
Track timeout15 s
Lost timeout30 s
Max history100 positions
Prediction modelConstant velocity