[time-nuts] Measure GPSDO stability with minimum resources?
bob at evoria.net
Wed Oct 5 18:46:58 EDT 2016
I just noticed that my reply didn't go to the list so...
Thanks for the reply. What I'm really looking for is a way to do everything in the PIC. I've been experimenting with saving the DAC value in a circular queue every 20 seconds for 60 minutes, and plotting the difference value between the head and tail of the queue every second. After posting this question, I took another look at the overall behavior and decided to cut the queue size down from 60 minutes to 5. At the moment, I'm doing a trial run of integrating the difference values starting at the point where I decide that it's locked. Maybe I'll gain enough insight from this to get a better idea on calculating the aging rate. The 5 minute queue seems to give me a good indication of how well the PLL is locked. Maybe saving the integrated values into a longer queue that's sampled once every 5 minutes will give me something for aging rate.
GFS GPSDO list:
From: Jim Harman <j99harman at gmail.com>
To: Bob Stewart <bob at evoria.net>; Discussion of precise time and frequency measurement <time-nuts at febo.com>
Sent: Wednesday, October 5, 2016 4:37 PM
Subject: Re: [time-nuts] Measure GPSDO stability with minimum resources?
On Wed, Oct 5, 2016 at 1:37 PM, Bob Stewart <bob at evoria.net> wrote:
For my GPSDO, I need to calculate the OCXO aging for holdover projection purposes as well as get some figure of merit for the recent past of the OCXO stability.
Do you have a serial port or some way of generating a logging stream?
If so, one low-overhead way to track the aging is to compute an average DAC value and periodically "print" the result to the serial port. I have found that a 3-hour average works well for observing aging. Each second you simply add the current DAC value to a Long and after 3 hours divide by 10800, print the result, reset the total, and repeat. It is helpful to also include the current time. This could be extracted from the GPS NMEA data or simply be seconds since startup. If you separate the values with a Tab and end each set of values with a newline, you can capture the data with an attached PC, copy/paste to Excel, and analyze it there. The trend line feature in Excel's chart will compute and display a least square fit to the aging.
If you don't want to keep the monitor connected full time and you have some extra RAM or preferably EEPROM, you can store historic average values in a circular buffer and print one of the values every second. 288 bytes will store 18 days worth of 16 bit 3-hour averages.
My system, based on the one posted here by Lars Walenius some time ago,collects 144 sets of 5-minute averages (12 hours worth) and another 144 sets of 3-hour averages. It spits out one line of logging data each second. The first part of each line has the current data, and the second part has either one of the 5-minute sets or one of the 3-hour sets. So 5 minutes worth of logging data has 300 lines, showing current data plus 5-minute averages for the past 12 hours and 3-hour averages for the past 18 days.
All this, including the GPSDO code, fits comfortably in a 32u4-based Arduino Micro, which has 32K of program memory, 2.5K of RAM, and 1K of EEPROM.
More information about the time-nuts