From 599f3858fd775d8a906e63e074549420ed681f03 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sat, 5 Jul 2014 16:58:52 +0300 Subject: [PATCH] add drift calculation on carrier --- recv.py | 5 ++++- test_sigproc.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/recv.py b/recv.py index 944160f..38138ba 100644 --- a/recv.py +++ b/recv.py @@ -49,7 +49,6 @@ def take(symbols, i, n): def receive(x, freqs): x = list(x) lp = loop.FreqLoop(x, freqs, prefix=0.0) - lp.sampler.freq += -3e-6 symbols = iter(lp) @@ -63,6 +62,10 @@ def receive(x, freqs): return None log.info('Prefix OK') + err = sigproc.drift( S[np.array(prefix, dtype=bool)] ) / (Tsym * Fc) + log.info('Frequency error: %.2f ppm', err * 1e6) + lp.sampler.freq -= err + filters = {} full_scale = len(freqs) diff --git a/test_sigproc.py b/test_sigproc.py index e64e16c..57632e1 100644 --- a/test_sigproc.py +++ b/test_sigproc.py @@ -1,5 +1,9 @@ import sigproc import itertools +import common +import show +import pylab +import numpy as np def test_qam(): q = sigproc.QAM(bits_per_symbol=8, radii=[0.25, 0.5, 0.75, 1.0]) @@ -8,3 +12,13 @@ def test_qam(): S = q.encode(list(stream)) decoded = list(q.decode(list(S))) assert decoded == bits + +def test_drift(): + fc = 10e3 + f = fc * (1 + 50e-6) + x = np.cos(2 * np.pi * f / common.Fs * np.arange(common.Fs)) + S = sigproc.extract_symbols(x, fc) + S = np.array(list(S)) + print 1e6 * sigproc.drift(S) / (fc * common.Tsym) + show.constellation(S, 'carrier') + pylab.show()