Files
RFG_stm32_ADC_receiver_GUI/README.md
2026-04-10 14:46:58 +03:00

200 lines
6.1 KiB
Markdown
Raw 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
PyQtGraph-приложение для чтения свипов из последовательного порта и отображения:
- текущего свипа
- водопада по свипам
- FFT текущего свипа
- B-scan по FFT
После рефакторинга проект разделен на пакет `rfg_adc_plotter`. Старый запуск через `RFG_ADC_dataplotter.py` сохранен как совместимый wrapper.
## Структура
- `RFG_ADC_dataplotter.py` — совместимый entrypoint
- `rfg_adc_plotter/cli.py` — CLI-аргументы
- `rfg_adc_plotter/io/` — чтение порта и парсеры протоколов
- `rfg_adc_plotter/processing/` — FFT, нормировка, калибровка, поиск пиков
- `rfg_adc_plotter/state/` — runtime state и кольцевые буферы
- `rfg_adc_plotter/gui/pyqtgraph_backend.py` — GUI на PyQtGraph
- `replay_pty.py` — воспроизведение захвата через виртуальный PTY
## Зависимости
Минимально нужны:
```bash
python3 -m venv .venv
. .venv/bin/activate
pip install numpy pyqtgraph PyQt5
```
Если `pyserial` не установлен, приложение попробует открыть порт через raw TTY.
## Быстрый старт
Запуск через старый entrypoint:
```bash
.venv/bin/python RFG_ADC_dataplotter.py /dev/ttyACM0
```
Запуск напрямую через пакет:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0
```
Показать справку:
```bash
.venv/bin/python RFG_ADC_dataplotter.py --help
```
## Примеры запуска
Обычный запуск с живого порта:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --baud 115200
```
Больше истории в водопаде и ограничение FPS:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --max-sweeps 400 --max-fps 20
```
Фиксированный диапазон по оси Y:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --ylim -1000,1000
```
С включенной нормировкой `simple`:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --norm-type simple
```
Режим измерения ширины главного пика FFT:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --calibrate
```
Поиск топ-3 пиков относительно rolling median reference:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --peak_search --peak_ref_window 1.5
```
Вычитание среднего спектра по последним секундам:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --spec-mean-sec 3
```
## Протоколы ввода
ASCII-протокол по умолчанию:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0
```
Legacy binary:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --bin
```
`--bin` также понимает `tty`-поток CH1/CH2 из `kamil_adc` (`tty:/tmp/ttyADC_data`) в 8-байтном формате `0x000A,step,ch1_i16,ch2_i16`.
Logscale binary с парой `int32`:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --logscale
```
Complex binary `16-bit x2`:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_16_bit_x2
```
Тестовый парсер для экспериментального `16-bit x2` потока:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_test
```
Комплексный ASCII-поток `step real imag`:
```bash
.venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_complex_ascii
```
## Локальная проверка через replay_pty
Если есть лог-файл захвата, его можно воспроизвести как виртуальный последовательный порт.
В первом терминале:
```bash
.venv/bin/python replay_pty.py my_picocom_logfile.txt --pty /tmp/ttyVIRT0 --speed 1.0
```
Во втором терминале:
```bash
.venv/bin/python -m rfg_adc_plotter.main /tmp/ttyVIRT0
```
Максимально быстрый replay:
```bash
.venv/bin/python replay_pty.py my_picocom_logfile.txt --pty /tmp/ttyVIRT0 --speed 0
```
## Удаленный захват по SSH
В приложении SSH-источник не встроен. Для удаленной проверки нужно сначала получить поток или лог на локальную машину, а затем либо:
- запускать GUI напрямую на локальном PTY
- сохранять поток в файл и воспроизводить его через `replay_pty.py`
Пример команды для ручной диагностики удаленного устройства:
```bash
ssh 192.148.0.148 'ls -l /dev/ttyACM0'
```
Если на удаленной машине есть доступ к потоку, удобнее сохранять его в файл и уже этот файл гонять локально через `replay_pty.py`.
Для локального `tty`-потока из `kamil_adc` используйте:
```bash
.venv/bin/python -m rfg_adc_plotter.main /tmp/ttyADC_data --bin
```
## Проверка и тесты
Синтаксическая проверка:
```bash
python3 -m compileall RFG_ADC_dataplotter.py replay_pty.py rfg_adc_plotter tests
```
Запуск тестов:
```bash
.venv/bin/python -m unittest discover -s tests -v
```
## Замечания
- Поддерживается только PyQtGraph backend.
- `--backend mpl` оставлен только для совместимости CLI и завершится ошибкой.
- Каталоги `sample_data/` и локальные логи добавлены в `.gitignore` и не считаются частью обязательного tracked-состояния репозитория.