Files
SDR-Rover/docs/lab057_offline_result.md

24 KiB
Raw Blame History

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 и 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 содержит 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 полного штатного запуска.

Последующие варианты — диагностика при известном начале, а не новый независимый поиск. Эталон нужен только для подсчёта ошибок после фиксации параметров. Длина тела берётся исключительно из естественно принятого заголовка; затем вызываются существующие строгие FEC/CRC.

Заранее определённые варианты и разделение

Постановка до расчёта. Нулевые полуоткрытые индексы: 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.

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.

Результаты на всех 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 и JSON содержат все положения, timing/CFO/фазу, ошибки 144 передаваемых header-битов, voted48 и magic, состояния HEADER/FEC/CRC/PACKET_OUTPUT. Все 1424 нормированных комплексных символа каждого варианта Lab054 сохранены в 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.

Замена файла эталонных 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 не оценивался.

Графики и артефакты

Воспроизведение и проверки

Из корня проекта при наличии исходных IQ и initial_state.json:

$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.

Фактические финальные проверки: pytest 886 passed, 0 failed, 84,80 с; одно прежнее предупреждение о недоступности записи .pytest_cache. quick_gate PASS: 886 тестов, 31 функциональная проверка, 13 пропусков. git diff --check — PASS. Исходные 867 тестов не удалены и не ослаблены. Исходные 149 файлов обработки/тестов и 60 исторических файлов сохранены; журнал и индекс расширены только отдельными дополнениями Lab057.

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