From e9c506173d8b4f32a504029d296b0a793b5f125a Mon Sep 17 00:00:00 2001 From: Theodor Chikin Date: Sun, 21 Dec 2025 14:28:19 +0300 Subject: [PATCH] implemented dynamic waterfall scaling --- RFG_ADC_dataplotter.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/RFG_ADC_dataplotter.py b/RFG_ADC_dataplotter.py index f094220..42a46bd 100755 --- a/RFG_ADC_dataplotter.py +++ b/RFG_ADC_dataplotter.py @@ -237,13 +237,14 @@ class SerialChunkReader: class SweepReader(threading.Thread): """Фоновый поток: читает строки, формирует завершённые свипы и кладёт в очередь.""" - def __init__(self, port_path: str, baud: int, out_queue: Queue, stop_event: threading.Event): + def __init__(self, port_path: str, baud: int, out_queue: Queue, stop_event: threading.Event, fancy: bool = False): super().__init__(daemon=True) self._port_path = port_path self._baud = baud self._q = out_queue self._stop = stop_event self._src: Optional[SerialLineSource] = None + self._fancy = bool(fancy) def _finalize_current(self, xs, ys): if not xs: @@ -261,6 +262,20 @@ class SweepReader(threading.Thread): for x, y in zip(xs, ys): if 0 <= x < width: sweep[x] = float(y) + # Дополнительная обработка пропусков: при --fancy заполняем внутренние разрывы + if self._fancy: + try: + known = ~np.isnan(sweep) + if np.any(known): + known_idx = np.nonzero(known)[0] + # Для каждой пары соседних известных индексов заполним промежуток средним значением + for i0, i1 in zip(known_idx[:-1], known_idx[1:]): + if i1 - i0 > 1: + avg = (sweep[i0] + sweep[i1]) * 0.5 + sweep[i0 + 1 : i1] = avg + except Exception: + # В случае ошибки просто оставляем как есть + pass # Кладём готовый свип (если очередь полна — выбрасываем самый старый) try: self._q.put_nowait(sweep) @@ -366,6 +381,11 @@ def main(): ), ) parser.add_argument("--title", default="ADC Sweeps", help="Заголовок окна") + parser.add_argument( + "--fancy", + action="store_true", + help="Заполнять выпавшие точки средними значениями между соседними", + ) parser.add_argument( "--ylim", type=str, @@ -402,7 +422,7 @@ def main(): # Очередь завершённых свипов и поток чтения q: Queue[np.ndarray] = Queue(maxsize=1000) stop_event = threading.Event() - reader = SweepReader(args.port, args.baud, q, stop_event) + reader = SweepReader(args.port, args.baud, q, stop_event, fancy=bool(args.fancy)) reader.start() # Графика @@ -692,7 +712,7 @@ def run_pyqtgraph(args): # Очередь завершённых свипов и поток чтения q: Queue[np.ndarray] = Queue(maxsize=1000) stop_event = threading.Event() - reader = SweepReader(args.port, args.baud, q, stop_event) + reader = SweepReader(args.port, args.baud, q, stop_event, fancy=bool(args.fancy)) reader.start() # Настройки скорости