2026-02-03 19:06:26 +03:00
2026-02-03 19:06:26 +03:00
2026-02-03 14:17:06 +03:00
2026-02-03 14:17:06 +03:00
2026-02-03 14:17:06 +03:00
2026-02-03 14:17:06 +03:00

RFG STM32 ADC Receiver GUI

Реалтайм-плоттер для визуализации данных FMCW радара, получаемых через виртуальный COM-порт от STM32 ADC.

Описание

Приложение визуализирует данные в реальном времени, отображая 6 синхронизированных графиков:

  1. Сырые данные - график последнего полученного свипа
  2. Водопад сырых данных - временная серия последних N свипов
  3. FFT спектр - спектр текущего свипа в частотной области
  4. B-scan - спектрограмма (водопад FFT)
  5. Фаза спектра - развернутая фаза для анализа расстояния
  6. Водопад фазы - временная эволюция фазы

Возможности

  • Высокопроизводительная визуализация в реальном времени
  • Два бэкенда визуализации: matplotlib (совместимость) и pyqtgraph (скорость)
  • Автоматическая обработка фазы для FMCW радара
  • Преобразование фазы в расстояние
  • Поддержка pyserial или raw TTY доступа
  • Заполнение пропущенных точек (режим --fancy)
  • Инверсия сигнала при отрицательном уровне
  • Диагностика потерь данных

Установка

Минимальные требования

pip install -r requirements.txt

Зависимости

Обязательные:

  • numpy - обработка массивов и FFT
  • matplotlib - визуализация

Опциональные (рекомендуется):

  • 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
Readme 2.1 MiB
Languages
Python 100%