From 893e0b0ff273cb1e0f5827afa14e773dbab52841 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sat, 19 Jul 2014 16:06:49 +0300 Subject: [PATCH] use bitarray for faster bit manipulation --- recv.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/recv.py b/recv.py index c39b50d..80e51e2 100755 --- a/recv.py +++ b/recv.py @@ -166,11 +166,20 @@ def receive(signal, freqs): def decode(bits_iterator): - bits = list(bits_iterator) - data = iterate(bits, 8, func=to_byte) - data = ''.join(c for _, c in data) - + import cStringIO + import bitarray import ecc + + result = cStringIO.StringIO() + while True: + bits = itertools.islice(bits_iterator, 8 * ecc.BLOCK_SIZE) + block = bitarray.bitarray(endian='little') + block.extend(bits) + if not block: + break + result.write(block) + + data = result.getvalue() data = ecc.decode(data) if data is None: log.warning('No blocks decoded!')