diff --git a/software/gui.py b/software/gui.py
index 9f473d3..17658c9 100644
--- a/software/gui.py
+++ b/software/gui.py
@@ -198,7 +198,7 @@ class ReflectometerWorker(QObject):
if self.config.pulse_num >= 2**16 - 1:
raise ValueError("pulse_num слишком большой")
- if self.config.pulse_height >= 2**self.config.dac_bits - 1:
+ if self.config.pulse_height > 2**self.config.dac_bits - 1:
raise ValueError("pulse_height слишком большой")
@@ -500,28 +500,14 @@ class MainWindow(QMainWindow):
def update_pulse_limits(self):
# re-calc limits
- """
- Сюда потом можно дописать формулы для пересчета максимумов.
- Например:
- max_pulse_height = 2 ** self.dac_dw - 1
- self.set_max_pulse_height(max_pulse_height)
-
- max_pulse_period = self.nmax * self.window_size
- self.set_max_pulse_period(max_pulse_period)
-
- max_pulse_width = ...
- self.set_max_pulse_width(max_pulse_width)
-
- max_pulse_num = ...
- self.set_max_pulse_num(max_pulse_num)
- """
# nmax -> pulse_period limit
self.set_max_pulse_period(self.nmax * self.window_size)
self.set_max_pulse_width(self.nmax * self.window_size)
# accum_width + adc_width -> max pulse num
- self.set_max_pulse_num(2 ** (self.accum_width - self.adc_dw) - 1)
+ self.set_max_pulse_num(
+ 2 ** (self.accum_width - self.adc_dw - math.ceil(math.log2(self.window_size))) - 1)
# dac_width -> max pulse height
self.set_max_pulse_height(2 ** self.dac_dw - 1)
@@ -578,13 +564,13 @@ class MainWindow(QMainWindow):
self.reference_curve = self.graph_widget.plot(
[],
name="Reference",
- color="b"
)
self.graph_layout.addWidget(self.graph_widget)
- self.graph_curve = self.graph_widget.plot([], pen=pg.mkPen(width=2))
+ self.graph_curve = self.graph_widget.plot(
+ [], pen=pg.mkPen(width=2, color="b"))
self.reference_curve = self.graph_widget.plot(
- [], pen=pg.mkPen(style=Qt.PenStyle.DashLine))
+ [], pen=pg.mkPen(style=Qt.PenStyle.DashLine, color="g"))
self.checkbox_draw_reference.stateChanged.connect(
self.update_reference_graph)
@@ -603,7 +589,7 @@ class MainWindow(QMainWindow):
def run_measurement(self):
if self.measurement_thread is not None:
if self.measurement_thread.isRunning():
- self.set_measurement_status("Измерение уже выполняется")
+ self.set_measurement_status("Измерение выполняется")
return
config = self.build_reflectometer_config()
@@ -660,21 +646,20 @@ class MainWindow(QMainWindow):
def on_data_received(self, data: list[int]):
self.data = data
+ # normalize
+ for i in range(len(data)):
+ self.data[i] /= (self.window_size * self.pulse_num)
+ self.data[i] -= 2 ** (self.adc_dw - 1) + 1
self.draw_main_graph()
self.update_reference_graph()
if data:
self.set_measurement_status(
- f"Готово. Samples: {len(data)}, min: {min(data)}, max: {max(data)}"
+ f"Готово. smp: {len(data)}, min: {min(data)}, max: {max(data)}"
)
else:
- self.set_measurement_status("Готово, но данные пустые")
-
- # normalize
- for i in range(len(data)):
- self.data[i] -= 2 ** (self.adc_dw - 1)
- self.data[i] /= (self.window_size * self.pulse_num)
+ self.set_measurement_status("Данные пустые")
def on_measurement_error(self, message: str):
self.set_measurement_status(f"Ошибка: {message}")
@@ -688,12 +673,7 @@ class MainWindow(QMainWindow):
self.measurement_worker.stop()
def set_measurement_status(self, text: str):
- print(text)
-
- # Если отдельного label под статус измерения пока нет,
- # можно временно использовать label_ping_status.
- if hasattr(self, "label_ping_status"):
- self.label_ping_status.setText(text)
+ self.label_status.setText(text)
def draw_main_graph(self):
if not self.data:
@@ -729,8 +709,11 @@ class MainWindow(QMainWindow):
def build_reference_data(self, length: int) -> list[int]:
reference = [0] * length
- reference[0:(self.pulse_width // self.window_size + 1)
- ] = [self.pulse_height, ] * (self.pulse_width // self.window_size)
+ actual_pulse_width = round(
+ (self.pulse_width * self.adc_dac_ratio) / self.window_size)
+
+ reference[0:actual_pulse_width] = [
+ self.pulse_height - 2 ** (self.adc_dw - 1) + 1, ] * (actual_pulse_width - 1)
return reference
diff --git a/software/reflectometer.ui b/software/reflectometer.ui
index 120c512..96ac6f0 100644
--- a/software/reflectometer.ui
+++ b/software/reflectometer.ui
@@ -23,7 +23,7 @@
-
- 0
+ 1
@@ -413,6 +413,9 @@
-
+
+ 1
+
Qt::Orientation::Horizontal
@@ -427,6 +430,29 @@
+ -
+
+
-
+
+
+
+ true
+
+
+
+ Статус:
+
+
+
+ -
+
+
+ -
+
+
+
+
+
-