How GPS Actually Works Before You Buy Anything
GPS is a set of about 31 active satellites orbiting at roughly 20,200 kilometers altitude, each broadcasting a timing signal on two primary L-band carrier frequencies. The receiver does not do any complex computation beyond measuring how long each signal takes to arrive and converting that time into distance. Four satellites are required to solve for three position coordinates and the receiver's clock offset simultaneously. That clock offset is the hidden reason why cheap receivers drift. Each satellite carries multiple atomic clocks, but even a nanosecond of timing error in a civilian receiver translates to roughly 30 centimeters of position error. This is why the system exists at all and why it remains surprisingly fragile under real conditions. The civilian C/A code runs at 1.023 MHz and is repeated every millisecond. The receiver correlates this code against a locally generated replica to measure code phase, which gives pseudorange. Carrier phase measurements exist too and are what enable centimeter-level accuracy when you have an RTK or PPP setup. Code-based positioning typically delivers 3 to 5 meters horizontally under open sky with a modern multi-constellation receiver. Carrier phase can push that into the millimeter range if you maintain continuous lock and have a good base station or correction stream. Most consumer applications never use carrier phase because maintaining lock through tree cover or urban canyons is unstable. I learned this the hard way while deploying a u-blox NEO-M8T module for a surveying task near a steel frame warehouse. The specular reflections from the metal walls were flooding the receiver with multipath signals. Position jumps of 20 to 40 meters appeared randomly, sometimes in a single solution epoch. The workaround was straightforward but required deliberate setup decisions. I switched the receiver to a multi-constellation mode that combined GPS L1/L5, GLONASS L1, and Galileo E1, which increased the satellite count and diluted the geometric weakness caused by reflections. I also added a low-cost ceramic patch antenna with a choke ring and positioned it near the ceiling rather than on the ground. Ground-reflected multipath dropped significantly, and the position noise decreased from roughly 15 meters RMS to about 3 meters RMS in the worst cases. It was never as clean as open sky, but it was usable for the task.
The most frequent mistake is buying a receiver that only tracks GPS L1 C/A code and expecting it to perform well in environments with partial sky visibility. Single-frequency, single-constellation units are fine for basic navigation but degrade quickly when satellites drop below 10 degrees elevation or when the sky view is partially blocked. A receiver that only sees four GPS satellites might still compute a position, but the dilution of precision will be poor and the error can exceed 20 meters. Adding GLONASS and Galileo support usually improves horizontal accuracy by 30 to 50 percent in typical suburban conditions and by a much larger margin in challenging environments. Another pitfall is assuming that firmware updates will solve hardware limitations. If a module lacks L5 or E5a band support, no software update will add carrier phase processing on those frequencies. Some vendors market receivers as multi-band when they only support GPS L1 and GLONASS L1 without the second civilian frequency on either system. Check the datasheet for the exact signal types before purchasing. The price difference between a single-band and a true dual-band receiver is significant, but so is the difference in reliability under canopy or urban conditions.
What Real Users Should Know About Accuracy Limits
GPS was designed for military use and later opened to civilians with Selective Availability turned off permanently in 2000. Civilian accuracy has improved steadily since then, but the system has fundamental limitations that no amount of post-processing eliminates completely. Ionospheric delay is the dominant error source for single-frequency receivers. The delay varies with solar activity, time of day, and latitude. During a strong solar flare event, I watched a u-blox M8P lose lock on several satellites and see horizontal errors spike to 10 meters or more. Dual-frequency receivers can model and remove most of this error by comparing L1 and L5 propagation delays, which is why dual-band units are noticeably more stable during periods of high ionospheric activity. Multipath remains difficult to eliminate entirely. Even with a good choke ring antenna, signals reflecting off distant buildings or terrain can corrupt the correlation peak enough to shift the estimated pseudorange. The effect is intermittent and hard to predict. A practical workaround is to monitor the C/N0 values reported by the receiver and discard measurements below a reasonable threshold, typically around 30 dB-Hz for L1 in noisy environments. This reduces the number of usable satellites but improves consistency. Another option is to use a receiver with built-in multipath mitigation algorithms, such as the narrow correlator technique or the multipath estimating delay lock loop, which most modern modules support.
Get the Full Details

Setting Up a Basic GPS Receiver Without Wasting Time
Start with a receiver that supports at least GPS L1/L5, GLONASS L1, and Galileo E1. The u-blox M8 series, M9 series, and the newer NEO-M8P and NEO-M9N are well-documented and widely available. Connect the module via UART at 9600 baud or higher, depending on your application. Use a proper 3.3 volt logic level if your microcontroller does not tolerate 5 volt signals. Power the antenna from the receiver's provided output if it supplies one, rather than powering it separately, to avoid ground loops and noise injection. Configure the receiver using U-Center or a compatible tool to enable all available constellations and signal bands. Disable GLONASS if you encounter unexpected behavior, since some older receivers have less mature GLONASS handling. Save the configuration to the receiver's non-volatile memory so it persists across power cycles. Test the unit in an open area first and record the number of visible satellites, the HDOP value, and the positional spread over a five-minute period. If HDOP stays below 1.0 and the position spread is under 5 meters, the setup is reasonable for general purposes. If not, revisit antenna placement and configuration settings before proceeding.
When GPS Is the Wrong Tool and What to Use Instead
GPS fails completely indoors and performs poorly in deep urban canyons, dense forests, and underground environments where satellite signals are blocked. In those cases, pairing GPS with an inertial measurement unit and using sensor fusion is the standard approach. A low-cost IMU like the InvenSense ICM-20948 or the Bosch BNO055 can bridge gaps of several seconds to minutes when GPS signals are unavailable. The fused solution drifts over time, but for short outages it is far superior to relying on GPS alone and failing silently. For applications that require continuous positioning in GPS-denied environments, dead reckoning with wheel encoders, visual odometry, or LiDAR slam may be necessary, though those systems are substantially more expensive and complex. Another scenario where GPS underperforms is high-dynamics applications such as drone racing or fast-moving vehicles. The standard 1 Hz output rate of many receivers is insufficient for tracking rapid position changes. Selecting a receiver that supports 5 Hz or 10 Hz output and configuring it accordingly reduces latency and improves control loop performance. The NEO-M9N supports up to 25 Hz, and the M8P supports even higher rates when using the appropriate interface and buffer configuration.
A Word About Pricing and What Actually Affects It
USB GPS modules that claim sub-meter accuracy for under $20 are almost always single-frequency, single-constellation receivers with aggressive marketing. They will work for casual navigation but will not deliver consistent results in anything other than ideal conditions. A proper dual-band RTK-capable module from u-blox or a comparable vendor typically costs between $150 and $400 depending on form factor and features. The price difference reflects real hardware differences in RF front-end design, oscillator quality, and signal processing capability. Cheap modules often use TCXOs instead of OCXOs, which introduces additional clock drift that degrades positioning stability, especially during warm-up and in temperature-varying environments. If you are building a fixed installation where a reference station is available, purchasing an RTK base station and a rover pair from the same manufacturer simplifies configuration and ensures compatibility. Mixing receivers from different vendors for RTK can work but requires careful checking of correction message formats and protocol support. The alternative of using a free correction service like SBAS, which includes WAAS in North America, EGNOS in Europe, and MSAS in Japan, is reasonable for applications that need better than 3-meter accuracy without the cost of a dedicated RTK setup. SBAS typically improves horizontal accuracy to about 1 to 2 meters in well-covered regions but adds latency and depends on geostationary satellite visibility.
