From 25e895029d62ce3c9a80377ec01df5d2af16169b Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sat, 5 Jul 2014 13:46:27 +0300 Subject: [PATCH] move extract_symbols() to sigproc --- loop.py | 2 +- recv.py | 6 ------ sigproc.py | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/loop.py b/loop.py index 9900275..1b92562 100644 --- a/loop.py +++ b/loop.py @@ -34,7 +34,7 @@ class FreqLoop(object): samplers = itertools.tee(self.sampler, len(freqs)) for freq, generator in zip(freqs, samplers): - self.gens.append( recv.extract_symbols(generator, freq) ) + self.gens.append( sigproc.extract_symbols(generator, freq) ) Kp, Ki = 0.2, 0.01 b = np.array([1, -1])*Kp + np.array([0.5, 0.5])*Ki diff --git a/recv.py b/recv.py index b69bb6c..318eb80 100644 --- a/recv.py +++ b/recv.py @@ -43,12 +43,6 @@ def find_start(x, start): log.info('Carrier starts at {:.3f} ms'.format(start * Tsym * 1e3 / Nsym)) return start -def extract_symbols(x, freq, offset=0): - Hc = sigproc.exp_iwt(-freq, Nsym) / (0.5*Nsym) - func = lambda y: np.dot(Hc, y) - for _, symbol in iterate(x, Nsym, advance=Nsym, func=func): - yield symbol - def take(symbols, i, n): return np.array([s if i is None else s[i] for s in itertools.islice(symbols, n)]) diff --git a/sigproc.py b/sigproc.py index 97c8a3e..47ab698 100644 --- a/sigproc.py +++ b/sigproc.py @@ -70,3 +70,17 @@ def coherence(x, freq): n = len(x) Hc = exp_iwt(-freq, n) / np.sqrt(0.5*n) return np.dot(Hc, x) / norm(x) + +def extract_symbols(x, freq, offset=0): + Hc = exp_iwt(-freq, common.Nsym) / (0.5*common.Nsym) + func = lambda y: np.dot(Hc, y) + for _, symbol in common.iterate(x, common.Nsym, advance=common.Nsym, func=func): + yield symbol + +def drift(S): + x = np.arange(len(S)) + x = x - np.mean(x) + y = np.unwrap(np.angle(S)) / (2*np.pi) + y = y - np.mean(y) + a = np.dot(x, y) / np.dot(x, x) + return a