mirror of
https://github.com/romanz/amodem.git
synced 2026-04-20 04:56:25 +08:00
recv: make symbols decoding totally iterable
This commit is contained in:
34
recv.py
34
recv.py
@@ -1,13 +1,15 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
import logging
|
||||||
|
import itertools
|
||||||
|
import time
|
||||||
import os
|
import os
|
||||||
|
|
||||||
if os.environ.get('PYLAB') is not None:
|
if os.environ.get('PYLAB') is not None:
|
||||||
import pylab
|
import pylab
|
||||||
import show
|
import show
|
||||||
else:
|
else:
|
||||||
pylab = None
|
pylab = None
|
||||||
|
|
||||||
import logging
|
|
||||||
import itertools
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
import sigproc
|
import sigproc
|
||||||
@@ -100,28 +102,34 @@ def receive(x, freqs):
|
|||||||
log.info('{:10.1f} kHz: Noise sigma={:.4f}, SNR={:.1f} dB'.format( freq/1e3, Pnoise**0.5, 10*np.log10(1/Pnoise) ))
|
log.info('{:10.1f} kHz: Noise sigma={:.4f}, SNR={:.1f} dB'.format( freq/1e3, Pnoise**0.5, 10*np.log10(1/Pnoise) ))
|
||||||
|
|
||||||
streams = []
|
streams = []
|
||||||
ugly_hack = itertools.izip(*list(symbols))
|
symbol_list = []
|
||||||
i = 0
|
|
||||||
if pylab:
|
|
||||||
pylab.figure()
|
|
||||||
|
|
||||||
for freq, S in zip(freqs, ugly_hack):
|
generators = split(symbols, n=len(freqs))
|
||||||
i += 1
|
for freq, S in zip(freqs, generators):
|
||||||
S = filters[freq](S)
|
S = filters[freq](S)
|
||||||
S = np.array(list(S))
|
|
||||||
if pylab:
|
equalized = []
|
||||||
pylab.subplot(height, width, i)
|
S = icapture(S, result=equalized)
|
||||||
show.constellation(S, title='$F_c = {} Hz$'.format(freq))
|
symbol_list.append(equalized)
|
||||||
|
|
||||||
bits = sigproc.modulator.decode(S) # list of bit tuples
|
bits = sigproc.modulator.decode(S) # list of bit tuples
|
||||||
streams.append(bits)
|
streams.append(bits)
|
||||||
|
|
||||||
log.info('Demodulation started')
|
log.info('Demodulation started')
|
||||||
bitstream = []
|
bitstream = []
|
||||||
|
start = time.time()
|
||||||
for block in itertools.izip(*streams):
|
for block in itertools.izip(*streams):
|
||||||
for bits in block:
|
for bits in block:
|
||||||
bitstream.extend(bits)
|
bitstream.extend(bits)
|
||||||
log.info('Demodulated %d bits => %.3f kB', len(bitstream), len(bitstream) / 8e3)
|
log.info('Demodulated %d bits : %.3f kB @ %.3f seconds',
|
||||||
|
len(bitstream), len(bitstream) / 8e3, time.time() - start)
|
||||||
|
|
||||||
|
if pylab:
|
||||||
|
pylab.figure()
|
||||||
|
symbol_list = np.array(symbol_list)
|
||||||
|
for i, freq in enumerate(freqs):
|
||||||
|
pylab.subplot(height, width, i+1)
|
||||||
|
show.constellation(symbol_list[i], title='$F_c = {} Hz$'.format(freq))
|
||||||
return bitstream
|
return bitstream
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user