Lab057: diagnose Lab054 symbol synchronization failures offline
This commit is contained in:
@@ -457,3 +457,22 @@
|
||||
данные остаются во внешних каталогах. В `data/processed` хранятся только
|
||||
небольшие обработанные результаты или навигационные README. Пустые и
|
||||
фиктивные файлы результатов не создаются.
|
||||
|
||||
## Lab057 — OFFLINE-диагностика ошибок символов и заголовка Lab054
|
||||
|
||||
- **Запись 051; только сохранённые данные, RF TX=0.** Полный независимый baseline
|
||||
воспроизвёл 100 прежних кандидатов, 100 PHY_HEADER_MAGIC_MISMATCH, FEC/CRC
|
||||
NOT_REACHED и 0/16 пакетов. Штатные PHY/RRC/FEC/CRC не изменялись.
|
||||
- **Пять фиксированных вариантов:** S0; D0 — фаза по TRAIN; D1 — нулевой
|
||||
остаточный CFO; D2 — CFO по TRAIN; D3 — дополнительно локальный timing.
|
||||
Ошибки VALIDATION: 3494/3775/3355/3440/3466 из 9216. Header/CRC: у всех 0/16.
|
||||
D1 улучшает VALIDATION против S0 на 1,5082 п.п., массовые ошибки сохраняются.
|
||||
Единственная первопричина не установлена; PA не назначается.
|
||||
- **Контроли:** TX054 16/16, RX047 36/36 во всех вариантах; фон 0/16.
|
||||
Утечка DC из VALIDATION в оценивание TRAIN устранена и независимо проверена.
|
||||
19 новых тестов; pytest 886 passed, quick_gate 886/31/13 PASS.
|
||||
- [Постановка и ограничения](lab057_current_state.md), [итоговый отчёт](lab057_offline_result.md),
|
||||
[CSV](../data/processed/lab057/frame_results.csv), [JSON](../data/processed/lab057/summary.json),
|
||||
[график](../data/processed/lab057/comparison.png), [проверки](../data/processed/lab057/acceptance.json).
|
||||
- **STOP:** исторический Lab054 NOT_A, 0/16 сохранён. Lab057 не коммитилась,
|
||||
push не выполнялся; следующий OFFLINE-анализ Lab056 требует отдельного согласования.
|
||||
|
||||
123
docs/lab057_current_state.md
Normal file
123
docs/lab057_current_state.md
Normal 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; следующий анализ не запускался.
|
||||
202
docs/lab057_offline_result.md
Normal file
202
docs/lab057_offline_result.md
Normal file
@@ -0,0 +1,202 @@
|
||||
# Lab057 — OFFLINE-диагностика ошибок символов и заголовка Lab054
|
||||
|
||||
## Что установлено простыми словами
|
||||
|
||||
Все 16 настоящих начал Lab054 найдены, но восстановленные символы слишком часто получают неправильный знак. Замена только диагностической синхронизации немного меняет ошибки, но не восстанавливает ни одного заголовка или пакета. Выбор частотной компенсации вносит ограниченный дополнительный вклад. Его нельзя объявить единственной причиной отказа. Локальное уточнение timing не дало устойчивого улучшения на проверочной части преамбулы.
|
||||
|
||||
Это работа с сохранённой записью. Исторический Lab054 **NOT_A, 0/16** сохранён. Lab056 не воспроизвела большой провал полной мощности, но не доказала достаточное качество символов старой Lab054. Остаток после модели не является чистым шумом. Необходимость PA, неисправность HackRF и многолучёвость не установлены.
|
||||
|
||||
## Происхождение и сохранность
|
||||
|
||||
Дата: 10 сентября 2026 года. HEAD: `92477a4632d2172578c859afd823e6d3b39f42a6`. Рабочий каталог исходно не чистый. Полный перечень, stderr Git, diff, версии и хеши зафиксированы до реализации в [initial_state.json](../data/processed/lab057/initial_state.json) и [initial_worktree.diff](../data/processed/lab057/initial_worktree.diff). Проверены 149 исходных Python-файлов и 60 исторических файлов. IQ читается через memmap в режиме `r`; большие записи не копируются.
|
||||
|
||||
| Вход | Размер, байт | SHA256 |
|
||||
|---|---:|---|
|
||||
| TX Lab054 | 2952192 | `e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5` |
|
||||
| RX Lab054 | 48000000 | `641886879964250c315dd399d469503808aae43fb319bef05e0bf2a78bf14585` |
|
||||
| TX Lab047 | 166060800 | `001a0c11128d18b2b8e3e67a3e8416a84174ed0e383887836186a10aa45beded` |
|
||||
| RX Lab047 | 240000000 | `8521bf1b574cd1fe4e0a4f980c00c8664f8bb51551a241e46449e1eb2c77e635` |
|
||||
|
||||
[Integrity](../data/processed/lab057/integrity.json) содержит SHA256 фактически загруженных исходников и версии модулей. Штатные исходники, включая незакоммиченные, не изменены. Исходные байты журнала/индекса сохраняются; Lab057 добавляется отдельной записью. Старые результаты Lab054 не присвоены Lab057.
|
||||
|
||||
## Неизменённый baseline
|
||||
|
||||
StreamingReceiver Lab053 получает только RX блоками 65536 IQ, без TX, числа кадров, начал, заголовка и payload. Использованы фактические штатные функции; обёртка только наблюдает первый probe. Неиспользовавшийся FEC-backend задан эталонной функцией без JIT-прогрева: фактических вызовов FEC нет.
|
||||
|
||||
Воспроизведены **100 кандидатов**, исходный порядок и все уточнённые начала, **100 PHY_HEADER_MAGIC_MISMATCH**, **0 пакетов**, **FEC_STARTED=0**, **CRC_STARTED=0**. После независимого решения выполнено сопоставление: все 16 настоящих начал представлены с отклонением ≤1 отсчёта. Диагностическое S0 побитно сверяется с probe полного штатного запуска.
|
||||
|
||||
- [Полный baseline](../data/processed/lab057/baseline.json).
|
||||
- [candidate_id → coarse/refined → фактический кадр](../data/processed/lab057/candidate_mapping.json).
|
||||
- [Остальные 84 кандидата](../data/processed/lab057/other_candidates.json).
|
||||
|
||||
Последующие варианты — **диагностика при известном начале**, а не новый независимый поиск. Эталон нужен только для подсчёта ошибок после фиксации параметров. Длина тела берётся исключительно из естественно принятого заголовка; затем вызываются существующие строгие FEC/CRC.
|
||||
|
||||
## Заранее определённые варианты и разделение
|
||||
|
||||
[Постановка до расчёта](lab057_current_state.md). Нулевые полуоткрытые индексы: TRAIN `[32,608)`, VALIDATION `[672,1248)` — по 576 символов, промежуток 64 символа; header начинается с 1280. Защита учитывает память TX/RX RRC и интерполяции.
|
||||
|
||||
| Вариант | Timing | Остаточный CFO | Фаза и комплексная нормировка |
|
||||
|---|---|---|---|
|
||||
| S0 | Штатный | Штатный | Штатная, вся преамбула |
|
||||
| D0 | Штатный | Штатный | По TRAIN |
|
||||
| D1 | Штатный | 0 Гц | По TRAIN |
|
||||
| D2 | Штатный | По TRAIN | По TRAIN |
|
||||
| D3 | По TRAIN, локально ±0,5 символа | По TRAIN | По TRAIN |
|
||||
|
||||
D2/D3: на 500K сетка ±250 Гц, шаг 1 Гц, одно ограниченное параболическое уточнение; на 20K ±10 Гц, шаг 0,04 Гц. Диапазон основан на зарегистрированных CFO, не на CRC. D3: 33 положения, шаг 1/32 символа, sinc-интерполяция ±8 исходных отсчётов. Время `t[k]=(k+0.5)/Rs`, постоянная фаза при t=0. Граничные максимумы записываются, диапазоны не расширяются.
|
||||
|
||||
**Граница независимости:** S0 использует всю преамбулу; D0 наследует и timing, и CFO, видевшие VALIDATION; D1/D2 наследуют такой timing. Только новые параметры D3 полностью оцениваются на TRAIN около известного начала.
|
||||
|
||||
Verifier воспроизвёл утечку через глобальное вычитание DC среднего при подготовке TRAIN. Она закрыта короткой свёрткой только сырой опоры TRAIN с локальным средним и прежними RRC/несущей. Опоры: 500K `[752,10145)`, 20K `[18992,253409)`. Изменение raw вне опоры сохраняет новые параметры точно неизменными при фиксированных унаследованных параметрах.
|
||||
|
||||
**Выходные символы для решений всех вариантов сохраняют прежний штатный фильтр с глобальным средним.** Поэтому D0 меняет только комплексную нормировку, сохраняя timing/CFO и вход решений. Коэффициент обучен на немного ином DC-представлении; проверочный остаток включает и это рассогласование. Он не считается исключительно шумом или CFO-ошибкой. Частотные диапазоны и разделение после находки не менялись.
|
||||
|
||||
## Фактическая ветвь CFO
|
||||
|
||||
Грубый поиск работает при 400 квыб/с на 20K и 1 Мвыб/с на 500K; точный RRC получает исходные 8 Мвыб/с, SPS=400/16. Оцениватель CFO получает символы с частотой Rs, а не Fs или частотой децимированного потока.
|
||||
|
||||
`Q0=mean(z[0:512]**2)`, `Q1=mean(z[512:1024]**2)`. Центры блоков: `256/Rs` и `768/Rs`. Последние 256 символов преамбулы не используются в двухблочной CFO, но используются в штатном h.
|
||||
|
||||
```text
|
||||
Delta_t = 512/Rs
|
||||
Delta_phi = unwrap(arg(Q1)) - unwrap(arg(Q0))
|
||||
f_hat = Delta_phi / (4*pi*Delta_t)
|
||||
Область однозначности: |f| < Rs/2048; концы диапазона неоднозначны.
|
||||
20K: Delta_t = 0.0256 s; |f| < 9.765625 Hz.
|
||||
500K: Delta_t = 0.001024 s; |f| < 244.140625 Hz.
|
||||
```
|
||||
|
||||
Множитель 2 после возведения в квадрат учтён знаменателем 4π. Несущая +50 кГц снимается один раз отрицательной экспонентой при Fs=8 Мвыб/с, остаточный CFO — один раз при Rs. D1 обнуляет только дополнительный остаточный CFO. Смешения Гц и радиан/отсчёт, неверного знака или повторной компенсации на проверенных синтетических сигналах не воспроизведено. Фаза и частота имеют общий t=0. Ветка FFT ±100 Гц здесь не активна. CFO модели Lab055 не использован как истина.
|
||||
|
||||
| Кадр | Q0, код² после RRC | Q1, код² после RRC | abs(Q0) / abs(Q1) | Delta_phi, рад | CFO, Гц |
|
||||
|---:|---|---|---|---:|---:|
|
||||
| 1 | -0.166994-0.033792j | -0.055488-0.112911j | 0.170379 / 0.125809 | +0.914370 | +71.057879 |
|
||||
| 2 | -0.159440+0.148525j | -0.145993+0.062412j | 0.217901 / 0.158774 | +0.345983 | +26.887136 |
|
||||
| 3 | -0.016597+0.072947j | -0.075975-0.117370j | 0.074811 / 0.139814 | +2.343393 | +182.110640 |
|
||||
| 4 | -0.036538+0.027430j | -0.086940-0.011387j | 0.045688 / 0.087682 | +0.774204 | +60.165209 |
|
||||
| 5 | +0.019342+0.000251j | -0.091887-0.051158j | 0.019344 / 0.105169 | -2.646547 | -205.669433 |
|
||||
| 6 | -0.079948-0.013489j | -0.156132+0.074750j | 0.081078 / 0.173104 | -0.613660 | -47.688961 |
|
||||
| 7 | -0.123668-0.042891j | -0.032533+0.121485j | 0.130894 / 0.125766 | -1.642987 | -127.680410 |
|
||||
| 8 | -0.116218-0.067279j | +0.000093-0.069437j | 0.134287 / 0.069437 | +1.047377 | +81.394135 |
|
||||
| 9 | -0.160522-0.051823j | -0.047792+0.024561j | 0.168680 / 0.053733 | -0.786999 | -61.159558 |
|
||||
| 10 | -0.025276+0.019238j | +0.081510-0.025604j | 0.031765 / 0.085437 | -2.795374 | -217.235183 |
|
||||
| 11 | -0.080458+0.013900j | -0.140927-0.069797j | 0.081650 / 0.157264 | +0.630932 | +49.031249 |
|
||||
| 12 | -0.117610+0.095199j | -0.031542+0.030989j | 0.151311 / 0.044218 | -0.096074 | -7.466154 |
|
||||
| 13 | -0.261191+0.044353j | -0.031487+0.030377j | 0.264930 / 0.043751 | -0.599248 | -46.568970 |
|
||||
| 14 | -0.169750-0.025470j | -0.081275+0.043148j | 0.171650 / 0.092018 | -0.636994 | -49.502290 |
|
||||
| 15 | -0.131155+0.171794j | -0.140169-0.049332j | 0.216136 / 0.148597 | +1.257159 | +97.696774 |
|
||||
| 16 | -0.155101+0.154485j | -0.012227-0.235640j | 0.218911 / 0.235957 | +2.302361 | +178.921973 |
|
||||
|
||||
Полные статистики обеих скоростей: [squared_cfo_statistics.json](../data/processed/lab057/squared_cfo_statistics.json).
|
||||
|
||||
## Результаты на всех 16 кадрах Lab054
|
||||
|
||||
На каждый вариант приходится 9216 TRAIN-символов, 9216 VALIDATION-символов и 768 бит header после объединения повторов. S0 воспроизводит 415–554 ошибки преамбулы из 1280 и 11–31 ошибку header из 48.
|
||||
|
||||
| Вариант | TRAIN, ошибок | VALIDATION, ошибок | VALIDATION BER | Header, ошибок /768 | HEADER_ACCEPTED | FEC_STARTED | CRC PASS |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| S0 | 3439 | 3494 | 37.9123% | 283 | 0/16 | 0 | 0/16 |
|
||||
| D0 | 3331 | 3775 | 40.9614% | 331 | 0/16 | 0 | 0/16 |
|
||||
| D1 | 3294 | 3355 | 36.4041% | 254 | 0/16 | 0 | 0/16 |
|
||||
| D2 | 3293 | 3440 | 37.3264% | 277 | 0/16 | 0 | 0/16 |
|
||||
| D3 | 3270 | 3466 | 37.6085% | 274 | 0/16 | 0 | 0/16 |
|
||||
|
||||
В ячейках: **ошибки VALIDATION из 576 / ошибки header из 48**. Вариант для каждого кадра по этой таблице не выбирается.
|
||||
|
||||
| Кадр | S0 | D0 | D1 | D2 | D3 |
|
||||
|---:|---:|---:|---:|---:|---:|
|
||||
| 1 | 221 / 20 | 213 / 19 | 224 / 19 | 224 / 22 | 226 / 22 |
|
||||
| 2 | 201 / 13 | 205 / 13 | 207 / 14 | 217 / 18 | 215 / 18 |
|
||||
| 3 | 226 / 19 | 289 / 30 | 211 / 18 | 228 / 18 | 234 / 16 |
|
||||
| 4 | 217 / 15 | 219 / 21 | 211 / 17 | 213 / 15 | 212 / 15 |
|
||||
| 5 | 256 / 31 | 300 / 30 | 222 / 17 | 219 / 17 | 219 / 17 |
|
||||
| 6 | 196 / 18 | 208 / 22 | 193 / 17 | 216 / 22 | 222 / 23 |
|
||||
| 7 | 222 / 20 | 240 / 27 | 208 / 21 | 210 / 18 | 210 / 18 |
|
||||
| 8 | 243 / 16 | 266 / 22 | 236 / 17 | 219 / 20 | 225 / 20 |
|
||||
| 9 | 195 / 16 | 196 / 12 | 175 / 15 | 175 / 16 | 175 / 16 |
|
||||
| 10 | 259 / 21 | 312 / 28 | 229 / 20 | 243 / 20 | 241 / 20 |
|
||||
| 11 | 207 / 13 | 210 / 13 | 208 / 10 | 214 / 11 | 214 / 11 |
|
||||
| 12 | 192 / 15 | 193 / 15 | 197 / 15 | 200 / 13 | 200 / 13 |
|
||||
| 13 | 216 / 11 | 222 / 16 | 213 / 7 | 218 / 12 | 218 / 13 |
|
||||
| 14 | 200 / 22 | 202 / 21 | 205 / 19 | 215 / 21 | 214 / 19 |
|
||||
| 15 | 223 / 16 | 236 / 20 | 213 / 14 | 217 / 16 | 217 / 16 |
|
||||
| 16 | 220 / 17 | 264 / 22 | 203 / 14 | 212 / 18 | 224 / 17 |
|
||||
|
||||
[CSV](../data/processed/lab057/frame_results.csv) и [JSON](../data/processed/lab057/frame_results.json) содержат все положения, timing/CFO/фазу, ошибки 144 передаваемых header-битов, voted48 и magic, состояния HEADER/FEC/CRC/PACKET_OUTPUT. Все 1424 нормированных комплексных символа каждого варианта Lab054 сохранены в [symbol_observations.npz](../data/processed/lab057/symbol_observations.npz).
|
||||
|
||||
## Ответы на восемь вопросов
|
||||
|
||||
1. **Исходный отказ воспроизведён:** полный независимый поток совпал с историей, FEC/CRC не достигнуты.
|
||||
2. **Только новая фаза/нормировка не помогает:** D0 снижает TRAIN 3439→3331, но ухудшает VALIDATION 3494→3775, header 283→331. VALIDATION хуже на 15/16 кадрах. Это не доказательство отдельного аппаратного фазового дефекта. Результат согласуется с плохим переносом короткой оценки вперёд по времени при неточном CFO, но не изолирует шум.
|
||||
3. **Замена остаточного CFO меняет результат:** при общем методе фазы D1 против D0 снижает VALIDATION на 420 ошибок (4,5573 п.п.), header на 77; VALIDATION лучше на 12/16 кадрах. D2 против D0 снижает VALIDATION на 335 и header на 54. Это ограниченный вклад выбора компенсации.
|
||||
4. **Улучшение есть вне TRAIN, но ограниченно:** D1 против S0 снижает VALIDATION на 139 ошибок (1,5082 п.п.) и header на 29; VALIDATION лучше на 11/16 кадрах. D2 против S0 снижает VALIDATION лишь на 54 ошибки, header на 6; VALIDATION лучше на 8/16. Нулевой CFO не признан истинным. Коррелированные ошибки внутри кадров не считаются независимыми испытаниями; универсальность эффекта не заявляется.
|
||||
5. **Дополнительный timing не даёт подтверждённого улучшения:** D3 против D2 снижает TRAIN 3293→3270, увеличивает VALIDATION 3440→3466, header 277→274. VALIDATION лучше у 4 кадров, равно у 7, хуже у 5. Выбраны сдвиги −1,5…+1 отсчёт, то есть −0,09375…+0,0625 символа; соседний период PRBS7 не затрагивается. На Lab054 нет граничных максимумов CFO/timing.
|
||||
6. **Заголовки и пакеты:** все пять вариантов 0/16; FEC/CRC во всех вариантах Lab054 не запускаются. Диагностического успешного пакета Lab054 нет.
|
||||
7. **Оставшееся ограничение:** после проверенных оценок остаётся около 36–38% неправильных решений VALIDATION. Не разделены полностью шум, искажения, остаточные ошибки модели/синхронизации и слабость конкретной записи. Вход не объявляется невосстановимым, CFO — единственной причиной.
|
||||
8. **Одно следующее действие:** отдельно согласовать OFFLINE-измерение качества символов сохранённых A1/B1/A2/B2 Lab056 тем же RRC с фиксированным TRAIN/VALIDATION. Оно проверит 500K при почти одинаковой принятой мощности в одной сессии. Lab056 передаёт PRBS7, а не пакеты: цель — ошибки символов и остаток, не packet PASS. Здесь этот следующий этап не запускался.
|
||||
|
||||
## Контроли и ограничения
|
||||
|
||||
| Контроль | S0 | D0 | D1 | D2 | D3 |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| TX Lab054, CRC PASS | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 |
|
||||
| RX Lab047, CRC PASS | 36/36 | 36/36 | 36/36 | 36/36 | 36/36 |
|
||||
| Фон Lab054, header/packet accepted | 0/16 | 0/16 | 0/16 | 0/16 | 0/16 |
|
||||
|
||||
У 5/16 фоновых окон штатный timing приводит к усечению header-окна. S0/D0/D1/D2 сохраняют это как недоступную диагностику; она не заменена нулевыми ошибками и не исправлена расширением окна. D3 проверен на всех 16. На фоне D2 достигает частотной границы дважды, D3 — семь раз частотной и шесть раз временной. Диапазоны не расширялись. У фона нет эталонного header: ошибка header = null.
|
||||
|
||||
Синтетика включает известные фазу/CFO, выход за область однозначности штатного CFO, дробную задержку 0,171875 символа и белый комплексный шум seed5701. Между скоростями сохраняется **Es/N0=12 дБ**, дисперсия шума на IQ-отсчёт масштабируется с SPS. Это не сравнение при одинаковых мощности и N0. D3 даёт модуль ошибки timing 0,015625 символа во всех четырёх waveform-контролях, VALIDATION без ошибок. CFO-ошибка при шуме: +0,105711 Гц на 20K, −2,031036 Гц на 500K. Эти контроли не доказывают универсальную устойчивость. Подробности: [synthetic_controls.json](../data/processed/lab057/synthetic_controls.json).
|
||||
|
||||
Замена файла эталонных header/JPEG сохраняет параметры и строгие решения, меняя только постфактум подсчитанные ошибки. Проверено точное равенство новых оценок при изменении raw вне TRAIN. Добавлено 19 тестов без оборудования и сохранённых IQ.
|
||||
|
||||
Средняя мощность остатка VALIDATION S0/D0/D1/D2/D3: 1,706895 / 1,750214 / 1,692657 / 1,706098 / 1,710603 код². Мощность модели: 0,077389 / 0,092981 / 0,096812 / 0,097653 / 0,098538 код². Точка тракта — выход штатного RRC. Это не калиброванные ватты и не измерение чистого N0. По паузам N0 не оценивался.
|
||||
|
||||
## Графики и артефакты
|
||||
|
||||
- [Сравнение по кадрам](../data/processed/lab057/comparison.png).
|
||||
- Созвездия VALIDATION: [S0](../data/processed/lab057/constellation_S0.png), [D0](../data/processed/lab057/constellation_D0.png), [D1](../data/processed/lab057/constellation_D1.png), [D2](../data/processed/lab057/constellation_D2.png), [D3](../data/processed/lab057/constellation_D3.png).
|
||||
- [Ошибка фазы по времени](../data/processed/lab057/phase_errors.png): круговое среднее 32 символов только для отображения, без переоценки компенсации.
|
||||
- [Положения ошибочных символов и остаток](../data/processed/lab057/errors_and_residual.png).
|
||||
- [Машинная сводка](../data/processed/lab057/summary.json).
|
||||
|
||||
## Воспроизведение и проверки
|
||||
|
||||
Из корня проекта при наличии исходных IQ и initial_state.json:
|
||||
|
||||
```powershell
|
||||
$env:OPENBLAS_NUM_THREADS='1'
|
||||
$env:OMP_NUM_THREADS='1'
|
||||
$env:PYTHONIOENCODING='utf-8'
|
||||
python -B experiments/lab057_symbol_diagnosis.py
|
||||
python tools/quick_gate.py
|
||||
python -m pytest tests/ -q
|
||||
git diff --check
|
||||
```
|
||||
|
||||
Отдельно baseline: `python -B experiments/lab057_symbol_diagnosis.py --baseline-only`. Runner не имеет аппаратного режима, перезаписывает только собственные результаты Lab057. Контрольные успешные пакеты сохранены отдельно как `packet_TX054_*` и `packet_RX047_*`; файлов `packet_Lab054_*` нет.
|
||||
|
||||
Verifier независимо подтвердил baseline, сводные числа, 19 тестовых случаев и закрытие утечки. Итог общих проверок: [acceptance.json](../data/processed/lab057/acceptance.json).
|
||||
|
||||
Фактические финальные проверки: **pytest 886 passed, 0 failed**, 84,80 с;
|
||||
одно прежнее предупреждение о недоступности записи `.pytest_cache`.
|
||||
**quick_gate PASS: 886 тестов, 31 функциональная проверка, 13 пропусков**.
|
||||
`git diff --check` — PASS. Исходные 867 тестов не удалены и не ослаблены.
|
||||
Исходные 149 файлов обработки/тестов и 60 исторических файлов сохранены;
|
||||
журнал и индекс расширены только отдельными дополнениями Lab057.
|
||||
|
||||
```text
|
||||
LAB057 STATUS = COMPLETED, PARTIALLY_LOCALIZED
|
||||
BASELINE REPRODUCED = YES
|
||||
PHASE CONTRIBUTION = TRAIN-only phase alone worsens validation
|
||||
CFO CONTRIBUTION = LIMITED; D1 improves validation by 1.5082 pp versus S0
|
||||
TIMING CONTRIBUTION = NO CONSISTENT HELD-OUT IMPROVEMENT
|
||||
HEADER ACCEPTED BY VARIANT = S0 0/16; D0 0/16; D1 0/16; D2 0/16; D3 0/16
|
||||
CRC PASS BY VARIANT = S0 0/16; D0 0/16; D1 0/16; D2 0/16; D3 0/16
|
||||
REMAINING UNCERTAINTY = input quality versus residual/model/synchronization impairments
|
||||
RECOMMENDED NEXT SINGLE STEP = separately authorize offline Lab056 symbol-quality audit
|
||||
LAB054 HISTORICAL RESULT = NOT_A, 0/16
|
||||
RF TX = 0
|
||||
COMMIT = NOT PERFORMED
|
||||
PUSH = NOT PERFORMED
|
||||
STOP
|
||||
```
|
||||
Reference in New Issue
Block a user