replace extract_symbols into frequency demultiplexer

This commit is contained in:
Roman Zeyde
2014-08-09 10:26:09 +03:00
parent 53e600e702
commit 5717bfa071
2 changed files with 18 additions and 22 deletions

View File

@@ -212,16 +212,15 @@ def demodulate(symbols, filters, freqs, sampler):
def receive(signal, freqs, gain=1.0):
signal = sigproc.FreqLoop(signal, freqs)
signal.sampler.gain = gain
symbols = iter(signal)
symbols = sigproc.Demux(signal, freqs)
symbols.sampler.gain = gain
freq_err, offset_err = receive_prefix(symbols)
signal.sampler.offset -= offset_err
signal.sampler.freq -= freq_err
symbols.sampler.offset -= offset_err
symbols.sampler.freq -= freq_err
filters = train_receiver(symbols, freqs)
data_bits = demodulate(symbols, filters, freqs, signal.sampler)
data_bits = demodulate(symbols, filters, freqs, symbols.sampler)
return itertools.chain.from_iterable(data_bits)

View File

@@ -1,6 +1,8 @@
import numpy as np
from numpy import linalg
import itertools
import logging
log = logging.getLogger(__name__)
from . import sampling
from . import common
@@ -60,19 +62,21 @@ class QAM(object):
yield self._dec[S]
class FreqLoop(object):
class Demux(object):
def __init__(self, src, freqs):
interp = sampling.Interpolator()
self.sampler = sampling.Sampler(src, interp)
self.gens = []
samplers = itertools.tee(self.sampler, len(freqs))
for freq, generator in zip(freqs, samplers):
gen = extract_symbols(generator, freq)
self.gens.append(gen)
self.filters = [exp_iwt(-f, Nsym) / (0.5*Nsym) for f in freqs]
self.filters = np.array(self.filters)
def __iter__(self):
return common.izip(*self.gens)
return self
def next(self):
frame = common.take(self.sampler, Nsym)
return np.dot(self.filters, frame)
__next__ = next
class MODEM(object):
@@ -111,13 +115,6 @@ def coherence(x, freq):
return 0.0
def extract_symbols(x, freq, offset=0):
Hc = exp_iwt(-freq, Nsym) / (0.5*Nsym)
for _, symbol in common.iterate(x, Nsym):
yield np.dot(Hc, symbol)
def linear_regression(x, y):
''' Find (a,b) such that y = a*x + b. '''
x = np.array(x)