Files
SDR-Rover/docs/lab066_current_state.md

93 lines
5.8 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.
# Lab066 — исправленный повтор полного 500K PHY-сеанса
## Цель и границы
Lab066 повторяет исходную цель Lab062 после двух установленных дефектов того
сеанса: пакеты Lab062 шли вплотную, без заявленных пауз 5 мс, а в TX-журнале
был промежуточный underrun. Исторический результат Lab062 сохраняется без
изменений: `RF_SESSION_INVALID_TX_UNDERRUN`, legacy 0/16, T2 0/16.
На этапе подготовки Lab066 была ограничена программным декодированием,
common-clock и RX-only preflight; передача тогда не выполнялась. После этого
пользователь отдельно разрешил один TX. Автоматический повтор оставался
запрещён и не выполнялся.
## Радиопараметры
- RF: 1400000000 Гц;
- Fs: 8000000 комплексных отсчётов/с;
- символьная скорость: 500000 символов/с, 16 отсчётов/символ;
- цифровая несущая: +50000 Гц;
- TX VGA: 20 дБ;
- RX LNA/VGA: 24/24 дБ;
- RF amplifier и Bias-Tee: OFF;
- 16 штатных PHY-пакетов с PRBS7-преамбулой, заголовком, FEC и CRC;
- payload: 256 байт, детерминированный и различимый для каждого пакета;
- геометрия: около 1,2 м, LOS в помещении, прежние антенны и поляризация;
MASTER TX возле окна, SLAVE RX на столе.
## Итоговый TX-файл
Каждый packet waveform занимает 92256 отсчётов. Между соседними пакетами
записаны 15 нулевых пауз по 40000 отсчётов, то есть ровно по 5 мс. Перед первым
и после последнего пакета добавлены нулевые guards по 800000 отсчётов, или по
100 мс.
Расчёт длины:
```text
16 × 92256 + 15 × 40000 = 2076096 отсчётов без внешних guards
2076096 + 2 × 800000 = 3676096 отсчётов всего
3676096 / 8000000 = 0,459512 с
```
Фактическая длина совпала с расчётом: 3676096 комплексных отсчётов,
7352192 байта. SHA-256:
`621b0bb8ec72bba4f522c79a5c77669c850740ea481270c4dcc2a7317819f199`.
Повторная сборка дала те же байты. Нулевые guards и каждая из 15 пауз проверены
по точным границам из сохранённой разметки.
## Программное декодирование
Весь конечный TX-файл дважды прошёл один и тот же строгий приёмный тракт. Режимы
legacy и T2 запускались отдельно, автоматического fallback между ними нет.
| Режим | Кандидаты | Header | FEC | CRC | Выход | Payload и порядок |
|---|---:|---:|---:|---:|---:|---:|
| legacy | 16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 |
| T2 | 16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 |
Позиции принятых пакетов равны ожидаемым позициям в разметке. Для каждого
кандидата T2 заново оценивает начальные параметры по собственной преамбуле.
Наблюдение дало по два локальных запуска слежения на пакет: для заголовка и
полного кадра. Контекст обработки создаётся заново, состояния между пакетами
не переносятся.
Аппаратный анализ применил legacy и T2 к одному сохранённому RX-файлу. До
строгого вердикта декодеру не передавались payload или ожидаемые биты. Известный
TX использован после вердикта только для физических диагностик и сравнения с
Lab056 B, Lab062 и Lab066.
## Проверки перед preflight
- `python tools/quick_gate.py`: PASS, 1013 проверок ядра, 39 функциональных,
13 аппаратных пропусков;
- `python -m pytest tests/ -q`: 1013 passed;
- `git diff --check`: PASS.
Независимый verifier пересчитал длину, SHA, все нулевые диапазоны, пакетные
срезы, программное декодирование и RX-only метрики; расхождений нет. Read-only
adversary проверил запрет TX, одноразовость, привязку capture к конфигурации,
счётчики, live-проверку фона и границу oracle-диагностики; открытых замечаний
нет.
## Текущее состояние
Common-clock и RX-only preflight прошли; измерения приведены в
[отдельном отчёте](lab066_rx_preflight.md). `RF TX=0`. Lab066 не
коммитировалась, push не выполнялся, Lab067 не создавалась.
После отдельного разрешения выполнен один аппаратно валидный RF-сеанс без
повторов. Legacy и T2 дали одинаковые 10/16 точных пакетов. Полные результаты
и физическое сравнение приведены в [RF-отчёте](lab066_rf_result.md).