From 31b65e41043900c0cadd80961f4b22cdfc171e7d Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Wed, 5 Dec 2018 11:19:07 +0100 Subject: Get GUI to communicate with DPDCE --- python/dpd/GlobalConfig.py | 9 +++++---- python/dpd/RX_Agc.py | 45 +++++++++++++++++++++++++++------------------ 2 files changed, 32 insertions(+), 22 deletions(-) (limited to 'python/dpd') diff --git a/python/dpd/GlobalConfig.py b/python/dpd/GlobalConfig.py index abd7442..873b6ac 100644 --- a/python/dpd/GlobalConfig.py +++ b/python/dpd/GlobalConfig.py @@ -10,9 +10,9 @@ import numpy as np class GlobalConfig: - def __init__(self, args, plot_location: str): - self.sample_rate = args['samplerate'] - assert self.sample_rate == 8192000 # By now only constants for 8192000 + def __init__(self, samplerate, plot_location: str): + self.sample_rate = samplerate + assert self.sample_rate == 8192000, "We only support constants for 8192000 sample rate: {}".format(self.sample_rate) self.plot_location = plot_location plot = len(plot_location) > 0 @@ -77,12 +77,13 @@ class GlobalConfig: # Constants for RX_AGC self.RAGC_min_rxgain = 25 # USRP B200 specific + self.RAGC_max_rxgain = 65 # USRP B200 specific self.RAGC_rx_median_target = 0.05 # The MIT License (MIT) # # Copyright (c) 2017 Andreas Steger -# Copyright (c) 2017 Matthias P. Braendli +# Copyright (c) 2018 Matthias P. Braendli # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/python/dpd/RX_Agc.py b/python/dpd/RX_Agc.py index 0cc18b8..2a2f548 100644 --- a/python/dpd/RX_Agc.py +++ b/python/dpd/RX_Agc.py @@ -13,6 +13,7 @@ import numpy as np import matplotlib matplotlib.use('agg') import matplotlib.pyplot as plt +from typing import Tuple import dpd.Adapt as Adapt import dpd.Measure as Measure @@ -39,31 +40,39 @@ class Agc: self.measure = measure self.adapt = adapt self.min_rxgain = c.RAGC_min_rxgain + self.max_rxgain = c.RAGC_max_rxgain self.rxgain = self.min_rxgain self.peak_to_median = 1./c.RAGC_rx_median_target - def run(self): + def run(self) -> Tuple[bool, str]: self.adapt.set_rxgain(self.rxgain) - for i in range(2): - # Measure - txframe_aligned, tx_ts, rxframe_aligned, rx_ts, rx_median= \ - self.measure.get_samples() - - # Estimate Maximum - rx_peak = self.peak_to_median * rx_median - correction_factor = 20*np.log10(1/rx_peak) - self.rxgain = self.rxgain + correction_factor - - assert self.min_rxgain <= self.rxgain, ("Desired RX Gain is {} which is smaller than the minimum of {}".format( - self.rxgain, self.min_rxgain)) - - logging.info("RX Median {:1.4f}, estimated peak {:1.4f}, correction factor {:1.4f}, new RX gain {:1.4f}".format( - rx_median, rx_peak, correction_factor, self.rxgain - )) - + # Measure + txframe_aligned, tx_ts, rxframe_aligned, rx_ts, rx_median=self.measure.get_samples() + + # Estimate Maximum + rx_peak = self.peak_to_median * rx_median + correction_factor = 20*np.log10(1/rx_peak) + self.rxgain = self.rxgain + correction_factor + + measurements = "RX Median {:1.4f}, estimated peak {:1.4f}, correction factor {:1.4f}, new RX gain {:1.4f}".format( + rx_median, rx_peak, correction_factor, self.rxgain) + logging.info(measurements) + + if self.rxgain < self.min_rxgain: + w = "Warning: calculated RX Gain={} is lower than minimum={}. RX feedback power is too high!".format( + self.rxgain, self.min_rxgain) + logging.warning(w) + return (False, "\n".join([measurements, w])) + elif self.rxgain > self.max_rxgain: + w = "Warning: calculated RX Gain={} is higher than maximum={}. RX feedback power should be increased.".format( + self.rxgain, self.max_rxgain) + logging.warning(w) + return (False, "\n".join([measurements, w])) + else: self.adapt.set_rxgain(self.rxgain) time.sleep(0.5) + return (True, measurements) def plot_estimates(self): """Plots the estimate of for Max, Median, Mean for different -- cgit v1.2.3