First proof-of-concept: A GPS Fix in Windows using an RTL-SDR stick
Using a $20 RTL-SDR stick with 1ppm TXCO and a simple mod to power an active GPS antenna, it is possible to download and decode GPS signals in real time.
Software
GNSS-SDRLIB: https://github.com/taroz/GNSS-SDRLIB
RTKLIB: http://www.rtklib.com/
Both packages are Open Source, with a default build target is Windows.
Both packages are Open Source (GPL2 and BSD 2-clause, respectively). The default build target for both packages is Windows, although RTKLIB has been compiled under Linux.
Please note that GNSS-SDRLIB is not to be confused with GNSS-SDR!
Resources
Useful presentation by the author of GNSS-SDRGUI for a summer school course. Also check the manuals included with GNSS-SDRLIB and RTKLIB.
Step-By-Step Implementation
- Ensure RTL-SDR stick is working in Windows. If your driver is not working, try using the Zadig driver installation method outlined here.
- Install GNSS-SDRLIB and RTKLIB to any convenient directory
- Open GNSS-SDRGUI and select the following options
- Input Type: RTL-SDR
- [x] RTCM MSM, Port 9999
- Change “output interval” dropdown to 10 hz
- [x] Plot Tracking
- [x] All GPS, GLOSNASS, Galileo satellites
- (optional) enter approximate lat/lon into MISC and click the “…” button to get current satellite locations in relation to your location.
- Click “Start”, a number of command consoles will open then close for each satellite being tracked.
- Click “M” for log
- Now, open RTKNAVI
- Click on the “I” button
- check “rover”, type TCP Client, format RTCM3
- click OPT button and set address to “localhost” and port to “9999”
- click OK
- Click OK
- Click on the “start” button
- Within a few seconds you should see satellites in the Rover:Base SNR pane
- Once a solution exists it will update lat/lon in the left pane
- Click “Plot” to generate a plot of the random walk of lat/lon over time
- Click on the “I” button
This is what your GNSS-SDRGUI should look like:
This is what your RTKNAVI input should look like:
If everything is working you should get a GPS solution, as shown in this video
Next Actions
Try using GNSS-SDR and/or GNURadio to decode the GNSS signal; this would provide native, Linux compatible headless execution and a cursory Google suggests this has been done successfully with the RTL-SDR stick.