double *offset_sd, double *frequency, double *skew)
{
struct timespec src_ref_time;
- double src_offset, src_offset_sd, src_frequency, src_skew;
+ double src_offset, src_offset_sd, src_frequency, src_frequency_sd, src_skew;
double src_root_delay, src_root_dispersion, sel_src_distance, elapsed;
double offset_weight, sum_offset_weight, sum_offset, sum2_offset_sd;
double frequency_weight, sum_frequency_weight, sum_frequency, inv_sum2_skew;
index = sel_sources[i];
SST_GetTrackingData(sources[index]->stats, &src_ref_time,
&src_offset, &src_offset_sd,
- &src_frequency, &src_skew,
+ &src_frequency, &src_frequency_sd, &src_skew,
&src_root_delay, &src_root_dispersion);
/* Don't include this source if its distance is longer than the distance of
int depth, best_depth, trust_depth, best_trust_depth;
int combined, stratum, min_stratum, max_score_index;
int orphan_stratum, orphan_source, leap_votes, leap_ins, leap_del;
- double src_offset, src_offset_sd, src_frequency, src_skew;
+ double src_offset, src_offset_sd, src_frequency, src_frequency_sd, src_skew;
double src_root_delay, src_root_dispersion;
double best_lo, best_hi, distance, sel_src_distance, max_score;
double first_sample_ago, max_reach_sample_ago;
SST_GetTrackingData(sources[selected_source_index]->stats, &ref_time,
&src_offset, &src_offset_sd,
- &src_frequency, &src_skew,
+ &src_frequency, &src_frequency_sd, &src_skew,
&src_root_delay, &src_root_dispersion);
combined = combine_sources(n_sel_sources, &ref_time, &src_offset,
source per unit local time. (Positive => local clock fast,
negative => local clock slow) */
double estimated_frequency;
+ double estimated_frequency_sd;
/* This is the assumed worst case bounds on the estimated frequency.
We assume that the true frequency lies within +/- half this much
inst->best_single_sample = 0;
inst->min_delay_sample = 0;
inst->estimated_frequency = 0;
+ inst->estimated_frequency_sd = WORST_CASE_FREQ_BOUND;
inst->skew = WORST_CASE_FREQ_BOUND;
inst->estimated_offset = 0.0;
inst->estimated_offset_sd = 86400.0; /* Assume it's at least within a day! */
old_freq = inst->estimated_frequency;
inst->estimated_frequency = est_slope;
+ inst->estimated_frequency_sd = CLAMP(MIN_SKEW, est_slope_sd, MAX_SKEW);
inst->skew = est_slope_sd * RGR_GetTCoef(degrees_of_freedom);
inst->estimated_offset = est_intercept;
inst->offset_time = inst->sample_times[inst->last_sample];
prune_register(inst, best_start);
} else {
inst->estimated_frequency = 0.0;
+ inst->estimated_frequency_sd = WORST_CASE_FREQ_BOUND;
inst->skew = WORST_CASE_FREQ_BOUND;
times_back_start = 0;
}
void
SST_GetTrackingData(SST_Stats inst, struct timespec *ref_time,
double *average_offset, double *offset_sd,
- double *frequency, double *skew,
+ double *frequency, double *frequency_sd, double *skew,
double *root_delay, double *root_dispersion)
{
int i, j;
*average_offset = inst->estimated_offset;
*offset_sd = inst->estimated_offset_sd;
*frequency = inst->estimated_frequency;
+ *frequency_sd = inst->estimated_frequency_sd;
*skew = inst->skew;
*root_delay = inst->root_delays[j];
extern void
SST_GetTrackingData(SST_Stats inst, struct timespec *ref_time,
double *average_offset, double *offset_sd,
- double *frequency, double *skew,
+ double *frequency, double *frequency_sd, double *skew,
double *root_delay, double *root_dispersion);
/* This routine is called when the local machine clock parameters are