From df1e57f1ac6df30174e269edbe68b5b5f7fa5c2b Mon Sep 17 00:00:00 2001 From: wukong Date: Fri, 5 Dec 2025 19:05:36 -0800 Subject: added uname check in ck_boottime(); updated variable names in merge_meas(); --- ckcptime.awk | 49 ++++++++++++++++--------------------------------- ckt0.awk | 59 ++++++++++++++++++++++++++++++++++++----------------------- ckt0.sh | 16 +++++++++------- 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 -- cgit v1.2.3