Question: What happens to a GPS receiver's pulse per second (PPS) when it loses signal for a long time?
To answer this, I first moved the antenna away from the window and put it in an anti-static bag.
I did this on the 16th at 01:02 GMT. Below is a graph of the percent of time satellites were reported as "0dB signal to noise" or "no signal". Normally it'd be around 50%. I took another step on the 18th to reduce the signal further, and I'll go into more detail on that in a minute. With just the anti-static bag, the GPS receiver didn't have any signal between 83%-100% of the time.
The module needs a signal from 3+ GPS satellites at the same time to get a position lock, so it spent all its time without a lock. Normally the GPS receiver would have a position lock more than 99% of the time.
Since this GPS receiver is a "navigation" model, it doesn't have the fancy features of the "timing" GPS receivers. This means it needs a GPS position lock in order to know the local time.
Just in case the GPS receiver was keeping time sync with the small amounts of signal, I added aluminum foil covering on the 18th at 01:58 GMT. You can see the dramatic impact on the satellite signals above.
Through all this, the GPS receiver continued to produce a PPS signal, but it slowly drifted off the correct time. The graph below shows the PPS signal drifting roughly 250us-500us/day, which is between 3ppb (parts per billion / 10^-9) and 6ppb. The GPS receiver is a Navspark mini, which has a TCXO inside of it. My measurements of the TCXO of a Navspark-GL are here: timer and pwm
This drift would probably be larger if there were larger changes in temperature. I am surprised at this result, I would have expected a much larger drift (my expectations were 33x bigger than what happened).
At the 2ms offset, ntpsec rejected my PPS refclock and switched to the NMEA/SHM refclock. You can see below that the local clock was swinging pretty wildly between -2ms and +8ms because of the NMEA refclock. ntpsec switched to the NMEA refclock because I had it set to prefer. The "tos mindist" setting was at its default value, 1ms.
For my next tests, I want to experiment with a lower mindist setting and a better failover configuration.