This project has a small hardware component.
Development boards and custom FPGA software were used to obtain data sets consisting of raw 1-bit samples, taken at 16.368 MHz. A complete set of GPS NAV data is transmitted every 30 seconds, so it is essential that at least a minute's data is captured - requiring 120MB of storage. Because of the importance of timing information, it is also essential that every sample is captured. To do this with the equipment I had on hand, a small FPGA-based solution is used.
The bulk of the project is software. The software has to perform the following actions:
- Acquire the GPS signals from the satellite - finding the approximate frequency and phase . All satellites transmit on the same frequency, but signals a Doppler shifted and have taken many milliseconds to travel the to reach the antenna.
- Locking onto the carrier. From a rough ball-park frequency we need to get an absolute frequency lock to ensure good data reception
- Locking onto the phase of the GPS C/A code that is transmitted by the satellite. This generates the sub-microsecond timing information which is required to produce a location fix. As light travels at about 300,000,000 m/s this needs to be resolved with about 30ns of accuracy
- Reception of 50bps BPSK data (the 'NAV' messages)
- Decoding of the NAV data
- Calculating the position and time at which the signals were transmitted
- Calculating the solution for the antenna's location.