Files
RFG_stm32_ADC_receiver_GUI/README.md
2026-02-03 14:17:06 +03:00

188 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.