mirror of
https://github.com/romanz/amodem.git
synced 2026-03-17 07:05:59 +08:00
common: iterate() should not enumerate on default
This commit is contained in:
@@ -36,7 +36,7 @@ def dumps(sym, n=1):
|
||||
return data * n
|
||||
|
||||
|
||||
def iterate(data, size, func=None, truncate=True):
|
||||
def iterate(data, size, func=None, truncate=True, enumerate=False):
|
||||
offset = 0
|
||||
data = iter(data)
|
||||
|
||||
@@ -49,7 +49,7 @@ def iterate(data, size, func=None, truncate=True):
|
||||
done = True
|
||||
|
||||
result = func(buf) if func else np.array(buf)
|
||||
yield offset, result
|
||||
yield (offset, result) if enumerate else result
|
||||
offset += size
|
||||
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@ class Framer(object):
|
||||
return struct.pack(self.prefix_fmt, len(frame)) + frame
|
||||
|
||||
def encode(self, data):
|
||||
for _, block in common.iterate(data=data, size=self.block_size,
|
||||
func=bytearray, truncate=False):
|
||||
for block in common.iterate(data=data, size=self.block_size,
|
||||
func=bytearray, truncate=False):
|
||||
yield self._pack(block=block)
|
||||
yield self._pack(block=self.EOF)
|
||||
|
||||
@@ -95,8 +95,8 @@ def encode(data, framer=None):
|
||||
|
||||
@chain_wrapper
|
||||
def _to_bytes(bits, block_size=1):
|
||||
for _, chunk in common.iterate(data=bits, size=8*block_size,
|
||||
func=lambda x: x, truncate=True):
|
||||
for chunk in common.iterate(data=bits, size=8*block_size,
|
||||
func=lambda x: x, truncate=True):
|
||||
yield bitarray.bitarray(chunk, endian='little').tobytes()
|
||||
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ def report_carrier(bufs, begin):
|
||||
def detect(samples, freq):
|
||||
counter = 0
|
||||
bufs = collections.deque([], maxlen=config.baud) # 1 second of symbols
|
||||
for offset, buf in common.iterate(samples, config.Nsym):
|
||||
for offset, buf in common.iterate(samples, config.Nsym, enumerate=True):
|
||||
bufs.append(buf)
|
||||
|
||||
coeff = dsp.coherence(buf, config.Fc)
|
||||
@@ -230,8 +230,8 @@ class Receiver(object):
|
||||
def run(self, output):
|
||||
data = framing.decode(self.bitstream)
|
||||
self.size = 0
|
||||
for _, chunk in common.iterate(data=data, size=256,
|
||||
truncate=False, func=bytearray):
|
||||
for chunk in common.iterate(data=data, size=256,
|
||||
truncate=False, func=bytearray):
|
||||
output.write(chunk)
|
||||
self.size += len(chunk)
|
||||
|
||||
|
||||
@@ -45,7 +45,8 @@ class Writer(object):
|
||||
bits = itertools.chain(bits, padding)
|
||||
symbols_iter = modem.qam.encode(bits)
|
||||
carriers = modem.carriers / config.Nfreq
|
||||
for i, symbols in common.iterate(symbols_iter, size=config.Nfreq):
|
||||
for i, symbols in common.iterate(symbols_iter,
|
||||
size=config.Nfreq, enumerate=True):
|
||||
symbols = np.array(list(symbols))
|
||||
self.write(np.dot(symbols, carriers))
|
||||
|
||||
|
||||
@@ -4,7 +4,10 @@ import numpy as np
|
||||
|
||||
def iterlist(x, *args, **kwargs):
|
||||
x = np.array(x)
|
||||
return list((i, list(x)) for i, x in common.iterate(x, *args, **kwargs))
|
||||
return list(
|
||||
(i, list(x))
|
||||
for i, x in common.iterate(x, enumerate=True, *args, **kwargs)
|
||||
)
|
||||
|
||||
|
||||
def test_iterate():
|
||||
|
||||
Reference in New Issue
Block a user