Building A GPS Receiver From The Ground Up

One of the more interesting facets of GPS is that, at least from the receiver’s point-of-view, it’s a fairly passive system. All of the information beamed down from the satellites is out in the ether, all the time, free for anyone on the planet to receive and use as they see fit. Of course you need to go out and buy a receiver or, alternatively, possess a certain amount of knowledge to build a circuit that can take those signals and convert them into something usable. Luckily, [leaning_tower] has the required knowledge and demonstrates it with this DIY GPS receiver.

This receiver consists of five separate circuit boards, all performing their own function. The first, a mixer board, receives the signal via an active antenna and converts it to a lower frequency. From there it goes to a second mixer and correlation board to compare the signal to a local reference, then a signal processing board that looks at this intermediate frequency signal to make sense of the data its seeing. Finally, an FPGA interfacing board ties everything together and decodes the information into a usable form.

Dealing with weak signals like this has its own set of challenges, as [leaning_tower] found out. The crystal oscillator had to be decapped and modified to keep from interfering with the GPS radio since they operated on similar frequencies. Even after ironing out all the kinks, the circuit takes a little bit of time to lock on to a specific satellite but with a second GPS unit for checking and a few weeks of troubleshooting, the homebrew receiver is up and running. It’s an impressive and incredibly detailed piece of work which is usually the case with sensitive radio equipment like GPS. Here’s another one built on a Raspberry Pi with 12 channels and a pretty high accuracy.

11 thoughts on “Building A GPS Receiver From The Ground Up

    1. I don’t think the GPS signal is stable enough over short periods to have significant improvement over a PLL controlled by a COTS timing receiver. A good ocxo should be much better than gps in the near term. Of course, over longer periods GPS is unbeatable.

      1. So instead of doing A, you can do A?

        A proper Stratum 0 has a way to keep the time by itself for short periods, which can be done with a “PLL controlled by a COTS timing receiver”. And the COTS timing receiver (GPS antenna), is a part of a Stratum 0. It’s the most crucial part of a Stratum 0. And just an ocxo is rather pointless if you don’t have a reference, using GPS, and then you are back to the entire point of the Stratum 0. And it’s not just keeping time, it’s making sure there is no difference in the future either, and without a reference (GPS, unless you have a cesium based atomic clock laying around), it’s not possible.

        1. I meant that it’s not required to make your own receiver to make a stratum 0 clock. In theory it would allow tight coupling between the reference source and the receiver PLLs, which helps quite a bit for positioning (assuming an IMU is available of course), but for timing I think the gain would be minimal.

  1. The fact that you can build a working accurate GPS receiver using only off-the-shelf parts that aren’t specific to GPS (and that as far as I can tell aren’t restricted in any way e.g. under export controls) shows that the restrictions on GPS (speed/altitude limits) wouldn’t be hard for a determined adversary to find a way around if they wanted to.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.