2026-03-12 18:09:44 +03:00
2026-03-12 18:09:44 +03:00
2026-03-12 18:09:44 +03:00
new
2026-03-12 15:12:20 +03:00
new
2026-03-12 15:12:20 +03:00
new
2026-03-12 15:12:20 +03:00
2026-03-12 15:07:57 +03:00

RFG STM32 ADC Receiver GUI

PyQtGraph-приложение для чтения свипов из последовательного порта и отображения:

  • текущего свипа
  • водопада по свипам
  • FFT текущего свипа
  • B-scan по FFT

После рефакторинга проект разделен на пакет rfg_adc_plotter. Старый запуск через RFG_ADC_dataplotter.py сохранен как совместимый wrapper.

Структура

  • RFG_ADC_dataplotter.py — совместимый entrypoint
  • rfg_adc_plotter/cli.py — CLI-аргументы
  • rfg_adc_plotter/io/ — чтение порта и парсеры протоколов
  • rfg_adc_plotter/processing/ — FFT, нормировка, калибровка, поиск пиков
  • rfg_adc_plotter/state/ — runtime state и кольцевые буферы
  • rfg_adc_plotter/gui/pyqtgraph_backend.py — GUI на PyQtGraph
  • replay_pty.py — воспроизведение захвата через виртуальный PTY

Зависимости

Минимально нужны:

python3 -m venv .venv
. .venv/bin/activate
pip install numpy pyqtgraph PyQt5

Если pyserial не установлен, приложение попробует открыть порт через raw TTY.

Быстрый старт

Запуск через старый entrypoint:

.venv/bin/python RFG_ADC_dataplotter.py /dev/ttyACM0

Запуск напрямую через пакет:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0

Показать справку:

.venv/bin/python RFG_ADC_dataplotter.py --help

Примеры запуска

Обычный запуск с живого порта:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --baud 115200

Больше истории в водопаде и ограничение FPS:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --max-sweeps 400 --max-fps 20

Фиксированный диапазон по оси Y:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --ylim -1000,1000

С включенной нормировкой simple:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --norm-type simple

Режим измерения ширины главного пика FFT:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --calibrate

Поиск топ-3 пиков относительно rolling median reference:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --peak_search --peak_ref_window 1.5

Вычитание среднего спектра по последним секундам:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --spec-mean-sec 3

Протоколы ввода

ASCII-протокол по умолчанию:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0

Legacy binary:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --bin

Logscale binary с парой int32:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --logscale

Logscale binary 16-bit x2:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_16_bit_x2

Тестовый парсер для экспериментального 16-bit x2 потока:

.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_test

Локальная проверка через replay_pty

Если есть лог-файл захвата, его можно воспроизвести как виртуальный последовательный порт.

В первом терминале:

.venv/bin/python replay_pty.py my_picocom_logfile.txt --pty /tmp/ttyVIRT0 --speed 1.0

Во втором терминале:

.venv/bin/python -m rfg_adc_plotter.main /tmp/ttyVIRT0

Максимально быстрый replay:

.venv/bin/python replay_pty.py my_picocom_logfile.txt --pty /tmp/ttyVIRT0 --speed 0

Удаленный захват по SSH

В приложении SSH-источник не встроен. Для удаленной проверки нужно сначала получить поток или лог на локальную машину, а затем либо:

  • запускать GUI напрямую на локальном PTY
  • сохранять поток в файл и воспроизводить его через replay_pty.py

Пример команды для ручной диагностики удаленного устройства:

ssh 192.148.0.148 'ls -l /dev/ttyACM0'

Если на удаленной машине есть доступ к потоку, удобнее сохранять его в файл и уже этот файл гонять локально через replay_pty.py.

Проверка и тесты

Синтаксическая проверка:

python3 -m compileall RFG_ADC_dataplotter.py replay_pty.py rfg_adc_plotter tests

Запуск тестов:

.venv/bin/python -m unittest discover -s tests -v

Замечания

  • Поддерживается только PyQtGraph backend.
  • --backend mpl оставлен только для совместимости CLI и завершится ошибкой.
  • Каталоги sample_data/ и локальные логи добавлены в .gitignore и не считаются частью обязательного tracked-состояния репозитория.
Description
GUI for ADC для радара, основанного на stm32 MCU. данные принимаются по Virtual Com Port (VCP) over USB
Readme 3.2 MiB
Languages
Python 100%