This project implement a pure software IF(Intermediate Frequency) GPS receiver. The input is a IF data file, which contains about 60 seconds GPS data. The data file is collected using Zarlink GP2015 RF IC and Cypress FX2 USB interface board, the location is at the campus of University of California, Riverside. The length of 60 seconds guarantees there must be a whole set of ephemeris data. The software receiver contains all necessary functional block to process the data file, including multi-channel correlator, code and carrier track loop, control logic, and PVT resolution block. Since the code is written using C++, the execution speed is much faster than its Matlab version. To process all 60s data file, the time consumption is about 10-20 minutes on modern PC platform, the final value depends on the speed of the CPU.
This project is continued project of my USBGPS project, which processes the GPS data based on Zarlink's GP2015&GP2021 chipset. USBGPS project requires a bulky hardware platform of RF and correlator, which is hard to get for beginners. While this project is implemented totally at software layer, no extra hardware cost. The another advantage of this project is that it saves all the processing result to PC files, from the very beginning signal acquisition to the final PVT resolution, so the user can monitor the processing result easily by plotting the logged data in Matlab or Scilab. So I believe this project is much suitable for the beginner of GPS receiver theory.
The code is written in C++ language. OS is Linux, I compile and run the code in Fedora Core 9. Other Linux distributions is not tested, but I believe the code should be OK with them. To compile the code, you need gcc-c++ compiler installed in your computer. Also you need to install ncurses package. To verify the necessary packages are installed, run the following commands: (The output followed is the output on my computer.)
[root@localhost test]# rpm -qa|grep gcc
gcc-c++-4.3.0-8.i386
libgcc-4.3.0-8.i386
gcc-gfortran-4.3.0-8.i386
gcc-4.3.0-8.i386
[root@localhost test]# rpm -qa|grep ncurses
ncurses-5.6-16.20080301.fc9.i386
ncurses-base-5.6-16.20080301.fc9.i386
ncurses-devel-5.6-16.20080301.fc9.i386
ncurses-libs-5.6-16.20080301.fc9.i386
The source code and the IF data file can be downloaded from project summary page on Sourceforge.
To compile and run the code, execute the following command:
[root@localhost test]# tar zxvf sdrGPS.tar.gz
[root@localhost test]# cd sdrGPS
[root@localhost test]# make
[root@localhost test]# ./sdrGPS
The description of the runing interface and several screen snapshot are here.
The code save the processing result to several data files. Each data file is timestamp uniquely such that it is easy to trace the history. User can use any plot tools to display the result, such as Matlab. The log file contains all necessary middle variables and final processing result, including the tracking loop status, the LS fix result and KF fix result.
The log file is created and saved to the data/ folder. The name of log file has the following format:
Channel status log: | Channeln_timestamp.m |
LS fix log: | navfix_timestamp.m |
KF fix log(PV-model): | KF_PV_timestamp.m |
here n is the channel id from 0 to 11, timestemp is in the format of _ddmmyyyy_hhMM
The plot can be seen here.
The document is yet to be finished. The preliminary version should contain some basics of GPS theoty, and the code structure of whole project.
To Dr. Jay A. Farrell, Clifford Kelly, and my wife and kids.
Chinese version of this webpage can be found here.
For any idea, suggestion and cooperation opportunity, please send email to softwareGNSS@gmail.com.
•Clifford kelley's OpenSourceGPS site
•Andrew Greenberg's GPL-GPS site
•Krzysztof Kamieniecki's kkGPS project