Data Models & Information Flow
From raw radar returns to decision-grade situational awareness — the complete data lifecycle powering multi-sensor intelligence fusion.
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.
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
| Value | Variant | Range | Array |
|---|---|---|---|
AERIS-10N | Near-field | 3 km | 8×16 patch |
AERIS-10X | Extended | 20 km | 32×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
| Field | Type | Description |
|---|---|---|
| range_m | float | Slant range to target |
| azimuth_deg | float | Bearing (0°=N, CW) |
| elevation_deg | float | Elevation above horizon |
| radial_velocity_mps | float | Doppler velocity (neg = approaching) |
| snr_db | float | Signal-to-noise after processing gain |
| range_bin | int [0–63] | FFT range bin index |
| doppler_bin | int [0–31] | FFT Doppler bin index |
| cfar_flag | bool | Passed CFAR threshold |
| target_lat/lon/alt | float? | Geodetic position (computed) |
📡 RadarStatus Telemetry heartbeat
| Field | Type | Description |
|---|---|---|
| latitude / longitude | float | Radar site WGS84 position |
| altitude_m | float | Antenna height ASL |
| beam_azimuth_deg | float | Current beam pointing direction |
| max_range_m | float | Maximum instrumented range |
| operational | bool | Sensor health status |
| detection_count | int | Detections in current frame |
| max_snr_db | float | Strongest 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.
| Field | Type | Description |
|---|---|---|
| radar_id | string | Unique sensor identifier (R1–R5) |
| model | RadarModel | Hardware variant |
| timestamp_utc | datetime | Frame capture time (UTC) |
| frame_number | int | Monotonic frame counter |
| radar_status | RadarStatus | Embedded telemetry |
| detections | Detection[] | 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).
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.
| Field | Type | Significance |
|---|---|---|
| lat / lon / alt | float | Weighted centroid of contributing detections |
| num_radars | int | Sensor diversity — higher = better triangulation |
| confidence (GDOP) | float | Geometric dilution of precision (<2 excellent, >5 poor) |
| contributing_radars | string[] | 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.
| Field | Type | Significance |
|---|---|---|
| track_id | string | Persistent identifier (TRK-XXXXXX) |
| state | enum | tentative → confirmed → lost |
| velocity_mps | float | Ground speed from position differencing |
| heading_deg | float | Direction of travel (0°=N) |
| confidence | float | Latest GDOP from contributing geometry |
| positions_history | FusedPosition[] | Up to 100 historical fixes |
🌐 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.
| Field | Type | Consumers |
|---|---|---|
| timestamp | datetime | Wall-clock reference for client sync |
| scenario_state | ScenarioState | UI state machine (stopped/playing/paused) |
| scenario_time_s | float | Timeline 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.
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.
Size: ~300 bytes/event
Partition key: radar_id
Retention: 7 days
{
"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.
Size: ~500 bytes/event
Partition key: track_id
Retention: 30 days
{
"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.
Size: ~400 bytes/event
Partition key: radar_id
Retention: 90 days
{
"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.
Intelligence Funnel
Raw electromagnetic returns are progressively refined through signal processing, spatial analysis, and temporal correlation — each stage reducing noise and increasing decision confidence.
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
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
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
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
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
Stage 5 — Event Hub Streaming
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
Stage 6 — Multi-Source Ingestion
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
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
Stage 8 — Operational Intelligence Products
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
Enumerations & Processing Constants
Fixed parameters that govern the physics simulation, detection logic, fusion rules, and track lifecycle.
📡 Radar Physics
| Parameter | 10N | 10X |
|---|---|---|
| Transmit power | 5 W | 50 W |
| Antenna gain | 25 dBi | 35 dBi |
| Beamwidth | 5° | 2.5° |
| Scan rate | 6 RPM | 2 RPM |
| Frequency | 10.5 GHz | |
| Range bins | 64 | |
| Doppler bins | 32 | |
| Processing gain | 33 dB | |
🔮 Fusion Engine
| Parameter | Value |
|---|---|
| Cluster gate | 1,000 m |
| SNR weighting | 10^(SNR/20) |
| GDOP excellent | < 2.0 |
| GDOP good | 2.0 – 5.0 |
| GDOP poor | > 5.0 |
| Event buffer | 200 events |
📌 Track Manager
| Parameter | Value |
|---|---|
| Association gate | 800 m |
| Confirm threshold | 3 updates |
| Track timeout | 15 s |
| Lost timeout | 30 s |
| Max history | 100 positions |
| Prediction model | Constant velocity |