summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ckcptime.awk49
-rw-r--r--ckt0.awk59
-rw-r--r--ckt0.sh16
3 files changed, 61 insertions, 63 deletions
diff --git a/ckcptime.awk b/ckcptime.awk
index 4bc9539..df5e188 100644
--- a/ckcptime.awk
+++ b/ckcptime.awk
@@ -1,14 +1,10 @@
#!/usr/bin/env awk -f
-function log10(n) {
+function log10(n) { return log(n)/log(10.0) }
- return log(n)/log(10.0)
-}
-
-
-function merge_meas(val_est, unc_est, val_meas, unc_meas) {
+function merge_meas(est_val, est_unc, meas_val, meas_unc) {
# add (meas - est) delta to the measurement uncertainty
# note: this works when tracking a constant value,
@@ -16,17 +12,18 @@ function merge_meas(val_est, unc_est, val_meas, unc_meas) {
# unc_meas = sqrt(unc_meas^2.0 + (val_meas - val_est)^2.0)
# Kalman filtering compares variances
- unc_est = (0.5*unc_est)^2.0
- unc_meas = (0.5*unc_meas)^2.0
+ # convert uncertainties to square units
+ est_unc = (0.5*est_unc)^2.0
+ meas_unc = (0.5*meas_unc)^2.0
- G_K = (unc_est)/((unc_est) + (unc_meas))
- val_est = val_est + G_K*(val_meas - val_est)
- unc_est = (unc_est*unc_meas)/(unc_est + unc_meas)
+ K = (est_unc)/((est_unc) + (meas_unc))
+ est_val = est_val + K*(meas_val - est_val)
+ est_unc = (est_unc*meas_unc)/(est_unc + meas_unc)
- # convert unc_est back to same units as val_est
- unc_est = 2.0*sqrt(unc_est)
+ # convert est_unc back to original units
+ est_unc = 2.0*sqrt(est_unc)
- return sprintf(OFMT OFS OFMT ORS, val_est, unc_est)
+ return sprintf(OFMT OFS OFMT ORS, est_val, est_unc)
}
@@ -36,7 +33,8 @@ function sigfig(val, unc) {
ordmag_val = log10(val)
ordmag_unc = log10(unc)
- sigfig_unc = sprintf("%.f", 6)
+ #sigfig_unc = sprintf("%.f", 6)
+ sigfig_unc = sprintf("%.f", sqrt((ordmag_val - ordmag_unc)^2.0) + 1.0)
sigfig_val = sprintf("%.f", (ordmag_val - ordmag_unc + sigfig_unc))
ofmt_val = "%." sigfig_val "g"
@@ -47,24 +45,6 @@ function sigfig(val, unc) {
}
-function ck_boottime() {
-
- "sysctl kern.boottime" | getline t_kboot
- close("sysctl kern.boottime")
- sub("^.*\{", "", t_kboot)
- sub("\}.*$", "", t_kboot)
- split(t_kboot, t_kboot_arr, ",")
-
- for (i in t_kboot_arr) {
- sub("^.*= ", "", t_kboot_arr[i])
- }
-
- t_kboot = sprintf(t_kboot_arr[1] "." t_kboot_arr[2])
- return t_kboot
-
-}
-
-
function ck_cptime() {
t_sys_meas[1] = systime()
@@ -155,6 +135,9 @@ function ck_uptime(t0_est, t0_unc) {
BEGIN {
OFMT="%.21g"
+ pi = 4.0*atan2(1.0, 1.0)
+ c0 = 299792458 # m/sec
+
#print("_systime_", systime())
#print("_boottime_", ck_boottime())
printf("%s" ORS, ck_cptime())
diff --git a/ckt0.awk b/ckt0.awk
index ebe724f..0c392a5 100644
--- a/ckt0.awk
+++ b/ckt0.awk
@@ -1,28 +1,24 @@
#!/usr/bin/env awk -f
-function log10(n) {
+function log10(n) { return log(n)/log(10.0) }
- return log(n)/log(10.0)
-}
-
-
-function merge_meas(val_est, unc_est, val_meas, unc_meas) {
+function merge_meas(est_val, est_unc, meas_val, meas_unc) {
# Kalman filtering compares variances,
- # convert uncerainties to square units
- unc_est = (0.5*unc_est)^2.0
- unc_meas = (0.5*unc_meas)^2.0
+ # convert uncertainties to square units
+ est_unc = (0.5*est_unc)^2.0
+ meas_unc = (0.5*meas_unc)^2.0
- G_K = (unc_est)/((unc_est) + (unc_meas))
- val_est = val_est + G_K*(val_meas - val_est)
- unc_est = (unc_est*unc_meas)/(unc_est + unc_meas)
+ K = (est_unc)/((est_unc) + (meas_unc))
+ est_val = est_val + K*(meas_val - est_val)
+ est_unc = (est_unc*meas_unc)/(est_unc + meas_unc)
- # convert unc_est back to original units
- unc_est = 2.0*sqrt(unc_est)
+ # convert est_unc back to original units
+ est_unc = 2.0*sqrt(est_unc)
- return sprintf(OFMT OFS OFMT ORS, val_est, unc_est)
+ return sprintf(OFMT OFS OFMT ORS, est_val, est_unc)
}
@@ -44,21 +40,41 @@ function sigfig(val, unc) {
}
+function ck_boottime() {
+
+ "uname" | getline uname
+ close("uname")
+
+ if (uname ~/OpenBSD/) {
+ "sysctl kern.boottime" | getline t0_k
+ close("sysctl kern.boottime")
+ sub("^.*=", "", t0_k)
+ split(t0_k, t0_k_arr)
+ t0_k_arr[2] = (index("JanFebMarAprMayJunJulAugSepOctNovDec", t0_k_arr[2]) + 2)/3.0
+ gsub(":", " ", t0_k_arr[4])
+ t0_k = sprintf("%04d %02d %02d %s", t0_k_arr[5], t0_k_arr[2], t0_k_arr[3], t0_k_arr[4])
+ t0_k = mktime(t0_k)
+ }
+
+ return t0_k
+
+}
+
+
# function ck_boottime() {
-#
# "sysctl kern.boottime" | getline t_kboot
# close("sysctl kern.boottime")
# sub("^.*\{", "", t_kboot)
# sub("\}.*$", "", t_kboot)
# split(t_kboot, t_kboot_arr, ",")
-#
+#
# for (i in t_kboot_arr) {
# sub("^.*= ", "", t_kboot_arr[i])
# }
-#
+#
# t_kboot = sprintf(t_kboot_arr[1] "." t_kboot_arr[2])
# return t_kboot
-#
+#
# }
@@ -141,15 +157,12 @@ BEGIN {
# check ARGV for previous estimate
if (ARGC > 0) {
- ARGV[1] ? t0_est[1] = ARGV[1] : t0_est[1] = 0.0
+ ARGV[1] ? t0_est[1] = ARGV[1] : t0_est[1] = ck_boottime()
ARGV[2] ? t0_est[2] = ARGV[2] : t0_est[2] = systime()
}
#print("t0_est = ", t0_est[1])
#print("t_boot_unc = ", t0_est[2])
- # wait (sleep) based on uncertainty
- # print(60.0/t0_est[2])
-
# check uptime, update estimate
print(ck_uptime(t0_est[1], t0_est[2]))
diff --git a/ckt0.sh b/ckt0.sh
index 8b9e785..e7953ba 100644
--- a/ckt0.sh
+++ b/ckt0.sh
@@ -8,8 +8,8 @@ set -e
# raw input data
#date +%s
-sysctl_t0_str=$( sysctl kern.boottime | mawk -F= '{print($NF)}' )
-sysctl_t0=$( date -jf "%a %b %d %H:%M:%S %G" "${sysctl_t0_str}" +%s )
+#sysctl_t0_str=$( sysctl kern.boottime | mawk -F= '{print($NF)}' )
+#sysctl_t0=$( date -jf "%a %b %d %H:%M:%S %G" "${sysctl_t0_str}" +%s )
#epsilon1="$( mawk 'BEGIN{print(rand()^2.0)}' )"
#t0_est="${sysctl_t0} $(date +%s)"
@@ -20,16 +20,18 @@ sysctl_t0=$( date -jf "%a %b %d %H:%M:%S %G" "${sysctl_t0_str}" +%s )
if [ -f t0_est.log ] ; then {
t0_est="$( cat t0_est.log )"
} else {
- t0_est="${sysctl_t0} 2.0"
+ t0_est=""
} fi
printf "N t0_est t0_unc\n" | column -t
-for N in $(seq 0 1440) ; do
+for N in $(seq 0 10080) ; do
+
printf "${N} ${t0_est}\n" | column -t
- #t0_est=$( mawk -f ckt0.awk ${t0_est} | tail -n2 )
- mawk -f ckt0.awk ${sysctl_t0} 2.0
- sleep $( mawk 'BEGIN {print( rand()^2.0 + 1.0 )}' )
+ t0_est=$( mawk -f ckt0.awk ${t0_est} | tail -n2 )
+ #mawk -f ckt0.awk
+ sleep $( mawk 'BEGIN {print( sqrt(rand()^2.0 + 1.0) )}' )
#sleep $( echo $t0_est | mawk '{print(sqrt(1.0 + ((60.0*$NF)/(60.0 + $NF))^2.0 + rand()^2.0 ))}' )
+
done
printf "${t0_est}\n" | tee t0_est.log