diff --git a/amodem/common.py b/amodem/common.py index b1b7702..e771428 100644 --- a/amodem/common.py +++ b/amodem/common.py @@ -6,7 +6,7 @@ import logging log = logging.getLogger(__name__) scaling = 32000.0 # out of 2**15 -SATURATION_THRESHOLD = 1.0 +SATURATION_THRESHOLD = (2**15 - 1) / scaling LENGTH_FORMAT = ' SATURATION_THRESHOLD: + if peak >= SATURATION_THRESHOLD: raise SaturationError(peak) diff --git a/amodem/recv.py b/amodem/recv.py index 51e6409..da67b7b 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -237,19 +237,22 @@ def decode(bits_iterator): return ecc.decode(blocks()) -def iread(fd): - check = common.check_saturation - reader = stream.Reader(fd, data_type=common.loads, check=check) - return itertools.chain.from_iterable(reader) +def iread(fd, skip): + reader = stream.Reader(fd, data_type=common.loads) + signal = itertools.chain.from_iterable(reader) + + skipped = common.take(signal, skip) + log.debug('Skipping %.3f seconds', len(skipped) / float(modem.baud)) + + reader.check = common.check_saturation + return signal def main(args): try: log.info('Running MODEM @ {:.1f} kbps'.format(modem.modem_bps / 1e3)) - signal = iread(args.input) - skipped = common.take(signal, args.skip) - log.debug('Skipping %.3f seconds', len(skipped) / float(modem.baud)) + signal = iread(args.input, args.skip) size = 0 signal, amplitude = detect(signal, config.Fc) diff --git a/tests/test_common.py b/tests/test_common.py index 0bf28ed..a2bc890 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -54,9 +54,9 @@ def test_dumps_loads(): def test_saturation(): - x = np.array([1, -1, 1, -1]) * 1.01 + x = np.array([1, -1, 1, -1]) * 1e10 try: common.check_saturation(x) assert False except common.SaturationError as e: - assert e.args == (1.01,) + assert e.args == (max(x),)