From 807cbc31a2f9cd2f43954d03e574fffb64bdf4c8 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Thu, 8 Jan 2015 09:22:19 +0200 Subject: [PATCH] recv: split sampler update --- amodem/recv.py | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/amodem/recv.py b/amodem/recv.py index ac36957..5269968 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -26,7 +26,7 @@ class Receiver(object): self.omegas = 2 * np.pi * self.frequencies / config.Fs self.Nsym = config.Nsym self.Tsym = config.Tsym - self.iters_per_report = config.baud # report once per second + self.iters_per_update = config.baud # update sampler once per second self.modem_bitrate = config.modem_bps self.equalizer = equalizer.Equalizer(config) self.carrier_index = config.carrier_index @@ -138,20 +138,23 @@ class Receiver(object): self.stats['rx_bits'] = self.stats['rx_bits'] + len(bits) yield bits - if i % self.iters_per_report == 0: - err = np.array([e for v in errors.values() for e in v]) - err = np.mean(np.angle(err))/(2*np.pi) if len(err) else 0 - errors.clear() + if i % self.iters_per_update == 0: + self._update_sampler(i, errors, sampler) - duration = time.time() - self.stats['rx_start'] - sampler.freq -= 0.01 * err * self.Tsym - sampler.offset -= err - log.debug( - 'Got %8.1f kB, realtime: %6.2f%%, drift: %+5.2f ppm', - self.stats['rx_bits'] / 8e3, - duration * 100.0 / (i*self.Tsym), - (1.0 - sampler.freq) * 1e6 - ) + def _update_sampler(self, iter_index, errors, sampler): + err = np.array([e for v in errors.values() for e in v]) + err = np.mean(np.angle(err))/(2*np.pi) if len(err) else 0 + errors.clear() + + duration = time.time() - self.stats['rx_start'] + sampler.freq -= 0.01 * err * self.Tsym + sampler.offset -= err + log.debug( + 'Got %8.1f kB, realtime: %6.2f%%, drift: %+5.2f ppm', + self.stats['rx_bits'] / 8e3, + duration * 100.0 / (iter_index * self.Tsym), + (1.0 - sampler.freq) * 1e6 + ) def start(self, signal, gain=1.0): sampler = sampling.Sampler(signal, sampling.Interpolator())