3a072f0298e5a43eeb2658e689823d34ed3dda62
RFG STM32 ADC Receiver GUI
Реалтайм-плоттер для визуализации данных FMCW радара, получаемых через виртуальный COM-порт от STM32 ADC.
Описание
Приложение визуализирует данные в реальном времени, отображая 6 синхронизированных графиков:
- Сырые данные - график последнего полученного свипа
- Водопад сырых данных - временная серия последних N свипов
- FFT спектр - спектр текущего свипа в частотной области
- B-scan - спектрограмма (водопад FFT)
- Фаза спектра - развернутая фаза для анализа расстояния
- Водопад фазы - временная эволюция фазы
Возможности
- ✅ Высокопроизводительная визуализация в реальном времени
- ✅ Два бэкенда визуализации: matplotlib (совместимость) и pyqtgraph (скорость)
- ✅ Автоматическая обработка фазы для FMCW радара
- ✅ Преобразование фазы в расстояние
- ✅ Поддержка pyserial или raw TTY доступа
- ✅ Заполнение пропущенных точек (режим --fancy)
- ✅ Инверсия сигнала при отрицательном уровне
- ✅ Диагностика потерь данных
Установка
Минимальные требования
pip install -r requirements.txt
Зависимости
Обязательные:
numpy- обработка массивов и FFTmatplotlib- визуализация
Опциональные (рекомендуется):
pyserial- доступ к serial порту (обязательно для Windows)pyqtgraph+PyQt5илиPySide6- быстрый бэкенд визуализации
Использование
Базовый запуск
python -m rfg_adc_plotter.cli /dev/ttyACM0
С параметрами
python -m rfg_adc_plotter.cli /dev/ttyACM0 \
--baud 115200 \
--max-sweeps 200 \
--max-fps 30 \
--backend pg \
--fancy
Параметры командной строки
port- путь к порту (например/dev/ttyACM0,COM3)--baud- скорость порта (по умолчанию 115200)--max-sweeps- количество свипов в водопаде (по умолчанию 200)--max-fps- ограничение частоты отрисовки (по умолчанию 30)--cmap- цветовая карта для водопадов (по умолчанию viridis)--spec-clip- процентильная обрезка контраста B-scan (по умолчанию 2,98)--title- заголовок окна (по умолчанию "ADC Sweeps")--fancy- заполнение пропущенных точек средними значениями--ylim- фиксированные пределы по Y (формат: min,max)--backend- бэкенд визуализации:auto- автоматический выбор (сначала pyqtgraph, fallback на matplotlib)pg- pyqtgraph (быстрее)mpl- matplotlib (совместимее)
Формат данных
Приложение ожидает текстовые строки через serial порт:
Sweep_start
s 0 1234
s 1 1256
s 2 1278
...
Sweep_start
s 0 1235
...
Sweep_start- начало нового свипаs X Y- точка данных (индекс X, значение Y), целые числа со знаком
Архитектура проекта
rfg_adc_plotter/
├── __init__.py
├── config.py # Константы и типы
├── cli.py # Точка входа CLI
├── data_acquisition/
│ ├── __init__.py
│ ├── serial_io.py # Serial порт I/O
│ └── sweep_reader.py # Фоновый поток чтения данных
├── signal_processing/
│ ├── __init__.py
│ └── phase_analysis.py # Обработка фазы
├── visualization/
│ ├── __init__.py
│ ├── matplotlib_backend.py # Matplotlib визуализация
│ └── pyqtgraph_backend.py # PyQtGraph визуализация
└── utils/
├── __init__.py
└── formatting.py # Утилиты форматирования
Технические особенности
Оптимизации производительности
- Фоновый поток для чтения и парсинга данных
- Векторизованные numpy операции
- Кольцевые буферы для водопадов
- Неблокирующее чтение из serial порта
- Буферизация с увеличенным размером (256KB)
Обработка сигналов
- FFT анализ: окно Хэннинга, длина 1024
- Phase unwrapping: адаптивный алгоритм с порогом 0.8π
- Преобразование фазы в расстояние: формула Δl = φ × c / (4π × ν)
- Инверсия сигнала: автоматическая при среднем уровне < порога
Диагностика
Каждые 10 секунд в stderr выводится диагностическая информация:
- Номер свипа
- Среднее количество валидных точек
- Количество принятых строк
- Ошибки парсинга
- Ошибки чтения
- Размер буфера
- Потерянные свипы
Примеры использования
Linux с pyserial
python -m rfg_adc_plotter.cli /dev/ttyACM0 --backend pg
Linux с raw TTY (без pyserial)
python -m rfg_adc_plotter.cli /dev/ttyACM0 --backend mpl
Windows
python -m rfg_adc_plotter.cli COM3 --backend pg --baud 115200
С высоким разрешением времени
python -m rfg_adc_plotter.cli /dev/ttyACM0 --max-sweeps 500 --max-fps 60
С заполнением пропусков и фиксированным Y
python -m rfg_adc_plotter.cli /dev/ttyACM0 --fancy --ylim -2000,2000
Лицензия
См. LICENSE файл в корне проекта.
Авторы
Разработано для визуализации данных FMCW радара с STM32 ADC.
Description
GUI for ADC для радара, основанного на stm32 MCU. данные принимаются по Virtual Com Port (VCP) over USB
Languages
Python
100%