Skip to content

Implement TDOA/FDOA processing for multi-static radar measurements #21

@jonnyspicer

Description

@jonnyspicer

Overview

Implement Time Difference of Arrival (TDOA) and Frequency Difference of Arrival (FDOA) processing to enable proper multi-static radar positioning from raw delay/Doppler measurements.

Problem Statement

Current Gap: The system expects individual radar delay/Doppler measurements but multi-static localization requires relative measurements between radar pairs.

From Flowchart: The "Solver" component shows "node pair detection" processing, indicating the need for relative measurements between radar nodes.

Current vs Required Processing

Current Approach

Radar1: delay=100ms, doppler=50Hz
Radar2: delay=120ms, doppler=30Hz
Radar3: delay=80ms,  doppler=70Hz
         ↓
Direct geometric localization (may be suboptimal)

Required Multi-Static Approach

Raw measurements → TDOA/FDOA computation → Localization
TDOA_12 = delay1 - delay2 = -20ms
TDOA_13 = delay1 - delay3 = +20ms  
FDOA_12 = doppler1 - doppler2 = +20Hz
FDOA_13 = doppler1 - doppler3 = -20Hz
         ↓
Optimized position solving with relative measurements

Target State for MVP

Phase 1: Basic TDOA Processing

  1. Compute relative delays between radar pairs
  2. Apply clock synchronization corrections (if available)
  3. Interface with existing localization algorithms
  4. Handle missing/invalid measurements gracefully

Phase 2: FDOA Integration (if needed)

  1. Compute relative Doppler shifts for velocity estimation
  2. Integrate with tracking filter for improved state estimation

Implementation Approach

class TdoaFdoaProcessor:
    def process_measurements(self, radar_detections, target_associations):
        """Convert individual radar measurements to relative TDOA/FDOA"""
        processed_targets = {}
        
        for target_id, detections in target_associations.items():
            if len(detections) >= 2:
                # Compute all pairwise TDOA/FDOA measurements
                tdoa_measurements = self._compute_tdoa_pairs(detections)
                fdoa_measurements = self._compute_fdoa_pairs(detections)
                
                processed_targets[target_id] = {
                    'tdoa': tdoa_measurements,
                    'fdoa': fdoa_measurements,
                    'radar_positions': [det['radar_pos'] for det in detections]
                }
        
        return processed_targets

Files to Create

  • event/algorithm/processing/TdoaFdoaProcessor.py
  • event/algorithm/processing/__init__.py
  • test/event/test_tdoa_fdoa_processing.py

Files to Modify

  • event/event.py - Integrate TDOA processing into main pipeline
  • event/algorithm/localisation/ - Update localization to use TDOA measurements
  • Configuration files - Add TDOA processing parameters

Benefits for MVP

  • More accurate positioning with proper multi-static measurements
  • Better handling of timing uncertainties
  • Foundation for advanced localization algorithms
  • Alignment with flowchart "Solver" component design

Integration with Existing System

Before RadarOnlyAssociator (#20)

Raw radar data → Need association first → Then TDOA processing

After RadarOnlyAssociator (#20)

Raw radar data → Association → TDOA processing → Localization → Tracking

Success Criteria

  • Compute TDOA measurements from associated radar detections
  • Handle clock synchronization issues appropriately
  • Integrate with existing localization algorithms
  • Improve positioning accuracy compared to direct delay processing
  • Performance suitable for real-time operation
  • Works with synthetic-adsb test data and real radar inputs

Dependencies

MVP Priority

🟡 HIGH - Required for proper multi-static radar operation

Metadata

Metadata

Assignees

No one assigned

    Labels

    mvpMVP-critical issue

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions