From 895f50ff6ff2711ff2197eb3bd3924c40ca395dd Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sat, 12 Jul 2014 10:02:12 +0300 Subject: [PATCH] fix training scaling factor --- common.py | 6 +++--- recv.py | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/common.py b/common.py index a781e39..50a6aa3 100644 --- a/common.py +++ b/common.py @@ -7,14 +7,14 @@ log = logging.getLogger(__name__) Fs = 32e3 Ts = 1.0 / Fs -frequencies = (1 + np.arange(1)) * 1e3 +frequencies = (1 + np.arange(2)) * 1e3 carrier_index = 0 Fc = frequencies[carrier_index] Tc = 1.0 / Fc symbols = np.array([complex(x, y) - for x in np.linspace(-1, 1, 4) - for y in np.linspace(-1, 1, 4)]) / np.sqrt(2) + for x in np.linspace(-1, 1, 8) + for y in np.linspace(-1, 1, 8)]) / np.sqrt(2) Tsym = 1e-3 Nsym = int(Tsym / Ts) diff --git a/recv.py b/recv.py index dd58214..15fac2b 100755 --- a/recv.py +++ b/recv.py @@ -78,20 +78,19 @@ def receive_prefix(symbols): def train_receiver(symbols, freqs): filters = {} - full_scale = len(freqs) + scaling_factor = len(freqs) # to avoid saturation training = np.array(train.equalizer) - expected = full_scale * training if pylab: pylab.figure() for i, freq in enumerate(freqs): - S = take(symbols, i, len(expected)) + S = take(symbols, i, len(training)) - filt = sigproc.train(S, expected) + filt = sigproc.train(S, training * scaling_factor) filters[freq] = filt S = list(filt(S)) - y = np.array(S) + y = np.array(S) / scaling_factor if pylab: pylab.subplot(HEIGHT, WIDTH, i+1) show.constellation(y, 'Train: $F_c = {}Hz$'.format(freq)) @@ -100,7 +99,7 @@ def train_receiver(symbols, freqs): if not all(train_result == training): raise ValueError('#{} training failed on {} Hz'.format(i, freq)) - noise = y - expected + noise = y - training Pnoise = sigproc.power(noise) log.info('%10.1f kHz: Noise sigma=%.4f, SNR=%.1f dB', freq/1e3, Pnoise**0.5, 10*np.log10(1/Pnoise))