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