fix training scaling factor

This commit is contained in:
Roman Zeyde
2014-07-12 10:02:12 +03:00
parent 8c0f19d0d5
commit 895f50ff6f
2 changed files with 8 additions and 9 deletions

View File

@@ -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)

11
recv.py
View File

@@ -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))