new project structure

This commit is contained in:
awe
2026-02-03 14:17:06 +03:00
parent 0332ebdd98
commit 2af6c8a486
18 changed files with 8334 additions and 1587 deletions

187
README.md Normal file
View File

@ -0,0 +1,187 @@
# 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.