amodem: fix logging on rx/tx

This commit is contained in:
Roman Zeyde
2014-09-07 18:17:19 +03:00
parent 31ea792015
commit 153841b730
4 changed files with 31 additions and 18 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)))

View File

@@ -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)