SnapperGPS: Collection of GNSS Signal Snapshots

Beuchert J, Rogers A

This data collection contains digital global navigation satellite system (GNSS) signal snapshots and is accompanied by a repository with utilities to simplify working with the files, which you can find at https://github.com/JonasBchrt/snapshot-gnss-data.

We recorded the data in 2020 and 2021 using three of our SnapperGPS low-cost receivers, whose core components are an Echo 27 GPS L1 antenna and an SE4150L integrated GPS receiver circuit. Like most civilian low-cost GPS receivers, SnapperGPS operates in the L1 band with a centre frequency of 1.57542 GHz. However, Galileo's E1 signal, BeiDou's B1C signal, GPS' novel L1C signal, and SBAS' L1 signal have the identical centre frequency. So, we captured those signals, too. A SnapperGPS receiver down-mixes the incoming signal to a nominal intermediate frequency of 4.092 MHz, samples the resulting near-baseband signal at 4.092 MHz and digitises it with an amplitude resolution of one bit per sample. It considers only the in-phase component and discards the quadrature component.

The data collection consists of four static and seven dynamic tests under various conditions with 3700 GNSS signal snapshots in total.
We captured the 225 static snapshots on a hill top, on a bridge, in a courtyard, and in a park in 5-30 s intervals and the 3475 dynamic ones while cycling in either urban or rural environments and using 10 s intervals.
We obtained ground truth locations or tracks either by using an Ordnance Survey trig point, by employing satellite imagery from Google Maps or Google Earth, or with a Moto C smartphone with built-in GPS and A-GPS receiver.
While the trig point provides a ground-truth position with centimetre-level accuracy, the positions obtained from satellite imagery or with the Moto C are up to 5 m wrong with outliers up to 10 m.

The eleven datasets are stored in one folder per set named "A"-"K". Each snapshot is in a single binary ".bin" file with a name derived from the timestamp. One byte of the file holds the amplitude values of eight signal samples, i.e., the first byte holds the first eight samples. A zero bit represents a signal amplitude of +1 and a one bit a signal amplitude of -1. The order of the bits is 'little', i.e., reversed. For example, the byte 0b01100000 corresponds to the signal chunk [1 1 1 1 1 -1 -1 1]. In addition to the raw GNSS signal snapshots, you can find more data in a single "meta.json" file in each folder. The JSON struct in this file provides approximate latitude and longitude of the ground truth location of a static test in decimal degrees, an estimate of the true intermediate frequency in Hertz (the actual value differs from the nominal 4.092 MHz due to imprecisions of the hardware), all the file names of the binary files, the UTC timestamps of all files, and optionally temperature and pressure measurements from an on-board BMP280 sensor in degrees Celsius and pascal, respectively. Furthermore, a ".gpx" or ".kml" file holds the ground truth track for a dynamic test as nodes of a polyline. (Folder "I" contains two files that represent the first and the second part of the track, respectively.) Finally, each folder incorporates the broadcasted satellite navigation data from the respective day as RINEX 3.04 ".rnx" file downloaded from NASA's archive (https://cddis.nasa.gov/archive/gnss/data/daily/). The RINEX files allow to calculate, e.g., satellite orbits and clock corrections for all GNSS.

The datasets:
"A": 181 snapshots, static, hill top, ground truth from trig point, no temperatures & pressures
"B": 14 snapshots, static, bridge, ground truth from Google Maps, no temperatures & pressures
"C": 6 snapshots, static, courtyard, ground truth from Google Maps, no temperatures & pressures
"D": 24 snapshots, static, park, ground truth from Google Maps, incl. temperatures & pressures
"E": 380 snapshots, dynamic, urban, ground truth from Google Earth, incl. temperatures & pressures
"F": 339 snapshots, dynamic, urban, ground truth from Google Earth, incl. temperatures & pressures
"G": 693 snapshots, dynamic, urban/rural, ground truth from Google Earth, incl. temperatures & pressures
"H": 628 snapshots, dynamic, urban, ground truth from Moto C, incl. temperatures & pressures
"I": 1023 snapshots, dynamic, urban/rural, ground truth from Google Earth / Moto C, incl. temperatures & pressures
"J": 346 snapshots, dynamic, urban/rural, ground truth from Moto C, incl. temperatures & pressures
"K": 66 snapshots, dynamic, urban, ground truth from Moto C, incl. temperatures & pressures