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:
|
if self.config.pulse_num >= 2**16 - 1:
|
||||||
raise ValueError("pulse_num слишком большой")
|
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 слишком большой")
|
raise ValueError("pulse_height слишком большой")
|
||||||
|
|
||||||
|
|
||||||
@ -500,28 +500,14 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
def update_pulse_limits(self):
|
def update_pulse_limits(self):
|
||||||
# re-calc limits
|
# 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
|
# nmax -> pulse_period limit
|
||||||
self.set_max_pulse_period(self.nmax * self.window_size)
|
self.set_max_pulse_period(self.nmax * self.window_size)
|
||||||
self.set_max_pulse_width(self.nmax * self.window_size)
|
self.set_max_pulse_width(self.nmax * self.window_size)
|
||||||
# accum_width + adc_width -> max pulse num
|
# 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
|
# dac_width -> max pulse height
|
||||||
self.set_max_pulse_height(2 ** self.dac_dw - 1)
|
self.set_max_pulse_height(2 ** self.dac_dw - 1)
|
||||||
|
|
||||||
@ -578,13 +564,13 @@ class MainWindow(QMainWindow):
|
|||||||
self.reference_curve = self.graph_widget.plot(
|
self.reference_curve = self.graph_widget.plot(
|
||||||
[],
|
[],
|
||||||
name="Reference",
|
name="Reference",
|
||||||
color="b"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
self.graph_layout.addWidget(self.graph_widget)
|
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(
|
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.checkbox_draw_reference.stateChanged.connect(
|
||||||
self.update_reference_graph)
|
self.update_reference_graph)
|
||||||
@ -603,7 +589,7 @@ class MainWindow(QMainWindow):
|
|||||||
def run_measurement(self):
|
def run_measurement(self):
|
||||||
if self.measurement_thread is not None:
|
if self.measurement_thread is not None:
|
||||||
if self.measurement_thread.isRunning():
|
if self.measurement_thread.isRunning():
|
||||||
self.set_measurement_status("Измерение уже выполняется")
|
self.set_measurement_status("Измерение выполняется")
|
||||||
return
|
return
|
||||||
|
|
||||||
config = self.build_reflectometer_config()
|
config = self.build_reflectometer_config()
|
||||||
@ -660,21 +646,20 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
def on_data_received(self, data: list[int]):
|
def on_data_received(self, data: list[int]):
|
||||||
self.data = data
|
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.draw_main_graph()
|
||||||
self.update_reference_graph()
|
self.update_reference_graph()
|
||||||
|
|
||||||
if data:
|
if data:
|
||||||
self.set_measurement_status(
|
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:
|
else:
|
||||||
self.set_measurement_status("Готово, но данные пустые")
|
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):
|
def on_measurement_error(self, message: str):
|
||||||
self.set_measurement_status(f"Ошибка: {message}")
|
self.set_measurement_status(f"Ошибка: {message}")
|
||||||
@ -688,12 +673,7 @@ class MainWindow(QMainWindow):
|
|||||||
self.measurement_worker.stop()
|
self.measurement_worker.stop()
|
||||||
|
|
||||||
def set_measurement_status(self, text: str):
|
def set_measurement_status(self, text: str):
|
||||||
print(text)
|
self.label_status.setText(text)
|
||||||
|
|
||||||
# Если отдельного label под статус измерения пока нет,
|
|
||||||
# можно временно использовать label_ping_status.
|
|
||||||
if hasattr(self, "label_ping_status"):
|
|
||||||
self.label_ping_status.setText(text)
|
|
||||||
|
|
||||||
def draw_main_graph(self):
|
def draw_main_graph(self):
|
||||||
if not self.data:
|
if not self.data:
|
||||||
@ -729,8 +709,11 @@ class MainWindow(QMainWindow):
|
|||||||
def build_reference_data(self, length: int) -> list[int]:
|
def build_reference_data(self, length: int) -> list[int]:
|
||||||
reference = [0] * length
|
reference = [0] * length
|
||||||
|
|
||||||
reference[0:(self.pulse_width // self.window_size + 1)
|
actual_pulse_width = round(
|
||||||
] = [self.pulse_height, ] * (self.pulse_width // self.window_size)
|
(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
|
return reference
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tab">
|
<widget class="QWidget" name="tab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
@ -413,6 +413,9 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSlider" name="slider_pulse_num">
|
<widget class="QSlider" name="slider_pulse_num">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Orientation::Horizontal</enum>
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -427,6 +430,29 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_13">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Статус:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_status">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkbox_draw_reference">
|
<widget class="QCheckBox" name="checkbox_draw_reference">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|||||||
Reference in New Issue
Block a user