Academic Projects @ Cambridge

Compressive Streaming for Geospatial PipelinesActive
MRes thesis on beating main-memory bandwidths for geospatial computation via cache-optimised in-memory data compression, implemented in C++ with AVX256.
- Accelerated geospatial computation by applying SIMD compression to keep data close to CPU caches, fusing compute into the decoding stage.
- Achieved up to 2x speedups over state-of-the-art on real workloads (NDVI).
- Involved micro-optimisation with CPU-cache and branch-predictor trade-offs, and tuning on a HPC.
- Utilised SLURM to manage HPC resources, benchmarking at scale (>8k hours).
- Applied multi-objective Pareto optimisation to narrow the search space of codec combinations for optimal space-vs-time tradeoffs.
- Awarded 78% (Distinction) for the thesis.
- Featured on the Cambridge Computer Science department's website.
- Ongoing: extending the technique to a broad set of real geospatial datasets (Landsat, Sentinel, SRTM, ETOPO1, WorldClim) and to nonlinear multi-band kernels (NDVI), with speedups approaching the compression-ratio limit under concurrency. See recent technical reports. A paper is in preparation.
C++PythonSlurmGDALAVX256
Embedded Real-Time Activity Recognition
Designed and implemented a real-time activity classifier in C on a lightweight micro-controller, using an algorithm with just 83 bytes of RAM to distinguish gait-related activities from IMU data.
- Developed in C on a FRDM KL03 micro-controller with an MMA8451Q accelerometer.
- Ran within just 83 bytes of RAM, by stripping excess boot code and implementing real-time parameter updates.
- Used Gaussian distributions for stride timing with dynamic variance updates via Welford's algorithm and efficient CDF calculations using the Abramowitz and Stegun approximation.
- The algorithm successfully differentiated between walking, jogging, and running based on stride duration probabilities.
C
Temperature and Pulse Sensors
Sensor Design Project. Implemented and calibrated a temperature and pulse sensor. Raw electronics implemented on an Arduino, real-time signal processing in C, data analysis in Python.
- Achieved a 43.2% increase in temperature measurement accuracy through calibration of thermistors.
- Implemented a real-time heart-rate detection algorithm using peak-finding techniques to provide immediate user feedback.
CArduinoPython
Bayesian Optimisation for PPO
Led a group project applying Bayesian Optimisation to automatically tune PPO's hyperparameters, implemented in Python.
- Developed in Python using Gymnasium for simulation, Stable Baselines3 for PPO, and GPyOpt for Bayesian Optimisation.
- Automatically tuned PPO's hyperparameters for the Cartpole problem, demonstrating more efficient convergence over random search.
- Used Gaussian Process surrogates with Matern52 and periodic kernels.
- Varied neural network architectures to measure the importance of PPO's actor and critic.
Python
Probabilistic Ranking & Latent Dirichlet Allocation Model
Two projects in probabilistic machine learning: one on TrueSkill / probabilistic ranking, the other on topic modelling / the LDA model.
- Evaluated convergence of the collapsed Gibbs sampler and LDA models.
- Achieved a grade A- for both projects.
MATLAB