# 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) - ✅ Инверсия сигнала при отрицательном уровне - ✅ Диагностика потерь данных ## Установка ### Минимальные требования ```bash pip install -r requirements.txt ``` ### Зависимости **Обязательные:** - `numpy` - обработка массивов и FFT - `matplotlib` - визуализация **Опциональные (рекомендуется):** - `pyserial` - доступ к serial порту (обязательно для Windows) - `pyqtgraph` + `PyQt5` или `PySide6` - быстрый бэкенд визуализации ## Использование ### Базовый запуск ```bash python -m rfg_adc_plotter.cli /dev/ttyACM0 ``` ### С параметрами ```bash 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 ```bash python -m rfg_adc_plotter.cli /dev/ttyACM0 --backend pg ``` ### Linux с raw TTY (без pyserial) ```bash python -m rfg_adc_plotter.cli /dev/ttyACM0 --backend mpl ``` ### Windows ```bash python -m rfg_adc_plotter.cli COM3 --backend pg --baud 115200 ``` ### С высоким разрешением времени ```bash python -m rfg_adc_plotter.cli /dev/ttyACM0 --max-sweeps 500 --max-fps 60 ``` ### С заполнением пропусков и фиксированным Y ```bash python -m rfg_adc_plotter.cli /dev/ttyACM0 --fancy --ylim -2000,2000 ``` ## Лицензия См. LICENSE файл в корне проекта. ## Авторы Разработано для визуализации данных FMCW радара с STM32 ADC.