From 153841b7305836b47c7b4af99105c58cee45bb51 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sun, 7 Sep 2014 18:17:19 +0300 Subject: [PATCH] amodem: fix logging on rx/tx --- amodem/dsp.py | 6 ++++++ amodem/recv.py | 7 ++----- amodem/send.py | 14 ++++++-------- scripts/amodem | 22 +++++++++++++++++----- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/amodem/dsp.py b/amodem/dsp.py index c39fda3..8709303 100644 --- a/amodem/dsp.py +++ b/amodem/dsp.py @@ -152,6 +152,12 @@ class MODEM(object): for freq in self.freqs ]) + def __repr__(self): + return '<{:.3f} kbps, {:d}-QAM, {:d} carriers>'.format( + self.modem_bps / 1e3, len(self.qam.symbols), len(self.carriers)) + + __str__ = __repr__ + def exp_iwt(freq, n): iwt = 2j * np.pi * freq * np.arange(n) * Ts diff --git a/amodem/recv.py b/amodem/recv.py index 22dde3c..d3fb20e 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -5,8 +5,6 @@ import functools import collections import time -import bitarray - log = logging.getLogger(__name__) from . import stream @@ -196,7 +194,7 @@ class Receiver(object): self.stats['rx_bits'] = 0 self.stats['rx_start'] = time.time() - log.info('Demodulation started') + log.info('Starting demodulation: %s', modem) for i, block in enumerate(izip(streams)): # block per frequency for bits in block: self.stats['rx_bits'] = self.stats['rx_bits'] + len(bits) @@ -273,8 +271,6 @@ def izip(streams): def main(args): - log.info('Running MODEM @ {:.1f} kbps'.format(modem.modem_bps / 1e3)) - reader = stream.Reader(args.input, data_type=common.loads) signal = itertools.chain.from_iterable(reader) @@ -286,6 +282,7 @@ def main(args): receiver = Receiver(args.plt) success = False try: + log.info('Waiting for carrier tone: %.1f kHz', config.Fc / 1e3) signal, amplitude = detect(signal, config.Fc) receiver.start(signal, modem.freqs, gain=1.0/amplitude) receiver.run(args.output) diff --git a/amodem/send.py b/amodem/send.py index fc3e329..238660f 100644 --- a/amodem/send.py +++ b/amodem/send.py @@ -57,8 +57,6 @@ class Writer(object): def main(args): - log.info('Running MODEM @ {:.1f} kbps'.format(modem.modem_bps / 1e3)) - writer = Writer(args.output) # pre-padding audio with silence @@ -68,17 +66,17 @@ def main(args): training_size = writer.offset training_duration = training_size / wave.bytes_per_second - log.info('%.3f seconds of training audio', training_duration) + log.info('Sending %.3f seconds of training audio', training_duration) reader = stream.Reader(args.input, bufsize=(64 << 10), eof=True) - data = list(itertools.chain.from_iterable(reader)) - bits = list(framing.encode(data)) - data_ = list(framing.decode(bits)) + data = itertools.chain.from_iterable(reader) + bits = framing.encode(data) + log.info('Starting modulation: %s', modem) writer.modulate(bits=bits) data_size = writer.offset - training_size - log.info('%.3f seconds of data audio, for %.3f kB of data', - data_size / wave.bytes_per_second, reader.total / 1e3) + log.info('Sent %.3f kB @ %.3f seconds', + reader.total / 1e3, data_size / wave.bytes_per_second) # post-padding audio with silence writer.write(np.zeros(int(config.Fs * args.silence_stop))) diff --git a/scripts/amodem b/scripts/amodem index 6b016f9..5a26ada 100755 --- a/scripts/amodem +++ b/scripts/amodem @@ -17,8 +17,10 @@ from amodem import recv from amodem import send from amodem import wave from amodem import calib +from amodem import dsp +modem = dsp.MODEM(config) null = open('/dev/null', 'wb') @@ -46,7 +48,11 @@ def FileType(mode, process=None): def main(): - p = argparse.ArgumentParser() + description = 'Audio MODEM @ {:.1f} kB/s'.format(modem.modem_bps / 1e3) + p = argparse.ArgumentParser(description=description) + g = p.add_mutually_exclusive_group() + g.add_argument('-v', '--verbose', default=0, action='count') + g.add_argument('-q', '--quiet', default=False, action='store_true') subparsers = p.add_subparsers() # Modulator @@ -99,10 +105,16 @@ def main(): ) args = p.parse_args() - logging.basicConfig( - level='DEBUG', filename='amodem.log', - format=('%(asctime)s %(levelname)-10s %(message)-100s ' - '%(filename)s:%(lineno)d')) + if args.verbose == 0: + level, format = 'INFO', '%(message)s' + elif args.verbose == 1: + level, format = 'DEBUG', '%(message)s' + elif args.verbose >= 2: + level, format = ('DEBUG', '%(asctime)s %(levelname)-10s %(message)-100s ' + '%(filename)s:%(lineno)d') + if args.quiet: + level, format = 'WARNING', '%(message)s' + logging.basicConfig(level=level, format=format) # Parsing and execution log.debug('MODEM settings: %r', config.settings)