diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-10-01 21:03:37 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-10-02 11:00:24 -0400 |
commit | c2e1c533561e1cf6f23c37705e9d8b24592b12bf (patch) | |
tree | cd6ff1eeae003f88016740fa59b11774ef628516 /klippy | |
parent | eaeb8311076a2b0f67141019d633da2dfde4dfa2 (diff) | |
download | kutter-c2e1c533561e1cf6f23c37705e9d8b24592b12bf.tar.gz kutter-c2e1c533561e1cf6f23c37705e9d8b24592b12bf.tar.xz kutter-c2e1c533561e1cf6f23c37705e9d8b24592b12bf.zip |
clocksync: Implement a floor on the prediction filter
Don't discard samples that are less than 500us from the prediction
regardless of the prediction variance. Also, don't use the prediction
variance in the external time estimate.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/clocksync.py | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/klippy/clocksync.py b/klippy/clocksync.py index 6eaf2a47..0bbde8c9 100644 --- a/klippy/clocksync.py +++ b/klippy/clocksync.py @@ -77,11 +77,12 @@ class ClockSync: self.min_rtt_time = sent_time logging.debug("new minimum rtt %.3f: hrtt=%.6f freq=%d", sent_time, half_rtt, self.clock_est[2]) - # Compare clock to predicted clock and track prediction accuracy + # Filter out samples that are extreme outliers exp_clock = ((sent_time - self.time_avg) * self.clock_est[2] + self.clock_avg) clock_diff2 = (clock - exp_clock)**2 - if clock_diff2 > 25. * self.prediction_variance: + if (clock_diff2 > 25. * self.prediction_variance + and clock_diff2 > (.000500 * self.mcu_freq)**2): if clock > exp_clock and sent_time < self.last_prediction_time + 10.: logging.debug("Ignoring clock sample %.3f:" " freq=%d diff=%d stddev=%.3f", @@ -112,7 +113,7 @@ class ClockSync: self.serial.set_clock_est(new_freq, self.time_avg + TRANSMIT_EXTRA, int(self.clock_avg - 3. * pred_stddev)) self.clock_est = (self.time_avg - self.min_half_rtt, - self.clock_avg + 3. * pred_stddev, new_freq) + self.clock_avg, new_freq) #logging.debug("regr %.3f: freq=%.3f d=%d(%.3f)", # sent_time, new_freq, clock - exp_clock, pred_stddev) # clock frequency conversions |