aboutsummaryrefslogtreecommitdiffstats
path: root/gui/dpd/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'gui/dpd/__init__.py')
-rw-r--r--gui/dpd/__init__.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/gui/dpd/__init__.py b/gui/dpd/__init__.py
new file mode 100644
index 0000000..c0c76cc
--- /dev/null
+++ b/gui/dpd/__init__.py
@@ -0,0 +1,60 @@
+# -*- 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
+
+class DPD:
+ def __init__(self, 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
+
+ port = 50055
+ samples_to_capture = 81920
+ self.capture = Capture.Capture(self.samplerate, port, samples_to_capture)
+
+ def capture_samples(self):
+ """Captures samples and store them in the accumulated samples,
+ returns a string with some info"""
+ txframe_aligned, tx_ts, tx_median, rxframe_aligned, rx_ts, rx_median = self.capture.get_samples()
+
+ num_acc = self.capture.num_accumulated()
+
+ return "Captured {} with median {}/{}, accumulated {} samples".format(
+ len(txframe_aligned), tx_median, rx_median, num_acc)
+
+ # 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))