14-Mar-2006
The Allan Deviation (or Allan Variance) is a key statistic for analyzing the performance and stability of clocks. There are several programs that compute Allan deviation statistics, including professional tools like Stable32. Below is a very simple command-line tool that I use for many oscillator stability measurement applications.
As with most clock statistics programs, a plain text file of sequential raw phase measurements is all that is required to use adev1. The units don't have to be seconds (adev1 can scale input data) and the data rate does not need to be 1 Hz (adev1 can scale to data collected at slower sample rates). Where you get the file is a separate issue - some people get phase data over GPIB, or USB, or LAN, or RS232, or floppy, etc. I usually keep all my data collection programs separate from data analysis. This tool is an analysis tool.
Adev1 works on everything from pendulum clocks to hydrogen masers. The only restrictions are that the data must be phase (time interval) rather than frequency; the data must be sequential (no gaps); and the data should be free from glitches or outliers.
In this first example the 1 PPS from a GPSDO is measured with a HP 53132A time interval counter and the 9600 8N1 RS-232 serial output captured to a file. The data file looks like this:
C:\tvb> wc <log23202.txt 1.016 MB, 1041 KB, 1065035 chars, 178272 words, 87840 lines C:\tvb> head log23202.txt 1.239,7 us 1.240,2 us 1.240,4 us 1.239,9 us 1.240,3 us 1.239,6 us 1.240,3 us 1.239,6 us 1.240,1 us 1.240,1 us |
In time interval mode the 53131/53132A format includes a units suffix (us for microseconds and s for seconds). Most models also insert commas every three digits. Also in this example 53132A statistics were enabled so every N seconds the data is interrupted with five lines of text and numbers such as:
1.239,6 us 1.240,1 us 1.239,6 us N : 300 STD DEV: 0.000,319 us MEAN : 1.240,169 us MAX : 1.241,0 us MIN : 1.239,4 us 1.240,3 us 1.239,6 us 1.240,3 us |
Since I use adev1 frequently with the serial output of these HP counters, the program automatically handles the commas (removed), the time units (data is scaled), and the statistics lines (quietly ignored). Thus, adev1 can be used directly on raw HP phase data files with no manual editing. Here is an example:
C:\tvb> adev1 1 <log23202.txt ** Sampling period: 1 s ** Phase data scale factor: 1.000e+000 ** Total phase samples: 86400 ** Normal and Overlapping Allan deviation 1 tau, 6.0265e-010 adev, n=86398, 6.0265e-010 oadev, n=86398 2 tau, 2.8217e-010 adev, n=43198, 2.8094e-010 oadev, n=86396 5 tau, 1.0314e-010 adev, n=17278, 1.0339e-010 oadev, n=86390 10 tau, 5.3691e-011 adev, n=8638, 5.4296e-011 oadev, n=86380 20 tau, 2.6617e-011 adev, n=4318, 2.7072e-011 oadev, n=86360 50 tau, 1.1052e-011 adev, n=1726, 1.1085e-011 oadev, n=86300 100 tau, 5.6781e-012 adev, n=862, 5.7003e-012 oadev, n=86200 200 tau, 3.0238e-012 adev, n=430, 2.9821e-012 oadev, n=86000 500 tau, 1.3804e-012 adev, n=171, 1.3755e-012 oadev, n=85400 1000 tau, 8.0011e-013 adev, n=85, 7.9332e-013 oadev, n=84400 2000 tau, 6.0141e-013 adev, n=42, 5.1156e-013 oadev, n=82400 5000 tau, 2.3656e-013 adev, n=16, 2.5303e-013 oadev, n=76400 10000 tau, 1.4069e-013 adev, n=7, 1.5420e-013 oadev, n=66400 20000 tau, 8.3392e-014 adev, n=3, 1.0629e-013 oadev, n=46400 |
Both normal Allan deviation (adev) and overlapping Allan deviation (oadev) are calculated. Statistics are calculated for as many averaging times (tau) as possible given the amount of raw data. By default the stability for several tau per decade is calculated.
The output also includes the number of sample pairs (the n= number) used by the calculation; usually large numbers that can be ignored or small numbers that indicate the accuracy of the calculations is limited. A rule of thumb is that n should be 4 or greater.
A file of raw phase data doesn't convey the time interval between measurements. In the raw files seen above there is no way to tell, for example, if they are 1 second samples, or 60 second samples, or 1000 seconds. Thus you must tell adev1 what the sample period is. That is the required first parameter.
Not all raw phase files contain data with units of seconds. If you see a file with numbers like 1.234e-6 you can guess the units are seconds (1.234 microseconds) but a file with numbers like 1.234 could be seconds or milliseconds or microseconds or nanoseconds or cycle periods or whatever. The second parameter permits you to scale the input data by a constant factor so that the data is converted into standard units of seconds as it is read by the program. This parameter is not required for data with time unit suffixes (such as output from a 53131A).
Many Allan deviation tables or graphs show data points at each decade; for example, at 1 second, 10 seconds, 100 seconds, etc. When plotting it is sometimes nice to have more than one statistic per decade. Some Allan deviation tools produce data points for tau 1, 2, 4 and 10, 20, 40, etc. The third parameter can be use to obtain as many or as few data points per decade, including the extreme of one data point for every possible tau.
The next example is a data file from a TSC 5110A time interval analyzer measuring a free-running Austron 2110B. Using a 5 MHz reference the 9600 8N1 RS-232 serial output is a set of phase (integer and fractional period) values at a data rate of 1 Hz. Units are 200 ns (200e-9), the period of 5 MHz frequency, so the raw data must be scaled.
The raw data file looks like this:
C:\tvb> dir log24121.txt LOG24121 TXT 5,047,477 03-15-06 11:47a log24121.txt C:\tvb> wc <log24121.txt 4.509 MB, 4618 KB, 4728178 chars, 319299 words, 319299 lines C:\tvb> head log24121.txt 0.0952987 -0.0859472 -0.2671862 -0.4484271 -0.6296708 -0.8109045 -0.9921413 -1.1733808 -1.3546209 -1.5358569 |
Here is the adev1 output (note use of period and scale parameters):
C:\tvb> adev1 1 200e-9 <log24121.txt ** Sampling period: 1 s ** Phase data scale factor: 2.000e-007 ** Total phase samples: 319299 ** Normal and Overlapping Allan deviation 1 tau, 1.0360e-012 adev, n=319297, 1.0360e-012 oadev, n=319297 2 tau, 6.9212e-013 adev, n=159648, 6.9116e-013 oadev, n=319295 5 tau, 4.1615e-013 adev, n=63858, 4.1655e-013 oadev, n=319289 10 tau, 3.9476e-013 adev, n=31928, 3.9512e-013 oadev, n=319279 20 tau, 4.1711e-013 adev, n=15963, 4.1953e-013 oadev, n=319259 50 tau, 4.3894e-013 adev, n=6384, 4.3570e-013 oadev, n=319199 100 tau, 4.3473e-013 adev, n=3191, 4.3403e-013 oadev, n=319099 200 tau, 4.4391e-013 adev, n=1595, 4.4587e-013 oadev, n=318899 500 tau, 4.5632e-013 adev, n=637, 4.5885e-013 oadev, n=318299 1000 tau, 4.8133e-013 adev, n=318, 4.7183e-013 oadev, n=317299 2000 tau, 4.9518e-013 adev, n=158, 5.0995e-013 oadev, n=315299 5000 tau, 5.7621e-013 adev, n=62, 5.5662e-013 oadev, n=309299 10000 tau, 7.2946e-013 adev, n=30, 7.4078e-013 oadev, n=299299 20000 tau, 1.2881e-012 adev, n=14, 1.2603e-012 oadev, n=279299 50000 tau, 3.0409e-012 adev, n=5, 2.8234e-012 oadev, n=219299 100000 tau, 5.4837e-012 adev, n=2, 4.9924e-012 oadev, n=119299 |
The "bin" number is a feature that lets you control how many averaging intervals (tau) should be calculated. For the most concise output choose a bin value of 1 - meaning only one statistic is calculated per decade, as in the following example:
C:\tvb> adev1 1 200e-9 1 <log24121.txt ** Sampling period: 1 s ** Phase data scale factor: 2.000e-007 ** Total phase samples: 319299 ** Normal and Overlapping Allan deviation 1 tau, 1.0360e-012 adev, n=319297, 1.0360e-012 oadev, n=319297 10 tau, 3.9476e-013 adev, n=31928, 3.9512e-013 oadev, n=319279 100 tau, 4.3473e-013 adev, n=3191, 4.3403e-013 oadev, n=319099 1000 tau, 4.8133e-013 adev, n=318, 4.7183e-013 oadev, n=317299 10000 tau, 7.2946e-013 adev, n=30, 7.4078e-013 oadev, n=299299 100000 tau, 5.4837e-012 adev, n=2, 4.9924e-012 oadev, n=119299 |
Other useful bin numbers are:
C:\tvb> adev1 Compute Allan Deviation over all tau from raw phase data Usage: adev1 period [scale] [bins] < input Arguments: period - data sample interval (e.g., 1 second, 60 seconds) scale - input data scale factor if units aren't seconds bins - adev points per decade (special: 0,1,2,3,4,5,10,29) Examples: adev1 1 < 1hzdata.txt [ pre-scaled 1 Hz TI readings ] adev1 100 < hpdata.txt [ 100 sec HP time interval readings ] adev1 60 1e-6 < mins.txt [ 1 minute phase data, 1 us units ] adev1 1 200e-9 < tsc.dat [ TSC 5110A 200 ns 1 Hz phase data ] adev1 1 2e-7 50 <tsc.dat [ 50 adev points per decade ] |