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.
I would be interested if ravi.butani03 got his version working with 4.092 MHz IF and 16.368MHz sampling rate. Also if Quan Dang got his working with the MAX eval kit. My new toy is the MAX 2771 GNSS Eval board. I am going to play with this for a while and see if I can get L1 and E5 working on it. I welcome any and all comments from anyone who has played with this code.