static void slew_samples (struct timeval *raw, struct timeval *cooked, double dfreq, double doffset, int is_step_change, void *anything) { int i; double delta_time; double old_seconds_fast, old_gain_rate; for (i=0; i<n_samples; i++) { UTI_AdjustTimeval(system_times + i, cooked, system_times + i, &delta_time, dfreq, doffset); } old_seconds_fast = coef_seconds_fast; old_gain_rate = coef_gain_rate; if (coefs_valid) { coef_seconds_fast += doffset; coef_gain_rate = (1.0 + dfreq) * (1.0 + coef_gain_rate) - 1.0; } #if 0 LOG(LOGS_INFO, LOGF_RtcLinux, "dfreq=%.8f doffset=%.6f old_fast=%.6f old_rate=%.3f new_fast=%.6f new_rate=%.3f", dfreq, doffset, old_seconds_fast, 1.0e6 * old_gain_rate, coef_seconds_fast, 1.0e6 * coef_gain_rate); #else (void)old_seconds_fast; (void)old_gain_rate; #endif }
static void slew_samples (struct timeval *raw, struct timeval *cooked, double dfreq, double doffset, LCL_ChangeType change_type, void *anything) { int i; double delta_time; double old_seconds_fast, old_gain_rate; if (change_type == LCL_ChangeUnknownStep) { /* Drop all samples. */ n_samples = 0; } for (i=0; i<n_samples; i++) { UTI_AdjustTimeval(system_times + i, cooked, system_times + i, &delta_time, dfreq, doffset); } old_seconds_fast = coef_seconds_fast; old_gain_rate = coef_gain_rate; if (coefs_valid) { coef_seconds_fast += doffset; coef_gain_rate += dfreq * (1.0 - coef_gain_rate); } DEBUG_LOG(LOGF_RtcLinux, "dfreq=%.8f doffset=%.6f old_fast=%.6f old_rate=%.3f new_fast=%.6f new_rate=%.3f", dfreq, doffset, old_seconds_fast, 1.0e6 * old_gain_rate, coef_seconds_fast, 1.0e6 * coef_gain_rate); }
void SST_SlewSamples(SST_Stats inst, struct timeval *when, double dfreq, double doffset) { int m, i; double delta_time; struct timeval *sample, prev; double prev_offset, prev_freq; if (!inst->n_samples) return; for (m = -inst->runs_samples; m < inst->n_samples; m++) { i = get_runsbuf_index(inst, m); sample = &(inst->sample_times[i]); prev = *sample; UTI_AdjustTimeval(sample, when, sample, &delta_time, dfreq, doffset); prev_offset = inst->offsets[i]; inst->offsets[i] += delta_time; DEBUG_LOG(LOGF_SourceStats, "i=%d old_st=[%s] new_st=[%s] old_off=%f new_off=%f", i, UTI_TimevalToString(&prev), UTI_TimevalToString(sample), prev_offset, inst->offsets[i]); } /* Do a half-baked update to the regression estimates */ prev = inst->offset_time; prev_offset = inst->estimated_offset; prev_freq = inst->estimated_frequency; UTI_AdjustTimeval(&(inst->offset_time), when, &(inst->offset_time), &delta_time, dfreq, doffset); inst->estimated_offset += delta_time; inst->estimated_frequency -= dfreq; DEBUG_LOG(LOGF_SourceStats, "old_off_time=[%s] new=[%s] old_off=%f new_off=%f old_freq=%.3fppm new_freq=%.3fppm", UTI_TimevalToString(&prev), UTI_TimevalToString(&(inst->offset_time)), prev_offset, inst->estimated_offset, 1.0e6*prev_freq, 1.0e6*inst->estimated_frequency); }
static void slew_samples(struct timeval *raw, struct timeval *cooked, double dfreq, double doffset, LCL_ChangeType change_type, void *not_used) { double delta_time; int i; if (change_type == LCL_ChangeUnknownStep) { MNL_Reset(); } for (i=0; i<n_samples; i++) { UTI_AdjustTimeval(&samples[i].when, cooked, &samples[i].when, &delta_time, dfreq, doffset); samples[i].offset += delta_time; } }