sw: fix reference and some options
This commit is contained in:
@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user