Lab057: diagnose Lab054 symbol synchronization failures offline

This commit is contained in:
LittleSam129
2026-09-10 16:10:17 +03:00
parent 92477a4632
commit 5773136ebf
291 changed files with 311682 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
# Lab057 — диагностика ошибок символов и заголовка Lab054
## Дата
10 сентября 2026 года.
## Зафиксированная постановка до расчёта альтернатив
Работа согласована пользователем: только сохранённые IQ, RF TX = 0,
без обращения к оборудованию, изменения штатного PHY, коммита и push.
Исторический Lab054 остаётся NOT_A, 0/16.
Исходный HEAD: `92477a4632d2172578c859afd823e6d3b39f42a6`.
Исходные status/diff, версии пакетов, размеры и SHA256 исходников и данных
сохранены в `data/processed/lab057/initial_state.json` и
`initial_worktree.diff`. Прежние изменения Lab054 не принадлежат Lab057.
Карта изменений: новые `experiments/lab057_symbol_diagnosis.py`,
`tests/test_lab057_symbol_diagnosis.py`, документы и результаты Lab057;
после проверки — только новая запись журнала и новый раздел индекса.
Штатные анализаторы Lab043–Lab056 и `protocol/` не редактируются.
### Разделение преамбулы
Индексы символов нулевые, интервалы полуоткрытые:
- TRAIN = `[32, 608)`, 576 символов;
- VALIDATION = `[672, 1248)`, 576 символов;
- `[608, 672)` — защитный промежуток 64 символа;
- крайние участки преамбулы исключены из обучения и проверки.
RRC TX/RX имеет span 10 символов каждый. Защитный промежуток превышает
суммарную память 20 символов, локальный сдвиг 0,5 символа и поддержку
интерполяции ±8 исходных отсчётов. Заголовок начинается с символа 1280.
Все альтернативные CFO/фазы оцениваются только на TRAIN. Baseline использует
всю преамбулу, как исторически. D0/D1/D2 наследуют штатный timing, который
также видел всю преамбулу: их VALIDATION скрыта от новой оценки CFO/фазы,
но не от унаследованной оценки timing. D3 оценивает timing только на TRAIN
около заранее известного начала кадра. Это диагностика при известном начале,
а не новый независимый поиск.
Дополнительно D0 наследует штатный CFO, который тоже использовал VALIDATION.
Для D0 скрыт только участок от новой оценки комплексного h; для D1/D2 —
от новой оценки CFO/h, при сохранённом штатном timing.
### Неизменные варианты
- S0: исходный строгий путь и штатная нормировка.
- D0: штатный timing/CFO; комплексный коэффициент по TRAIN.
- D1: тот же timing; остаточный CFO = 0; тот же коэффициент по TRAIN.
- D2: тот же timing; максимум корреляции после снятия PRBS7 на TRAIN.
- D3: как D2; совместный поиск timing/CFO только на TRAIN.
Для 500K частотная сетка `[-250, +250]` Гц с шагом 1 Гц; после сетки
одно параболическое уточнение внутреннего максимума, ограниченное ±0,5 шага.
Диапазон покрывает ранее зарегистрированные штатные оценки −217…+182 Гц
и область однозначности штатной ветви ±244,140625 Гц. Для 20K положительного
контроля сохраняется тот же диапазон в циклах на символ: ±10 Гц, шаг 0,04 Гц;
штатная область однозначности там ±9,765625 Гц. Граничный максимум явно
помечается; диапазон автоматически не расширяется.
D3: timing в пределах ±0,5 символа относительно известного начала,
шаг 1/32 символа; оконная sinc-интерполяция с полуопорой 8 отсчётов.
Критерий выбора — нормированная энергия корреляции TRAIN, без заголовка,
VALIDATION, payload и CRC. Частота/фаза используют одну шкалу
`t[k] = (k + 0.5) / Rs`; постоянная фаза задана при t = 0 этой шкалы.
Снятие цифровой несущей +50 кГц сохраняется во всех вариантах.
Положительные контроли: все 16 кадров сохранённого TX Lab054 и все 36
принятых кадров сохранённого RX Lab047. Отрицательный контроль: 16
фиксированных окон RX Lab054 вне передачи, начиная с 8 000 000 отсчётов,
с шагом 100 000 отсчётов. Контроль не является самостоятельным поиском пакетов.
Синтетика: фиксированные seed, фаза, остаточный CFO и дробная задержка;
сравнение скоростей при одинаковом Es/N0, а не одинаковой мощности и N0.
Никакой вариант не выбирается по CRC для отдельного кадра. При естественно
валидном заголовке длина берётся только из него, затем вызывается существующий
строгий декодер тела. Успешные диагностические пакеты сохраняются отдельно.
### Исправление изоляции TRAIN до итогового расчёта
Verifier воспроизвёл утечку через штатное вычитание среднего всего probe:
изменение сырого VALIDATION влияло на вход оценивателя TRAIN. В штатном S0
это историческое поведение сохраняется. Для оценивания D0–D3 используется
короткая свёртка только сырой опоры TRAIN с её собственным средним, теми же
RRC-коэффициентами, нормировкой и снятием +50 кГц. Опора определяется как
`[nominal + 32*SPS - (len(taps)-1) - margin,
nominal + 607*SPS + margin + 1)`, `margin=ceil(SPS/2)+8`.
При 500K это `[752,10145)`, при 20K `[18992,253409)`.
Вне этой опоры IQ не участвует даже в FFT-свёртке оценивателя.
**Сами решения символов во всех вариантах используют один прежний штатный
фильтр с глобальным DC mean.** Локальная подготовка применяется только для
оценки параметров. Поэтому S0→D0 меняет комплексную фазовую нормировку,
сохраняя штатные timing/CFO и символы до нормировки. Вычисляемый остаток
относится к штатному выходу RRC, а не к локально центрированному TRAIN.
Скрытая VALIDATION означает отсутствие её участия в новых параметрах;
штатная предобработка выходных символов по-прежнему использует весь probe.
Диапазоны поиска и разделение преамбулы после находки не изменялись.
Остаток включает также рассогласование TRAIN-only DC подготовки оценивателя
и глобальной DC подготовки выхода. Он не объявляется чистым шумом или
исключительно ошибкой частотной компенсации.
## Итог выполненной Lab057
Полный независимый baseline воспроизведён: 100 прежних кандидатов в том же
порядке, 100 PHY_HEADER_MAGIC_MISMATCH, 0/16, FEC/CRC NOT_REACHED.
Ошибки VALIDATION S0/D0/D1/D2/D3: 3494/3775/3355/3440/3466 из 9216.
Все варианты дают 0/16 заголовков и пакетов. Вклад компенсации частоты
ограниченно подтверждён; дополнительный timing устойчивого улучшения не дал.
TX054: все варианты 16/16; RX047: все 36/36; отрицательный контроль 0/16.
19 новых тестов, полный pytest **886 passed, 0 failed**; quick_gate
**886/31/13 PASS**, diff check PASS. Verifier подтвердил числа, сохранность,
контроли, закрытие утечки и корректность ограничений отчёта.
[Итоговый отчёт](lab057_offline_result.md),
[машинная приёмка](../data/processed/lab057/acceptance.json),
[манифест артефактов](../data/processed/lab057/artifact_manifest.json).
Журнал: новая запись 051. Прежние изменения Lab054 сохранены.
HEAD остаётся `92477a4632d2172578c859afd823e6d3b39f42a6`.
RF TX=0; COMMIT/PUSH NOT PERFORMED. STOP; следующий анализ не запускался.