mirror of
https://github.com/romanz/amodem.git
synced 2026-03-25 03:32:32 +08:00
check for saturation during demodulation.
This commit is contained in:
@@ -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 = '<I'
|
||||
|
||||
@@ -24,7 +24,7 @@ class SaturationError(ValueError):
|
||||
|
||||
def check_saturation(x):
|
||||
peak = np.max(np.abs(x))
|
||||
if peak > SATURATION_THRESHOLD:
|
||||
if peak >= SATURATION_THRESHOLD:
|
||||
raise SaturationError(peak)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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),)
|
||||
|
||||
Reference in New Issue
Block a user