diff options
Diffstat (limited to 'gui/dpd/__init__.py')
-rw-r--r-- | gui/dpd/__init__.py | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/gui/dpd/__init__.py b/gui/dpd/__init__.py deleted file mode 100644 index 9009436..0000000 --- a/gui/dpd/__init__.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -# -# DPD Computation Engine module -# -# Copyright (c) 2017 Andreas Steger -# Copyright (c) 2018 Matthias P. Braendli -# -# http://www.opendigitalradio.org -# -# This file is part of ODR-DabMod. -# -# ODR-DabMod is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# ODR-DabMod is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ODR-DabMod. If not, see <http://www.gnu.org/licenses/>. - -from . import Capture -import numpy as np - -class DPD: - def __init__(self, plot_dir, samplerate=8192000): - self.samplerate = samplerate - - oversample = int(self.samplerate / 2048000) - self.T_F = oversample * 196608 # Transmission frame duration - self.T_NULL = oversample * 2656 # Null symbol duration - self.T_S = oversample * 2552 # Duration of OFDM symbols of indices l = 1, 2, 3,... L; - self.T_U = oversample * 2048 # Inverse of carrier spacing - self.T_C = oversample * 504 # Duration of cyclic prefix - - self.last_capture_info = {} - - port = 50055 - samples_to_capture = 81920 - self.capture = Capture.Capture(self.samplerate, port, samples_to_capture, plot_dir) - - def status(self): - r = {} - r['histogram'] = self.capture.bin_histogram() - r['capture'] = self.last_capture_info - return r - - def pointcloud_png(self): - return self.capture.pointcloud_png() - - def clear_accumulated(self): - return self.capture.clear_accumulated() - - def capture_calibration(self): - tx_ts, tx_median, rx_ts, rx_median, coarse_offset, correlation_coefficient = self.capture.calibrate() - result = {'status': "ok"} - result['tx_median'] = "{:.2f}dB".format(20*np.log10(tx_median)) - result['rx_median'] = "{:.2f}dB".format(20*np.log10(rx_median)) - result['tx_ts'] = tx_ts - result['rx_ts'] = rx_ts - result['coarse_offset'] = int(coarse_offset) - result['correlation'] = float(correlation_coefficient) - return result - - def capture_samples(self): - """Captures samples and store them in the accumulated samples, - returns a dict with some info""" - result = {} - try: - txframe_aligned, tx_ts, tx_median, rxframe_aligned, rx_ts, rx_median = self.capture.get_samples() - result['status'] = "ok" - result['length'] = len(txframe_aligned) - result['tx_median'] = float(tx_median) - result['rx_median'] = float(rx_median) - result['tx_ts'] = tx_ts - result['rx_ts'] = rx_ts - except ValueError as e: - result['status'] = "Capture failed: {}".format(e) - - self.last_capture_info = result - - # tx, rx, phase_diff, n_per_bin = extStat.extract(txframe_aligned, rxframe_aligned) - # off = SA.calc_offset(txframe_aligned) - # print("off {}".format(off)) - # tx_mer = MER.calc_mer(txframe_aligned[off:off + c.T_U], debug_name='TX') - # print("tx_mer {}".format(tx_mer)) - # rx_mer = MER.calc_mer(rxframe_aligned[off:off + c.T_U], debug_name='RX') - # print("rx_mer {}".format(rx_mer)) - # mse = np.mean(np.abs((txframe_aligned - rxframe_aligned) ** 2)) - # print("mse {}".format(mse)) |