The problem
Radar clutter from guard rails, road signs, metal fences and parked vehicles is common on Indian highways and city roads. In clutter, hard-decision association such as GNN can lock onto wrong detections, causing track loss or ghost targets that trigger phantom braking. JPDA instead weighs every plausible detection by its probability. It costs more computation, and a fair, quantified comparison is needed before choosing it for an ECU.
Objectives
- Create radar scenarios with controlled clutter density and closely spaced targets.
- Configure trackerJPDA and trackerGNN with identical filters and track management.
- Explain and verify how JPDA computes association probabilities.
- Compare GOSPA, swaps, breaks, false tracks and run time across clutter levels.
- Recommend which tracker to use under which conditions and computing budgets.
What you need
Tools and toolboxes
- MATLAB — Scenario scripts, Monte Carlo loops, statistics and plotting.
- Sensor Fusion and Tracking Toolbox — trackerJPDA and trackerGNN, initcvekf, and trackGOSPAMetric and trackAssignmentMetrics for evaluation.
- Automated Driving Toolbox — drivingScenario and drivingRadarDataGenerator with configurable false alarm rate for clutter.
- Python with NumPy (optional) — A small two-target JPDA implementation to check association probabilities by hand.
Software
- MATLAB R2023b or later
- Sensor Fusion and Tracking Toolbox
- Automated Driving Toolbox
- Python 3 with NumPy (optional)
Extra parts and data
None beyond the software above.
Key concepts
- Clutter density
- The expected number of false detections per unit of measurement space per scan. It enters the JPDA probability calculation, so it must be set to match the sensor.
- Joint association events
- Every feasible way of pairing detections with tracks in a cluster, where each detection goes to at most one track. JPDA computes a probability for each event.
- Marginal association probability
- The probability that a particular detection belongs to a particular track, summed over all joint events. The track is updated with a probability-weighted combination of detections.
- Cluster
- A group of tracks whose gates share detections. JPDA's cost grows quickly with cluster size, so practical trackers limit it.
Step-by-step guide
- 1
Frame the comparison
Write down the question: under what clutter density, target spacing and detection probability does JPDA reduce track swaps and false tracks enough to justify its computation? Set the scenario family (highway following, side-by-side overtaking, a merge in clutter) and the variables to sweep. State the measures you will report and the computing budget you will compare against, for example a per-scan time limit on a target ECU class.
Checkpoint: A study plan listing variables, ranges, metrics and the per-scan time budget.
- 2
Build scenarios with controlled clutter
Create the scenarios with drivingScenario and a forward radar from drivingRadarDataGenerator. Vary the false alarm rate to create low, medium and high clutter, and confirm the actual number of false detections per scan by counting them. Add roadside barriers so clutter is spatially realistic, not just uniform. Fix seeds and save detections so both trackers see the same input. Also record the detection probability actually achieved, which can differ from the setting at long range.
Checkpoint: Measured clutter counts per scan for each level, and plots showing clutter near the roadside.
- 3
Work a small JPDA example by hand
In Python, set up two tracks and three detections with overlapping gates. List every feasible joint event, compute each event's likelihood from Gaussian measurement likelihoods, detection probability and clutter density, normalise them and sum to get marginal probabilities. Then compute the weighted state update for one track. This small worked example is the core of the viva and makes the toolbox behaviour transparent.
Checkpoint: Hand-computed marginal probabilities that sum correctly and match a toolbox computation on the same numbers.
- 4
Configure the two trackers
Set up trackerJPDA and trackerGNN with the same initcvekf filter initialisation, the same assignment gate and the same confirmation and deletion logic. For JPDA, set ClutterDensity and DetectionProbability from the scenario values and choose the TrackLogic and its thresholds. Keep everything else identical, so the comparison isolates the association method. Write all shared settings into one configuration structure that both trackers read, so a change cannot reach one and miss the other. Keep that file under version control.
Checkpoint: Both trackers run on the low-clutter scenario and produce similar, clean tracks.
- 5
Check sensitivity to clutter density setting
JPDA's performance depends on the clutter density it is told about. Run JPDA with the correct value and with values five times too low and too high, on the medium clutter scenario. Record GOSPA and false tracks. This shows how important it is to characterise the sensor, and gives the examiner evidence that you understand the parameter rather than just setting it.
Checkpoint: A table showing JPDA performance with correct, low and high assumed clutter density.
- 6
Run the Monte Carlo study
For each scenario, clutter level and detection probability (for example 0.7, 0.85, 0.95), run both trackers over at least 50 seeds. Use trackGOSPAMetric for overall quality and trackAssignmentMetrics for swaps, breaks and false tracks. Time each tracker's step call with tic and toc, or timeit, and record per-scan time against the number of detections. Save raw track outputs as well as summary metrics, so new metrics can be computed later without rerunning.
Checkpoint: A full results table with metrics and timing for every combination.
- 7
Study closely spaced targets
Script a family of side-by-side and following scenarios where the lateral gap between two vehicles shrinks from 4 m to 1.5 m, below the radar's angular resolution at range. Plot swap rate and GOSPA against gap for both trackers. This is where JPDA's soft association is expected to help, and also where it can merge tracks, so look for both effects.
Checkpoint: Plots of swap rate and GOSPA against lateral gap for both trackers.
- 8
Measure computational cost
Plot per-scan run time against number of detections and cluster size for both trackers. Note the growth of JPDA time in large clusters and test the tracker's options for limiting cluster size or using approximate event enumeration. Compare the times against the budget you set at the start, remembering that desktop timings only indicate relative cost, not ECU timing. Run timing tests on an otherwise idle machine and repeat them to reduce noise.
Checkpoint: A run-time plot with the budget line and a note on where JPDA exceeds it.
- 9
Analyse failure cases
Replay the worst runs for each tracker on a bird's-eye plot. For GNN, look for a track following a clutter point; for JPDA, look for two tracks being pulled together. Describe each failure and link it to a parameter or a scenario feature. Note any case where JPDA clearly helps and any where it is worse, so the conclusion is balanced.
Checkpoint: At least three annotated failure examples with explanations.
- 10
Write the recommendation and report
Summarise the results into a decision table: for each clutter level and target spacing, which tracker is preferable given accuracy and cost. Write up the method, the worked example, the Monte Carlo results and failure analysis. Present every result with confidence intervals. Release scenarios, seeds and scripts with the report. State plainly any condition where neither tracker met the targets and what a stronger method or better sensor would need to provide, so the recommendation is not overstated.
Checkpoint: A decision table and report supported by reproducible results.
Testing & validation
- Worked JPDA example matches the toolbox on the same inputs.
- GOSPA, swaps, breaks and false tracks for both trackers across clutter levels.
- Sensitivity of JPDA to the assumed clutter density.
- Swap rate against lateral gap for closely spaced targets.
- Per-scan run time against number of detections.
Expected results
A quantified comparison of JPDA and GNN in clutter and with closely spaced vehicles, including computational cost, ending in a practical recommendation of when JPDA is worth using.
Research angle for your M.Tech thesis
Research questions: how do clutter density, detection probability and target spacing jointly determine the benefit of JPDA over GNN, and how sensitive is that benefit to errors in the assumed clutter density? Metrics: GOSPA, swap and false-track rates, and per-scan computation time. Baselines: GNN and greedy association, with MHT as an extension. A study that maps the operating regions where each method is preferred, with an online clutter estimate as a small methodological addition and released scenarios, could form a solid conference paper.
Take it further
- Add a track-oriented MHT tracker (trackerTOMHT) to the comparison.
- Use an IMM filter inside JPDA for manoeuvring vehicles.
- Estimate clutter density online and feed it to the tracker.
- Replay public radar data from nuScenes to test with real clutter.
Viva and review questions
How does JPDA update a track differently from GNN?
GNN updates with one assigned detection; JPDA updates with a weighted combination of all gated detections, weighted by their association probabilities, plus a term for the chance that none belongs to the track.
Why does JPDA need the clutter density?
The probability that a detection is clutter rather than a target depends on how much clutter is expected, so the value directly changes the association probabilities.
What is track coalescence?
When two JPDA tracks share detections over many scans they can be pulled together and converge on the same position, a known weakness with closely spaced targets.
Learn it at DIYguru
These DIYguru courses and programmes teach what this project needs.
