From a1f58436d2983f322febdf86df65b8ba163f0f0b Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Tue, 23 Dec 2014 17:50:00 +0200 Subject: [PATCH] recv: add timeout for carrier waiting --- amodem/recv.py | 5 +++++ tests/test_recv.py | 15 +++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/amodem/recv.py b/amodem/recv.py index 1433f90..405e217 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -24,17 +24,22 @@ class Detector(object): CARRIER_THRESHOLD = int(0.9 * CARRIER_DURATION) SEARCH_WINDOW = int(0.1 * CARRIER_DURATION) + TIMEOUT = 10.0 # [seconds] + def __init__(self, config): self.freq = config.Fc self.omega = 2 * np.pi * self.freq / config.Fs self.Nsym = config.Nsym self.Tsym = config.Tsym self.maxlen = config.baud # 1 second of symbols + self.max_offset = self.TIMEOUT * config.Fs def run(self, samples): counter = 0 bufs = collections.deque([], maxlen=self.maxlen) for offset, buf in common.iterate(samples, self.Nsym, enumerate=True): + if offset > self.max_offset: + raise ValueError('Timeout waiting for carrier') bufs.append(buf) coeff = dsp.coherence(buf, self.omega) diff --git a/tests/test_recv.py b/tests/test_recv.py index 4f66cb8..a42ca0a 100644 --- a/tests/test_recv.py +++ b/tests/test_recv.py @@ -1,4 +1,5 @@ import numpy as np +import pytest from amodem import dsp from amodem import recv @@ -18,11 +19,12 @@ def test_detect(): assert abs(1 - amp) < 1e-12 x = np.cos(2 * np.pi * (2*config.Fc) * t) - try: + with pytest.raises(ValueError): + detector.run(x) + + with pytest.raises(ValueError): + detector.max_offset = 0 detector.run(x) - assert False - except ValueError: - pass def test_prefix(): @@ -37,12 +39,9 @@ def test_prefix(): freq_err = r._prefix(symbols_stream(signal)) assert abs(freq_err) < 1e-16 - try: + with pytest.raises(ValueError): silence = 0 * signal r._prefix(symbols_stream(silence)) - assert False - except ValueError: - pass def test_find_start():