Compact Allan-deviation Code


This is a quick little code snippet that claculates the Allan deviation of the input data.

import numpy as np
def oadev(data, rate, numpoints=30):
    x = np.cumsum(data)
    ms = np.unique(np.logspace(0, np.log10(len(data) / 10), numpoints).astype(int))
    oavars = [((x[2*m:] - 2*x[m:-m] + x[:-2*m])**2).mean() / (2*m**2) for i, m in enumerate(ms)]
    return ms / rate, np.array(oavars)**.5