87 lines
7.0 KiB
Markdown
87 lines
7.0 KiB
Markdown
# 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 не выполнялись.
|