Files
SDR-Rover/docs/lab049_audit.md
2026-09-08 13:26:06 +03:00

87 lines
7.0 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.
# Lab049: аудит исходного незакоммиченного варианта
8 сентября 2026 года. Корень `C:/Users/user/Desktop/projects/SDR_Rover`,
ветка `main`, HEAD `ac6cc792b896e34f7dd6d291955a0387fdafcf41`.
До работы уже существовали незакоммиченные реализация Lab049, тесты,
`data/processed/lab049/result.json`, документ состояния и запись 036 журнала.
Прежний JSON сохранён; он относится к выровненным кадрам и не является
результатом полного независимого приёмника.
## Карта архитектуры
1. Базовый Rs задан в `experiments/lab043_hackrf_bpsk.py`: 20 000 символов/с.
Lab044 и Lab045 наследуют его, Lab047 явно проверяет аппаратную точку.
2. В Lab043 `SAMPLES_PER_SYMBOL = SAMPLE_RATE_HZ // SYMBOL_RATE`; Lab047
отдельно фиксирует 400. Lab049 теперь отвергает дробные частоты и
нецелое отношение, не округляя вход.
3. Жёсткие зависимости Lab043: `_refine_frame_start`, `_matched_filter_taps`,
`_matched_waveform`, `_preamble_timing_offset`, `_estimate_cfo_gain`,
`_evaluate_symbols`. Lab044: `_scale_and_carrier`,
`_preamble_reference_samples`. Lab045: длительности TransmissionPlan;
Lab046B: `_extract_soft_window` и `_decode_iq_candidate`. Временные шкалы
используют Rs, фильтры и индексы — samples/symbol. В локальном поиске
также есть фиксированные пределы ±800 и ±2000 выборок; они сохранены.
4. `shape_frame_like_lab042`, RRC-фильтр ядра, преобразования бит/BPSK,
фрагментация, packet/PHY header, FEC, перемежитель, CRC и сборка объекта
уже параметрические либо вообще не зависят от Rs.
5. `protocol/priority_scheduler.py`: строгий приоритет четырёх классов,
непрерываемая передача пакета и `LATEST_STATE` для ожидающих состояний.
Lab034–Lab036 добавили удаление устаревших изображений и изоляцию
видеокадров в собственных блоках FEC; это внешнее стирающее кодирование
видео, не новый свёрточный FEC Lab045.
6. Минимальная доработка: адаптер скорости и чтения синтетического IQ к
`lab046c_offline_recovery.stream_process_capture`, который используется
Lab048; разделение ожидания/доставки и активного окна/опустошения очереди.
Новый планировщик и изменения `protocol/` не потребовались.
## Проверка Lab033–Lab041
Сверены сохранённые отчёты этих лабораторий и связанные модули.
Lab033 подтверждает строгий приоритет и отдельно считает ожидание начала
и завершение передачи. Lab034: frame-aligned FEC изолирует удаляемое
изображение, начатый пакет не прерывается. Lab035–Lab036 ограничивают возраст
изображения и число ожидающих кадров. Lab037 подтверждает вставку управления
между пакетами VIDEO. Lab038–Lab040 добавляют failsafe, аварийную защёлку,
повторы и ACK; Lab041 — сеансы/перезапуски. Эти механизмы безопасности
в Lab049 не заменены и не заявлены как аппаратно проверенные.
CONTROL взят из последнего Lab041: `ControlStateMessage`, 36 байт, 20 Гц;
с 32-байтным LinkPacket — 68 байт и 10 880 бит/с до физического кодирования.
TELEMETRY наследуется из Lab037 через Lab038–Lab041: синтетические 64 байта,
10 Гц, с LinkPacket — 96 байт и 7680 бит/с. Отдельного формата физических
измерений телеметрии эти лаборатории не задают.
## Воспроизведённые несоответствия
Проверки выполнены независимыми `verifier` и `adversary`, без правок с их
стороны и без оборудования.
- Исходный `receive_iq_frame`: идеальный кадр 100 ксимв/с проходит CRC,
добавление 240 нулевых выборок перед ним даёт `PHY=False, CRC=NOT_REACHED`.
Поиск ограничивался двумя символами от известной TX-границы.
- Добавление +10 Гц к тому же кадру даёт `PHY=True, CRC=NOT_REACHED`;
+100 Гц — `PHY=False`. Остаточная частота не оценивалась.
- При 100 ксимв/с старый отчёт CONTROL max 47,980 мс описывал начало,
а получение пакета занимает 105,640 мс; пропущены 6 сроков CONTROL.
EMERGENCY: 30,240 мс до начала, 87,900 мс до получения — пропущен срок 50 мс.
- При 200 ксимв/с EMERGENCY через 1 мкс после VIDEO доставляется через
57,659 мс, а не за 50 мс. Штатный failsafe до получения пакета остаётся
в `normal`. Блокировка 28,83 мс и доставка почти 57,66 мс — разные метрики.
- На 20/50/100 ксимв/с в двухсекундном окне не доставлено ни одного
TELEMETRY. Единственное сообщение старой таблицы доставляется при
последующем опустошении очереди.
Регрессии воспроизводятся командой:
```powershell
python -m pytest tests/test_lab049_independent_iq.py -q
```
Исторический `receive_iq_frame` сохранён для локальных регрессий формы;
основной проход Lab049 его больше не использует. Старые тесты не изменены.
Новый RX получает полный поток, самостоятельно находит начало, оценивает CFO,
фазу и полярность. PRBS7, физические и пакетные форматы, FEC, CRC и порог
Lab047 `0.030964473262429237` сохранены.
RF TX = 0. Git add/commit/push/pull/fetch не выполнялись.