Lab046B: validate continuous raw IQ frame reception
This commit is contained in:
@@ -4,9 +4,13 @@
|
||||
|
||||
**LAB046 SOFTWARE OBJECT TRANSPORT = COMPLETE.**
|
||||
|
||||
**CONTINUOUS STREAM VALIDATION = PASS (NORMALIZED SOFT-SYMBOL LEVEL). RF TX = 0.
|
||||
CONTINUOUS SAMPLE/IQ VALIDATION = NOT PERFORMED.
|
||||
HARDWARE VALIDATION = NOT PERFORMED.**
|
||||
**CONTINUOUS STREAM VALIDATION = PASS (NORMALIZED SOFT-SYMBOL LEVEL).**
|
||||
|
||||
**ПРОГРАММНАЯ ПРОВЕРКА НЕПРЕРЫВНОГО СЫРОГО IQ-ПОТОКА = PASS.**
|
||||
|
||||
**RF TX = 0.**
|
||||
|
||||
**АППАРАТНАЯ ПРОВЕРКА = НЕ ВЫПОЛНЯЛАСЬ.**
|
||||
|
||||
Lab046 — только программная лаба. HackRF и `hackrf_transfer` не
|
||||
запускались, эфирной передачи нет. Ни JPEG, ни видео, ни QPSK.
|
||||
@@ -110,6 +114,61 @@ Verifier нашёл опасный вариант прежнего глобал
|
||||
кадра. Поэтому suppression убран из списка кандидатов, а добавленный
|
||||
регрессионный тест проверяет, что ложный peak не скрывает настоящий кадр.
|
||||
|
||||
## Lab046B: непрерывный сырой IQ-поток
|
||||
|
||||
Lab046B закрывает только программный sample-level пробел Lab046A. Новый
|
||||
`experiments/lab046b_continuous_iq.py` формирует пять полных Lab045 waveform с
|
||||
PRBS7, защищённым PHY header, interleaved convolutional body, BPSK, RRC и
|
||||
guards, размещает их в одном `complex64` массиве и передаёт scanner-у только
|
||||
этот массив. TX start offsets, длины TX waveform, номера кадров, payload,
|
||||
packet и coded bits в `scan_continuous_iq` не передаются.
|
||||
|
||||
Переиспользованы существующие функции Lab043-Lab045: BPSK/RRC waveform,
|
||||
PRBS7 reference, normalized sliding correlation, локальное уточнение sample
|
||||
start, matched filter, preamble-only timing, non-data-aided CFO и комплексный
|
||||
gain, `normalized.real`, защищённый PHY header, deinterleave, soft Viterbi и
|
||||
protocol CRC. Новый слой только перечисляет локальные IQ-кандидаты, вызывает
|
||||
этот тракт на окне кандидата и монотонно продолжает поиск.
|
||||
|
||||
Глобальное требование «главный пик значительно выше второго» не используется.
|
||||
В идеальном пятикадровом опыте peak/second для настоящих кадров лежит около
|
||||
0 dB, поскольку вторым пиком является другой настоящий кадр; тем не менее все
|
||||
пять кадров приняты. Все локальные максимумы выше порога сохраняются, а после
|
||||
CRC PASS cursor переносится за вычисленный по принятому header конец кадра.
|
||||
После плохого кандидата cursor также строго растёт, но следующий кандидат не
|
||||
скрывается. Выход ограничен `MAX_FRAMES` и `MAX_SEARCH_ITERATIONS`.
|
||||
|
||||
### Фактические сценарии Lab046B
|
||||
|
||||
| Сценарий | Получено |
|
||||
|---|---|
|
||||
| Идеальный continuous IQ | PRBS7 candidates 32, processed 5, accepted 5, rejected 0, PHY/FEC/CRC 5/5/5, CRC FAIL 0, sample offset error 0 для всех |
|
||||
| CFO + phase + amplitude | внесено 0.2 Hz / 0.7 rad / 0.65; медианная оценка 0.200003768 Hz / 0.699634288 rad; CRC 5/0 |
|
||||
| Комплексный AWGN | sigma=0.17, seed=46002; accepted 5, pre-FEC 0, post-FEC 0, CRC 5/0 |
|
||||
| PRBS7 + неверный PHY header перед настоящим кадром | candidates 11, processed 8, rejected 7, следующий настоящий кадр найден, CRC 1/0 |
|
||||
|
||||
Начало первого waveform: sample 137, то есть не sample 0 и не граница сетки
|
||||
400 samples/symbol. Дополнительные gaps: 211/353/587/809 samples. Найденные
|
||||
фазы символьной выборки: 137/348/301/88/97 samples modulo 400. Точные TX
|
||||
offsets используются только постфактум после CRC PASS; ошибки обнаруженного
|
||||
start во всех пяти случаях равны нулю.
|
||||
|
||||
Шумовая точка зафиксирована честно. Первый разумный однокадровый запуск при
|
||||
sigma=0.12 дал CRC PASS, но 0 pre-FEC ошибок. Выполнена одна разрешённая
|
||||
обоснованная корректировка до sigma=0.17; она также дала 0 pre-FEC ошибок и
|
||||
CRC PASS. Дальнейший подбор не выполнялся. Поэтому этот сценарий доказывает
|
||||
устойчивый многокадровый IQ receive с комплексным детерминированным шумом, но
|
||||
не является новым доказательством реального исправления ошибок FEC; такое
|
||||
доказательство уже относится к аппаратной Lab045.
|
||||
|
||||
Основной массив содержит 11 534 330 `complex64` отсчётов и занимает
|
||||
92 274 640 байт (88.0 MiB). Пять waveform занимают 11 532 000 samples, остальное
|
||||
— leading/gaps/trailing. Полные CFO/phase-corrected копии не создаются:
|
||||
первичный поиск работает с decimated stream, а matched filtering и soft
|
||||
extraction выполняются на локальном окне одного кандидата. Это размер именно
|
||||
основного IQ-массива, а не peak RSS процесса: RRC/FFT, локальный matched stream
|
||||
и временные массивы SciPy требуют дополнительную рабочую память.
|
||||
|
||||
## Память continuous stream
|
||||
|
||||
Основной 68-кадровый soft stream содержит 389 232 значения `float32` и занимает
|
||||
@@ -235,9 +294,9 @@ Goodput 6,69 кбит/с — это честная baseline при 20 ксимв
|
||||
|
||||
## Software gate
|
||||
|
||||
- `python tools/quick_gate.py`: PASS; 454 теста ядра, 6 функциональных
|
||||
- `python tools/quick_gate.py`: PASS; 468 тестов ядра, 7 функциональных
|
||||
проверок лабораторий выполнено, 13 штатно пропущено.
|
||||
- `python -m pytest tests/ -q`: 454 passed, 0 failed, 0 errors, 0 skipped.
|
||||
- `python -m pytest tests/ -q`: 468 passed, 0 failed, 0 errors, 0 skipped.
|
||||
Единственное предупреждение связано с отсутствием прав на создание
|
||||
`.pytest_cache`; на выполнение и результат тестов оно не повлияло.
|
||||
- `git diff --check`: чист.
|
||||
|
||||
Reference in New Issue
Block a user