Imperial College London MSc Project in Communications and Signal Processing
Academic year 2024–2025
This repository contains the codebase that accompanies the thesis and poster on multistatic FMCW localisation. The code implements a unified objective with two mapping designs and two solvers, together with scripts for single route studies, multi route comparisons, and parameter scans.
This project tackles multistatic FMCW localisation under distributed station measurements. The aim is a robust, lightweight, and reproducible optimisation pipeline that improves target localisation accuracy and cross-station consistency with controlled computational cost.
Algorithmic framework:
- A unified, weighted objective balancing (i) data fidelity, (ii) sparsity/interpretability, and (iii) cross-station consistency (geometry/range/angle terms).
- Two mappings
- Mask-based: 1D Gaussian soft gates in the frequency domain; physically interpretable and stable.
- Atom-based: sinusoidal atoms over time/space; more faithful to the physical forward model.
- Two solvers
- PG (proximal gradient with backtracking): theoretically robust, safe and steady.
- GN/LM (damped Gauss–Newton/Levenberg–Marquardt): larger steps and typically faster convergence; stable with acceptance rule.
.
├── data/ # Output figures and summaries (created automatically)
└── src/ # Project root for running code
├── configs/
│ └── config.yaml # Template configuration
├── experiments/
│ ├── experiment_single.py # One route, detailed qualitative plots
│ ├── experiment_multi.py # Several routes on one figure for comparison
│ └── experiment_scan.py # Parameter scans for η_LS, η_prox, or SNR
├── core/ # Library code
│ ├── station/ # Per-station models, masks and atoms, LS computations
│ ├── geo/ # Geometry updates, initialisation, box constraints
│ ├── prox/ # Proximal operators and soft projections
│ ├── center/ # Centre-level objective and alternating loop
│ ├── sim/ # Scene and FMCW simulation
│ ├── utils/ # Common tools
│ ├── config.py # Config loading and validation
│ └── datatypes.py # Typed containers for measurements and results
└── tests/ # Early scratch scripts
Experiments include:
-
experiment_single.pyRuns one mapping with one solver and produces detailed views such as spectra, trajectories and objective traces.
-
experiment_multi.pyPlots several selected routes together. Useful for quick visual comparison across mapping and solver pairs.
-
experiment_scan.pySweeps one parameter at a time. Supported scans are
ls_eta,prox_eta, andscene.propagation.snr_db. Figures and a concise Markdown summary are saved under../data. The working directory remainssrc.
-
Ensure Python is available and install the usual scientific stack.
Numpy, Scipy, Matplotlib and PyYAML are required. -
Edit
src/configs/config.yamlto set radar, scene, solver and plotting options. -
Run from the
srcdirectory. Output goes to../data(automatically created if missing).- Single route with qualitative figures
cd src python -m experiments.experiment_single- Four-route comparison on a single canvas
cd src python -m experiments.experiment_multi- Parameter scans for a fixed mapping and solver
cd src python -m experiments.experiment_scan
