Google Decimeter Challenge: Advanced Kalman Filter

Can we enhance the accuracy of the GPS on our phones? Maybe down to a decimeter accuracy?

📍 Goal of the Competition

"The goal of this competition is to compute smartphones location down to the decimeter or even centimeter resolution, which could enable services that require lane-level accuracy such as HOV lane ETA estimation. Your work will help produce more accurate positions, bridging the connection between the geospatial information of finer human behavior and mobile internet with improved granularity. As a result, new navigation methods could be built upon the more precise data." — Kaggle challenge page

The training data comes from 62 separate drives around San Francisco and the Los Angeles area. GNSS and IMU data were collected from 1–5 phones per drive, alongside ground truth positions from a high-precision GNSS-IMU device in the same vehicle. The map below shows the ground truth traces alongside the GNSS baseline.

Submissions are evaluated on a held-out test set. The score is the mean of the 50th and 95th percentile distance errors, averaged per phone, then averaged across all phones.

🌍 The Coordinate Systems

Four coordinate systems are used in this project. Choosing the right one for each task — and converting between them accurately — is critical.

  1. Earth-Centered Earth-Fixed (ECEF)
  2. Geodetic (longitude, latitude, altitude)
  3. Scene East-North-Up (ENU)
  4. Car-centered

Earth-Centered Earth-Fixed (ECEF)

Satellites are tracked in ECEF (also called the Geocentric coordinate system), with the origin at Earth's center of mass.

  • X-axis: through the origin and the prime meridian in the equatorial plane
  • Y-axis: through the 90°E/90°W longitude planes in the equatorial plane
  • Z-axis: through the North and South Poles

Geodetic coordinate system

A spherical coordinate system where longitude and latitude define angles from reference axes and altitude is the distance from the surface reference ellipsoid.

Scene East-North-Up (ENU)

ENU approximates Earth's curved surface as a local plane, valid only over small areas. The axes point East (+x), North (+y), and Up (+z). Error grows as the device travels far from the origin.

Car-centered coordinate system

In this frame, you are always moving forward. The y-axis aligns with the driving direction (heading); the x-axis points to the side of the car.

📡 How does GNSS work?

Global Navigation Satellite Systems (GNSS) use satellite signals to position small devices. In the United States, this is the US government-owned Global Positioning System (GPS). The locations of 30+ GPS satellites are known at all times; each constantly broadcasts signals that mobile devices receive. The elapsed time between transmission and reception gives the distance between the device and each satellite.

When distances to at least four satellites are known, the device's location can be trilaterated. In practice, satellite signal errors mean the location must be estimated through optimization — typically Weighted Least Squares (WLS), which minimizes the weighted sum of squared residuals Σ(ri − di)2 over all visible satellites Si.

🪄 Kalman Filter

The Kalman filter is an optimal estimator that fuses a physics-based prediction with new measurements at each timestep. For GPS positioning, the prediction uses the device's position and velocity; the measurements come from satellite GNSS data.

  1. Initialize with position and velocity at t = 0. Position xt−1|t−1 is assumed Gaussian with variance Pt−1|t−1.
  2. Predict the next state xt|t−1 from the previous state, with propagated variance Pt|t−1.
  3. Obtain the new measurement zt, which has its own Gaussian uncertainty Rt.
  4. Combine the model prediction and measurement using the Kalman gain Kt, which weights each source by its relative uncertainty, to produce the updated estimate xt|t.
  5. Iterate to the next step.

👨‍🔧 The "Advanced" Kalman Filter

Pseudo-Satellite Estimation

The Kalman filter produces an approximate trajectory for the device. This estimate can itself be fed back into the WLS optimization as a synthetic "pseudo-satellite" — a point at Earth's center whose pseudorange is the distance to the Kalman estimate. Adding this constraint anchors the optimization and reduces drift.

Signal Angle Penalization

Signal reflections off buildings and obstacles are a major source of GPS error. Since the data is collected from a moving car, obstructions are more likely along the car's sides (x-axis in the car-centered frame) than along the driving direction (y-axis). Multiplying the WLS weight by 2 + |cos(angle)| penalizes lateral signals, reducing multipath error.

🎖️ Results

Comparison with the baseline

The baseline, Kalman Filter, and Advanced Kalman Filter estimates are visualized below. Errors from ground truth: Baseline 9.24 m, Kalman Filter 3.46 m, Advanced Kalman Filter 2.70 m. The Kalman Filter is accurate enough to distinguish which lane the car was driving in.

The plots below compare errors from the baseline and advanced Kalman filter. Points with error greater than 5 m are shown in yellow — after filtering, the vast majority fall below that threshold.

The density plots below show the full error distribution. The baseline has a wide spread with large outliers; after WLS, Kalman filtering, and the advanced techniques, the distribution tightens considerably.

📝 Results

The final submission to the Google Smartphone Decimeter Challenge achieved a score of 2.826 m, ranking 26th as of June 22, 2022 — a 42% error reduction from the 9.24 m baseline.

This project was developed by Chad Loh, Layal Hammad, Michelle Bui, and Caroline Keough.

Data Sources
  • Fu, G. M., Khider, M., & van Diggelen, F. (2020). Android Raw GNSS Measurement Datasets for Precise Positioning. Proceedings of ION GNSS+ 2020, pp. 1925–1937. DOI
  • Fu, G. M., Khider, M., & van Diggelen, F. (2022). Google Smartphone Decimeter Challenge. Kaggle
Google Decimeter Challenge: Advanced Kalman Filter | Chad Loh