From 9b5e39f3dfe395723a018f342e769bbab76f28c8 Mon Sep 17 00:00:00 2001 From: Phil Date: Tue, 26 May 2026 16:46:51 +0300 Subject: [PATCH] sw: add normalization --- software/gui.py | 39 ++++++++++++++++++--------------------- software/reflectometer.ui | 24 +++++++++++++++++++++--- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/software/gui.py b/software/gui.py index 5d90203..9f473d3 100644 --- a/software/gui.py +++ b/software/gui.py @@ -31,7 +31,7 @@ class ReflectometerConfig: pulse_height: int pulse_num: int - dac_adc_ratio: float = 0.52 + adc_dac_ratio: float = 0.52 socket_timeout_sec: float = 2.0 @@ -108,7 +108,7 @@ class ReflectometerWorker(QObject): output += 0b10001000.to_bytes(1, "little") pulse_period_adc = ( - int(self.config.pulse_period * self.config.dac_adc_ratio) + int(self.config.pulse_period * self.config.adc_dac_ratio) // self.config.window_size ) * self.config.window_size @@ -126,7 +126,7 @@ class ReflectometerWorker(QObject): def _recv_data(self) -> list[int]: packet_count = math.ceil( ( - self.config.dac_adc_ratio + self.config.adc_dac_ratio * self.config.pulse_period / self.config.window_size * self.config.data_width @@ -135,7 +135,7 @@ class ReflectometerWorker(QObject): ) expected_length = math.ceil( - self.config.dac_adc_ratio + self.config.adc_dac_ratio * self.config.pulse_period / self.config.window_size ) @@ -227,7 +227,7 @@ class MainWindow(QMainWindow): self.nmax = 4096 self.packet_size = 1024 self.window_size = 65 - self.dac_adc_ration = 0.52 + self.adc_dac_ration = 0.52 self.accum_width = 32 # setup @@ -239,7 +239,7 @@ class MainWindow(QMainWindow): self.data = [] - self.dac_adc_ratio = 0.52 + self.adc_dac_ratio = 0.52 self.measurement_thread = None self.measurement_worker = None @@ -455,8 +455,8 @@ class MainWindow(QMainWindow): ) self._bind_spinbox_setting( - name="dac_adc_ratio", - box=self.box_dac_adc_ratio, + name="adc_dac_ratio", + box=self.box_adc_dac_ratio, ) self._bind_spinbox_setting( @@ -578,6 +578,7 @@ class MainWindow(QMainWindow): self.reference_curve = self.graph_widget.plot( [], name="Reference", + color="b" ) self.graph_layout.addWidget(self.graph_widget) @@ -654,7 +655,7 @@ class MainWindow(QMainWindow): pulse_height=self.pulse_height, pulse_num=self.pulse_num, - dac_adc_ratio=self.dac_adc_ratio, + adc_dac_ratio=self.adc_dac_ratio, ) def on_data_received(self, data: list[int]): @@ -670,6 +671,11 @@ class MainWindow(QMainWindow): 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) + def on_measurement_error(self, message: str): self.set_measurement_status(f"Ошибка: {message}") @@ -721,20 +727,11 @@ class MainWindow(QMainWindow): self.reference_curve.setData(x, reference_data) def build_reference_data(self, length: int) -> list[int]: - """ - Тут потом опишешь свою логику построения эталонного сигнала. - - Главное: вернуть массив такой же или нужной тебе длины. - Например: - reference = [0] * length - reference[10:100] = ... - return reference - """ - - # TODO: сюда вставить свою логику эталонного графика - reference = [0] * length + reference[0:(self.pulse_width // self.window_size + 1) + ] = [self.pulse_height, ] * (self.pulse_width // self.window_size) + return reference diff --git a/software/reflectometer.ui b/software/reflectometer.ui index 654da3c..120c512 100644 --- a/software/reflectometer.ui +++ b/software/reflectometer.ui @@ -23,7 +23,7 @@ - 1 + 0 @@ -59,6 +59,9 @@ + + bits + DAC data width: @@ -75,6 +78,9 @@ + + bits + ADC data width: @@ -91,6 +97,9 @@ + + bits + Accum width: @@ -100,15 +109,18 @@ 64 + + 8 + 32 - + - DAC:ADC clk ratio: + ADC:DAC clk ratio: 0.200000000000000 @@ -116,6 +128,9 @@ 3.000000000000000 + + 0.010000000000000 + 0.520000000000000 @@ -155,6 +170,9 @@ + + bytes + Packet size: