Пример #1
0
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

}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
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;
  }
}