[time-nuts] New algorithm, better ADEV
Tom Van Baak
tvb at LeapSecond.com
Wed Jan 14 13:27:10 EST 2015
Hi Li Ang,
You're making good progress. Thanks for the update and the photos. I am impressed with both the project and the way you are documenting and sharing the progress on the qsl.net web site.
The new algorithm is good. Yes, the whole idea of a timestamping counter is that you start it once and then let it run indefinitely, checking on the deltas only as much as you need to prevent counter aliasing.
One correction -- when you compute deltas using two's compliment integer variables there is no need for a special-case overflow check. This is a common misunderstanding by non-assembly programmers.
So, instead of your:
ref_delta = (ref_curr > ref_prev) ? (ref_curr - ref_prev) : (0xffffffff - ref_prev + ref_curr);
sig_delta = (sig_curr > sig_prev) ? (sig_curr - sig_prev) : (0xffffffff - sig_prev + sig_curr);
ref_delta = ref_curr - ref_prev;
sig_delta = sig_curr - sig_prev;
Not only is it much simpler but it also works in every case (your code would fail whenever curr equals prev).
Here's a test program in case you don't believe me: http://leapsecond.com/tools/wrap1.c
More information about the time-nuts