Files
SDR-Rover/docs/lab057_current_state.md

124 lines
10 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.
# 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; следующий анализ не запускался.