Lab046C: analyze weak RF capture offline
This commit is contained in:
@@ -20,6 +20,17 @@
|
||||
|
||||
**OFFICIAL RESULT CHANGED BY POST-RUN DIAGNOSTICS = NO.**
|
||||
|
||||
**OFFLINE DETECTOR STUDY = COMPLETE.**
|
||||
|
||||
**OFFLINE REPROCESSING OF ORIGINAL RX CAPTURE = FAIL.**
|
||||
|
||||
**OFFLINE VALID FRAMES = 0. OFFLINE OBJECT COMPLETE = NO.**
|
||||
|
||||
**ORIGINAL HARDWARE RESULT CHANGED = NO.**
|
||||
|
||||
**CURRENT SOFTWARE GATE = PASS: quick_gate 506, pytest 506 passed,
|
||||
git diff --check clean.**
|
||||
|
||||
Lab046A/B остаются только программными лабами. Для Lab046C выполнен ровно один
|
||||
заранее разрешённый непрерывный RF-сеанс без повтора. Ни JPEG, ни видео, ни
|
||||
QPSK не запускались.
|
||||
@@ -105,6 +116,69 @@ read-only диагностика с TX reference. Она обнаружила с
|
||||
исход остаётся `LAB046C HARDWARE RESULT = C`, `RF TX COUNT = 1`,
|
||||
`OBJECT COMPLETE = NO`.
|
||||
|
||||
## Lab046C: автономная слабосигнальная обработка исходного RX capture
|
||||
|
||||
После аппаратного RESULT C реализован отдельный offline-модуль
|
||||
`experiments/lab046c_offline_recovery.py`. Lab045 и строгий многокадровый
|
||||
порог Lab046B `IQ_PREAMBLE_THRESHOLD = 0.65` не изменялись. Новый режим не
|
||||
содержит HackRF-команд и читает только ранее сохранённый `rx_stream.cs8` через
|
||||
`np.memmap`.
|
||||
|
||||
Первый каскад был зафиксирован до полного прогона по калибровочному фону
|
||||
`0.0--0.5 s`: порог равен 99,9-му процентилю локальных PRBS7-максимумов.
|
||||
Получено `threshold = 0.025011632591485977`, correlation median
|
||||
`0.00838765874505043`, MAD `0.003039387986063957`, 5193 локальных максимума,
|
||||
6 кандидатов, `12.0 candidates/s`. После фиксации правило проверено на
|
||||
отдельном контрольном фоне `21.0--24.0 s` и больше не менялось: 35501 локальный
|
||||
максимум, 301 кандидат, `100.333333 candidates/s`. Временные границы TX
|
||||
использовались только для выбора участков, где передачи заведомо не было, и не
|
||||
передавались поиску кадров.
|
||||
|
||||
Выполнен ровно один независимый полный offline-прогон 192 000 000 samples без
|
||||
`tx_stream.cs8`, `tx_object.bin`, TX offsets, ожидаемого числа 68, fragment
|
||||
order, packets или coded bits. Первый каскад насчитал 291446 локальных
|
||||
максимумов и 3025 кандидатов выше порога. Все 3025 прошли refinement, timing и
|
||||
оценку carrier/CFO/phase, но все 3025 были отвергнуты как
|
||||
`PHY_HEADER_MAGIC_MISMATCH`. `PHY HEADER PASS = 0`, `FEC ATTEMPTS = 0`,
|
||||
`CRC PASS = 0`, `VALID FRAMES = 0`, `VALID FRAGMENTS = 0`,
|
||||
`OBJECT COMPLETE = NO`. `recovered_object.bin` не создавался.
|
||||
|
||||
Только после завершённого independent verdict была открыта TX reference.
|
||||
Диагностика показала, что каждый из 68 настоящих стартов имел first-stage
|
||||
кандидат в пределах `+-40 samples`; корреляция на этих кандидатах
|
||||
min/median/max `0.059379209/0.088661019/0.126557365`, то есть все они были выше
|
||||
зафиксированного порога. `FALSE CRC PASS = 0`, но совпавших independently valid
|
||||
frames также 0, пропущены все 68 TX frames. На известных только post-verdict
|
||||
позициях локальная физическая экстракция прошла для 68/68, однако ошибки
|
||||
min/median/max составили `341/430/554` из 1280 бит преамбулы и `30/54/81` из
|
||||
144 бит PHY header. Оценочный SNR min/median/max
|
||||
`-19.282130/-12.829480/-9.195846 dB`; все заголовки дали `MAGIC_MISMATCH`.
|
||||
Следовательно, новый first-stage detector обнаружил слабые следы, но качество
|
||||
демодуляции оказалось недостаточным даже для защищённого PHY header.
|
||||
|
||||
Производительность: calibration `0.269617 s`, control `1.031204 s`, coarse
|
||||
search `7.721316 s`, strict candidate processing `836.340048 s`, в среднем
|
||||
`0.276476 s/candidate`, полный прогон `845.427589 s`. Capture длительностью
|
||||
24 s обработан за `35.226150` его длительности. RX остаётся `memmap`; самый
|
||||
большой coarse `complex64` block содержит 16 000 000 samples (128 000 000
|
||||
байт), консервативная оценка временных массивов SciPy `1 545 705 764` байта.
|
||||
Максимальное strict local window: 594400 samples, 4 755 200 байт. Полный
|
||||
192M-sample `complex64` массив не создавался.
|
||||
|
||||
Артефакты результата находятся в
|
||||
`data/processed/lab046c_offline_recovery/`: `independent_result.json`,
|
||||
`post_verdict_diagnostics.json`, `tx_reference_stage_diagnostics.json`.
|
||||
Правильная итоговая формулировка: **ORIGINAL LAB046C HARDWARE RESULT = C;
|
||||
OFFLINE REPROCESSING OF ORIGINAL RX CAPTURE = FAIL; OBJECT RECOVERED = NO;
|
||||
ORIGINAL HARDWARE RESULT CHANGED = NO.** Второй независимый прогон с новым
|
||||
порогом не выполнялся.
|
||||
|
||||
Финальный software gate после результата: `python tools/quick_gate.py` PASS,
|
||||
506 проверок и 9 функциональных лабораторий; `python -m pytest tests/ -q` =
|
||||
506 passed. Единственное предупреждение связано с недоступным `.pytest_cache`
|
||||
и не является отказом. `git diff --check` чист, кроме информационных LF/CRLF
|
||||
notices.
|
||||
|
||||
## Назначение
|
||||
|
||||
Lab046 переходит от одиночной 256-байтной полезной нагрузки к передаче
|
||||
@@ -398,4 +472,6 @@ Goodput 6,69 кбит/с — это честная baseline при 20 ксимв
|
||||
Для Lab046A/B RF TX = 0; первый аппаратный Lab046C завершён с RESULT C и одним
|
||||
RF TX без повтора. Erasure-код 12+3 GF(256) не задействован. Порог PRBS7,
|
||||
gain, PHY, FEC и detector после результата не менялись. Следующий этап
|
||||
определяется отдельной постановкой; новый RF-сеанс автоматически не разрешён.
|
||||
определяется отдельной постановкой. Offline weak-signal прогон с заранее
|
||||
зафиксированным правилом уже завершён как FAIL и не повторяется с другим
|
||||
порогом. Новый RF-сеанс автоматически не разрешён.
|
||||
|
||||
Reference in New Issue
Block a user