1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
#!/usr/bin/octave -qf
printf("start\n");
load t;
load tr;
# time window to analyze
t_beg = 1;
t_fin = length(t);
# parameters for synthetic reference time
#start_time = round(t(t_beg));
#sample_interval = 1;
# parameters for histogram
h_beg = -15e-6;
h_fin = 15e-6;
h_sz = 1e-6;
# parameters for allan variance
# tune for your computational power
tau_beg = 1;
tau_fin = length(t)/10;
tau_maxsamps = 100;
# ----------
printf("data loaded\n");
# create synthetic reference time
#tr = t;
#tr(t_beg) = start_time;
#for k = (t_beg+1):t_fin
#
# tr(k) = tr(k-1) + sample_interval;
#
#endfor
# time offset computation
o = t - tr;
o_min = min(o(t_beg:t_fin));
o_max = max(o(t_beg:t_fin));
o_mean = mean(o(t_beg:t_fin));
# relative tick rate computation
r = t;
for k = (t_beg+1):t_fin
r(k) = o(k) - o(k-1);
endfor
r_min = min(r((t_beg+1):t_fin));
r_max = max(r((t_beg+1):t_fin));
r_mean = mean(r((t_beg+1):t_fin));
figure;
h_bins = h_beg:h_sz:h_fin;
hist( o(t_beg:t_fin), h_bins, 1);
printf("histogram plotted\n");
figure;
subplot(211);
plot( t_beg:t_fin, o(t_beg:t_fin), "r;time offset;",
[t_beg t_fin], [o_min o_min], "g;;",
[t_beg t_fin], [o_max o_max], "g;;",
[t_beg t_fin], [o_mean o_mean], "b;;");
subplot(212);
plot( (t_beg+1):t_fin, r((t_beg+1):t_fin), "r;relative tick rate;",
[(t_beg+1) t_fin], [r_min r_min], "g;;",
[(t_beg+1) t_fin], [r_max r_max], "g;;",
[(t_beg+1) t_fin], [r_mean r_mean], "b;;")
replot;
printf("offset plotted\n");
# the allan vaiance computation from the IEEE 1588 spec
a = t;
for tau = tau_beg:tau_fin
beg = t_beg;
if (t_fin-2*tau) > tau_maxsamps
fin = tau_maxsamps;
else
fin = (t_fin-2*tau);
end
a(tau) = sum((t(beg:fin) - 2*t((beg+tau):(fin+tau)) + t((beg+2*tau):(fin+2*tau))).^2);
a(tau) /= 2*(fin-beg)*(tau^2);
endfor
figure;
loglog( tau_beg:tau_fin, a(tau_beg:tau_fin), ";allan variance;");
replot;
printf("variance plotted\n");
input("done\n");
|