allan.m calculates the standard Allan deviation (ADEV) of a time domain signal. It is designed for stability analysis of frequency data, although the analysis can be applied to other types of data. Fractional frequency or phase data sets with sample rate or time stamp information are handled.
Note: for overlapping and modified Allan deviation analysis, please see the files allan_modified.m (ID: #26637) and allan_overlap.m (ID: #26441).
M. A. Hopcroft (2019). allan (https://www.mathworks.com/matlabcentral/fileexchange/13246-allan), MATLAB Central File Exchange. Retrieved .
Glad this file is helpful and always happy to see comments and ratings. If you have a question, contact me directly by clicking the Contact Author link or finding my email in the m-file.
Apologies if this is a silly question, but, can this code be used for converting from phase noise to allan deviation/variance?
I encountered an issue while using your very helpful script. I provided a list of TAU-values, that are all divisible by my DATA.rate. However not all of the values were plotted so I investigated and found out that the "m" vector did not look like I expected it to (I had several values that were integer values but looked like this: "6.000" instead of "6", ...). The fix was changing line 300.
m = data.rate.*tau;
m = floor(data.rate.*tau);
I did not notice any side effects.
I get the same error as Simon, when I use allan and only provide the fields 'phase' and 'rate' and set 'verbose' to 1.
I think the usage of data.time in line 220 should be guarded with an isfield(data, 'time').
Commenting out line 220 fixes the error for me, but I did not study the script well enough to know if this creates side effects.
Dear Hopcroft, i get an error when using DATA.phase together with DATA.rate (put to 1). Maybe something to do with the latest update (18 Mar 2014 v2.24 fix bug related to phase data and timestamps)? Have no old version to compare with.
Index of element to remove
exceeds matrix dimensions.
Error in ==> allan at 220
data.time(1)=; % make time
stamps correspond to freq data
Hi,it is a convenient program to calculate the ADEV. However, the error bars seem incorrect. The error is not simply +/- 1-sigma estimation, as I know. I am not sure. Thank you!
@Mauricio: yes, you are correct. The values returned by the function are ADEV values and you can square them to get AVAR values.
using this file produces ADEV plot, now
if I try to find the Angle Random Walk (ARW) which is found from AVAR plot at tau=1, would I just have to square the ADEV value at tau=1, or not?
For some reason I can't seem to determine the value for values of Tau less than 500. Any help would be greatly appreciated.
I'll have a look at it if you send me an email with some more details.
The latest version available for download fails to plot the Allan Deviation. The error message indicates that the input to the semilogx function (tau or sm) is unknown. How can I correct this?
Excellent program, works wonderfully, very useful!
Very handy tool, easy to use.
Thanks alot for your help!
type "help allan" to see the help file. email me directly if you are still having trouble.
can i ask how to input a series of data (100 samples data) into the code ?.. thx !!!
Very handy tool, easy to use.
Long-overdue update to handle some edge cases. Also improved data consistency checks.
v2.24 fix bug related to phase data and timestamps
v2.22 improve tau handling; plotting bugfix
v2.20 consistent behaviour for all allan_x.m functions.
v2.16 fixed some issues related to plotting
v2.14: updates to plotting, default values
minor bugfixes, data consistency checking updated
Description typo fix
handles phase data; error checking; asst. bugfixes
v1.82: performance enhancement; code/comments cleanup
v1.8: Vectorized code for significant performance enhancement.
added loglog plot option. Included test data in .mat file.
-fix bug in regular data calc for high-rate data
v1.5: added errors bars, MAD calculation for outlier detection. misc bug fixes (see comments)