summaryrefslogtreecommitdiffstats
path: root/python/dpd/RX_Agc.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/dpd/RX_Agc.py')
-rw-r--r--python/dpd/RX_Agc.py45
1 files changed, 27 insertions, 18 deletions
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