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 + + + + Статус: + + + + + + + - + + + + +