Lab062: record invalidated 500 ksymbol/s RF packet trial

This commit is contained in:
LittleSam129
2026-09-14 13:58:42 +03:00
parent 25cc89f0c7
commit f8ae6c6bfc
16 changed files with 8774 additions and 0 deletions

View File

@@ -570,3 +570,29 @@
[synthetic CSV](../data/processed/lab061/synthetic_packet_results.csv).
- **STOP:** Lab061 фиксируется этим отдельным коммитом; push выполняется
пользователем отдельно, Lab062 не создана.
## Lab062 — полный 500K PHY-пакет, подготовка и RX-only preflight
- **Запись 056; RF TX=0.** Подготовлены16 пакетов по256 байт payload,
0,184512с. Legacy/T2 дали16/16 строгих HEADER/FEC/CRC и точных payload.
- **Геометрия:**1400МГц, примерно1,2м, LOS в помещении; TX возле окна, RX на
столе, одинаковая поляризация, антенны и кабели неподвижны.
- **Аппаратный preflight PASS:** MASTER/SLAVE reg29=0x26, SLAVE CLKIN=DETECTED
через133,5795мс. RX-only:800000 отсчётов, RMS2,314058, AC RMS0,985483,
max|I|/|Q|=6/8, clipping0, overruns0, сильного фона нет.
- **Проверки:** quick gate962/35/13 PASS, pytest962 passed. Усиления10/24/24дБ
сохранены; аналоговая компрессия без прибора остаётся неизвестной.
- [План](lab062_current_state.md), [отчёт](lab062_rx_preflight.md),
[software](../data/processed/lab062/software_gate.json),
[preflight](../data/processed/lab062/preflight_result.json).
- **STOP:** технически готово к одному TX, но отдельного разрешения ещё нет.
Lab062 не коммитировалась, push не выполнялся, Lab063 не создана.
- **Единственный RF-сеанс:** выполнен один TX без повторов. RX сохранён полностью: 24 000 000
комплексных отсчётов, 3,000 с, overruns 0, clipping 0. В TX-журнале зарегистрирован
промежуточный `1 underruns, longest 16672 bytes`, поэтому сеанс признан невалидным для чистого
A/B-сравнения. Legacy/T2 дали одинаковый пакетный итог 0/16, T2 gain 0.
- [RF-отчёт](lab062_rf_result.md),
[JSON](../data/processed/lab062/rf_analysis.json),
[покадровый CSV](../data/processed/lab062/packet_comparison.csv).
- **Текущее состояние:** `RF TX=0`; повтор не выполнялся, Lab062 не закоммичена, push не
выполнялся, Lab063 не создана. Следующий шаг требует отдельного согласования.

View File

@@ -0,0 +1,48 @@
# Lab062 — полный пакет 500K, подготовка к одному RF-сеансу
Lab062 проверяет T2 на полном штатном PHY-пакете в одном будущем коротком
эфирном сеансе. На текущем этапе разрешены подготовка, программный шлюз,
аппаратная проверка общей опоры и RX-only запись фона. Передача запрещена до
отдельного разрешения пользователя.
## Неподвижная физическая схема
| Условие | Фактическое значение |
|---|---|
| Частота | 1400000000 Гц, только для Lab062 |
| Расстояние TX–RX | примерно 1,2 м |
| Геометрия | прямая видимость, помещение |
| TX | плата и антенна возле окна |
| RX | плата и антенна на столе пользователя |
| Антенны | имеющиеся антенны на 1400 МГц, неподвижны |
| Поляризация | одинаковая |
| Тактирование | 10 МГц TCXO → MASTER → MASTER CLKOUT → SLAVE CLKIN |
Длинный кабель общей опоры, USB-подключение, антенны и остальные кабели не
перемещаются. Пользователь по возможности не проходит между антеннами. Во время
будущего сеанса не меняются частота, усиления, ориентация и PHY.
## Параметры
- 16 полных пакетов, payload каждого — 256 байт;
- BPSK, 500000 символов/с, Fs 8000000 выборок/с, 16 выборок/символ;
- центральная частота 1400 МГц, цифровая несущая +50 кГц;
- TX VGA 10 дБ, RX LNA/VGA 24/24 дБ;
- RF amplifier и Bias-Tee выключены;
- один конечный TX-waveform и одна будущая RX-запись;
- режим приёмника задаётся заранее: `legacy` или `t2`, без CRC-fallback.
RX-only preflight не меняет усиления. Он проверяет rail-коды, overruns,
максимальные |I|/|Q|, полный и AC RMS, сильный фон и ошибки аппаратных команд.
Эвристический STOP для неожиданно сильного цифрового фона: AC RMS не менее 20
кодов или максимум |I|/|Q| не менее 100 кодов. Отсутствие цифрового клиппинга
не доказывает отсутствие аналоговой компрессии.
Обязательная аппаратная точка: MASTER reg29=0x26, SLAVE reg29=0x26 и SLAVE
CLKIN=DETECTED. Любой отказ означает `RF TX = 0` и STOP.
Lab062 не коммитируется. Push не выполняется. Lab063 не создаётся автоматически.
## Фактический RF-результат
14 сентября 2026 года выполнен ровно один разрешённый TX-сеанс. Полная RX-запись сохранена, но в промежуточной строке `hackrf_transfer` зарегистрирован `1 underruns, longest 16672 bytes`. Повтор не выполнялся. Строгие `legacy` и `t2` на одной записи дали 0/16 CRC и пакетов; T2 gain равен 0. Подробности и покадровая таблица приведены в [отчёте](lab062_rf_result.md). Текущий статус: `RF TX = 0`, Lab062 не закоммичена, push не выполнялся, Lab063 не создана.

108
docs/lab062_rf_result.md Normal file
View File

@@ -0,0 +1,108 @@
# Lab062 — результат единственного RF-сеанса
Передача была запущена один раз. Приёмник сохранил полную трёхсекундную IQ-запись без переполнений и цифрового клиппинга. Однако `hackrf_transfer` во время передачи сообщил об одном кратком underrun: буфер передатчика один раз опустел на интервал до 16 672 байт. В итоговой строке утилита напечатала ноль underrun, но промежуточную ненулевую строку игнорировать нельзя. Поэтому этот сеанс нельзя считать чистым сравнением `legacy` и `t2`.
Оба строгих варианта приёмника обработали одну и ту же запись и выдали 0 из 16 пакетов. T2 не дал выигрыша в пакетах. Установлено, что передача состоялась, общий тактовый сигнал перед ней был исправен, RX-файл полный, а строгий результат равен 0/16 в обоих режимах. Нельзя установить, каким был бы результат без underrun, и нельзя приписывать все ошибки самому T2 или эфирному каналу. Аналоговая компрессия также остаётся неизвестной без измерительного прибора.
## Условия
| Параметр | Значение |
|---|---:|
| RF | 1 400 000 000 Гц |
| Символьная скорость | 500 000 символов/с |
| Частота дискретизации | 8 000 000 комплексных отсчётов/с |
| Цифровая несущая | +50 000 Гц |
| Пакеты | 16 полных PHY-пакетов по 256 байт payload |
| TX | 1 476 096 отсчётов, 0,184512 с, VGA 10 дБ |
| RX | LNA/VGA 24/24 дБ, 3 с |
| RF amplifier / Bias-Tee | OFF / OFF |
| Геометрия | около 1,2 м, LOS, помещение; TX возле окна, RX на столе |
| Антенны | имеющиеся антенны на 1400 МГц, одинаковая поляризация, неподвижны |
| Опора | 10 МГц TCXO → MASTER → MASTER CLKOUT → SLAVE CLKIN |
SHA-256 передаваемого файла: `e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5`.
## Аппаратный результат
- перед TX повторно получены `MASTER reg29 = 0x26`, `SLAVE reg29 = 0x26`, `SLAVE CLKIN = DETECTED`;
- выполнен один TX-сеанс, автоматических повторов нет;
- RX: 24 000 000 комплексных отсчётов, 48 000 000 байт, 3,000 с;
- SHA-256 RX: `ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32`;
- RX overruns: 0 во всех пяти строках журнала;
- RX clipping: 0;
- TX underruns: промежуточный максимум 1, `longest 16672 bytes`; финальная строка — 0;
- cleanup: оба CLKOUT выключены без зарегистрированных ошибок, SDR-процессы после сеанса — `CLEAR`;
- текущее состояние: `RF TX = 0`.
Из-за ненулевой промежуточной строки underrun статус сеанса: `INVALID_TX_UNDERRUN`. Полученные файлы сохранены, повтор не выполнялся.
## Строгое декодирование одной записи
| Стадия | legacy | T2 |
|---|---:|---:|
| CANDIDATES | 144 | 144 |
| TRUE PACKETS FOUND | 0 | 0 |
| HEADER ACCEPTED | 3 | 3 |
| FEC STARTED | 3 | 3 |
| FEC PASS | 3 | 3 |
| CRC STARTED | 3 | 3 |
| CRC PASS | 0 | 0 |
| PACKET OUTPUT | 0 | 0 |
| EXACT PAYLOAD MATCH | 0 | 0 |
Детектор в обоих запусках получил 209 956 первичных кандидатов, дешёвая ступень отклонила 209 812, после группировки строгий декодер проверил 144 кандидата. Переполнения очереди кандидатов не было. Никакого fallback между `legacy` и `t2` не выполнялось.
- `PASSED BY BOTH = []`
- `PASSED ONLY BY LEGACY = []`
- `PASSED ONLY BY T2 = []`
- `FAILED BY BOTH = [1, 2, …, 16]`
## Таблица 16 фактических границ
Начало потока найдено только после строгого вердикта корреляцией с первым TX-пакетом: отсчёт 4 256 091, отношение пика к медиане 21,739. Знание TX не передавалось детектору и не использовалось для повторной настройки приёмника. Во всех строках `H/F/C/O` означают header/FEC/CRC/output; `1` — проход, `0` — непроход. Ошибки символов и оценки частоты — диагностические, по известной границе и известным переданным символам.
| № | legacy H/F/C/O | T2 H/F/C/O | Preamble errors | Header errors | Payload errors до FEC | CFO нач., Гц | T2 фин., Гц | T2 lock |
|---:|:---:|:---:|---:|---:|---:|---:|---:|:---:|
| 1 | 0/0/0/0 | 0/0/0/0 | 108 | 20 | 367 | -2.511 | +1.939 | не определён |
| 2 | 0/0/0/0 | 0/0/0/0 | 135 | 11 | 377 | +16.850 | -2.223 | не определён |
| 3 | 0/0/0/0 | 0/0/0/0 | 466 | 115 | 2229 | -266.238 | -265.796 | не определён |
| 4 | 0/0/0/0 | 0/0/0/0 | 515 | 104 | 2266 | +297.250 | +293.800 | не определён |
| 5 | 0/0/0/0 | 0/0/0/0 | 108 | 27 | 369 | -1.712 | -0.835 | не определён |
| 6 | 1/1/0/0 | 1/1/0/0 | 112 | 10 | 345 | +4.676 | -3.164 | не определён |
| 7 | 0/0/0/0 | 0/0/0/0 | 113 | 7 | 344 | +2.113 | +1.094 | не определён |
| 8 | 0/0/0/0 | 0/0/0/0 | 91 | 19 | 368 | +0.964 | +0.354 | не определён |
| 9 | 0/0/0/0 | 0/0/0/0 | 105 | 21 | 367 | -2.679 | +0.191 | не определён |
| 10 | 0/0/0/0 | 0/0/0/0 | 116 | 7 | 345 | -0.290 | +0.947 | не определён |
| 11 | 0/0/0/0 | 1/1/0/0 | 109 | 9 | 392 | +0.757 | -0.142 | не определён |
| 12 | 0/0/0/0 | 0/0/0/0 | 297 | 110 | 2181 | -223.050 | -222.389 | не определён |
| 13 | 0/0/0/0 | 0/0/0/0 | 304 | 36 | 524 | -0.161 | -2.081 | не определён |
| 14 | 1/1/0/0 | 0/0/0/0 | 314 | 127 | 2091 | +228.209 | +224.928 | не определён |
| 15 | 1/1/0/0 | 1/1/0/0 | 131 | 7 | 395 | -9.960 | +2.284 | не определён |
| 16 | 0/0/0/0 | 0/0/0/0 | 100 | 23 | 355 | +13.157 | -0.868 | не определён |
В реализации T2 нет отдельного детектора lock, поэтому поле нельзя честно заменить на `PASS` или `FAIL`. Сохранены начальное состояние частоты и конечное состояние петли.
## Физическое качество по методике Lab058
Функции `analyze_values` и `channel_metrics` из Lab058 применены отдельно к каждому полному пакету. Для оценки использованы диагностические границы и чередующиеся обучающие/проверочные участки с защитными краями. Это измерение сделано после строгого результата и не меняет 0/16.
| Метрика | Lab062 | Lab056, 500K | Разница по смыслу |
|---|---:|---:|---|
| Диагностическая доля ошибочных символов | 0,099287 | 0,034959 | Lab062 хуже |
| Нормированное RMS-отклонение, EVM | 1,220401 | 0,845350 | Lab062 хуже |
| Matched/residual | -1,730051 дБ | +1,464846 дБ | Lab062 хуже на 3,194897 дБ |
| Неравномерность усиления, p95–p05 | медиана 6,660341 дБ | среднее 5,471382 дБ | Lab062 больше |
Для Lab062 разброс неравномерности между пакетами составил 6,236828…10,617549 дБ. Остаток включает шум, искажения канала и возможное влияние underrun; называть его чистым шумом нельзя. Отдельная диагностика именно выходных символов T2 дала SER 0,186626 и RMS 1,699461; это другой срез данных, поэтому он не подменяет приведённые выше сопоставимые метрики Lab058.
## Инженерный вывод
Чистое сравнение `legacy` и T2 не состоялось из-за зафиксированного TX underrun. Фактический строгий результат существующей записи — 0/16 для обоих режимов, выигрыш T2 равен нулю. В записи видны неоднородные повреждения пакетов и заметно худшее качество символов, чем у 500K-сегментов Lab056, но эти наблюдения нельзя отделить от аппаратной ошибки передачи.
Следующий одиночный шаг: без RF локализовать момент underrun относительно границ пакетов и проверить, совместимы ли провалы качества с его положением. Новый RF-сеанс, Lab063, изменение PHY или усилений этим отчётом не разрешаются.
`LAB062 COMMIT = NOT PERFORMED`
`PUSH = NOT PERFORMED`
`RF TX = 0`

108
docs/lab062_rx_preflight.md Normal file
View File

@@ -0,0 +1,108 @@
# Lab062 — подготовка и RX-only preflight
14 сентября 2026 года выполнена подготовка полного 500K PHY-сеанса и одна
аппаратная проверка при выключенном передатчике. Результат preflight — PASS.
Передача не запускалась: `RF TX = 0`.
## Условия
| Параметр | Значение |
|---|---|
| Центральная частота | 1400000000 Гц |
| Скорость символов | 500000 символов/с |
| Частота дискретизации | 8000000 выборок/с |
| Пакеты | 16 полных PHY-пакетов |
| Payload | 256 байт в каждом пакете |
| TX VGA | 10 дБ |
| RX LNA / VGA | 24 / 24 дБ |
| RF amplifier / Bias-Tee | выключены |
| Расстояние TX–RX | примерно 1,2 м |
| Геометрия | прямая видимость, помещение |
| TX | плата и антенна возле окна |
| RX | плата и антенна на столе пользователя |
| Антенны | имеющиеся антенны на 1400 МГц, неподвижны |
| Поляризация | одинаковая |
| Общая опора | 10 МГц TCXO → MASTER → MASTER CLKOUT → SLAVE CLKIN |
Длинный clock-кабель и USB-схема не менялись. Антенны, кабели, ориентация,
частота, усиления и PHY должны остаться неизменными до будущего разрешённого
сеанса.
## Программная проверка
Создан один waveform из 16 пакетов. Его длина — 1476096 комплексных отсчётов,
2952192 байта и 0,184512 с. SHA-256:
`e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5`.
Строгий приёмник в заранее выбранных режимах дал:
| Режим | Header | FEC | CRC | Точный payload и порядок |
|---|---:|---:|---:|---:|
| legacy | 16/16 | 16/16 | 16/16 | 16/16 |
| T2 | 16/16 | 16/16 | 16/16 | 16/16 |
Автоматического повторного декодирования по результату CRC нет.
## Общая опора и RX-only фон
Свежая инвентаризация подтвердила обе HackRF One r9 с firmware/libhackrf
2024.02.1. Роли сохранены:
- MASTER `000000000000000097c063dc323b97d3`;
- SLAVE `000000000000000097c063dc2e5327d3`.
Аппаратная проверка получила:
```text
MASTER reg29 = 0x26
SLAVE reg29 = 0x26
SLAVE CLKIN = DETECTED
CLKIN query = 2
time to detect = 133.5795 ms
```
Первый опрос SLAVE ещё показывал отсутствие опоры, второй штатный опрос её
обнаружил. После этого SLAVE записал 800000 комплексных отсчётов, 0,1 с, при
1400 МГц и RX LNA/VGA 24/24 дБ.
| Метрика RX-only записи | Значение |
|---|---:|
| Полный RMS IQ | 2,314058 кода |
| AC RMS после удаления среднего | 0,985483 кода |
| Средние I / Q | 0,966063 / 1,857529 кода |
| Максимум \|I\| / \|Q\| | 6 / 8 кодов |
| Максимальная комплексная амплитуда | 8,246211 кода |
| Цифровой clipping | 0 / 800000 отсчётов |
| RX overruns | 0 |
| Неожиданно сильный сигнал | нет |
Сильным цифровым фоном считался бы AC RMS не менее 20 кодов или максимум
`|I|/|Q|` не менее 100 кодов. Оба показателя значительно ниже порога.
Отсутствие rail-кодов не доказывает отсутствия аналоговой компрессии при
будущем TX. Абсолютная RF-мощность без измерительного прибора также неизвестна.
Усиления по результату preflight не менялись.
Унаследованное от Lab056 поле энергии на символ исключено из обработанной
сводки: у фоновой записи нет символов, поэтому такая величина к ней неприменима.
Сырой аппаратный JSON сохранён без переписывания; это поле не участвовало в
решении PASS.
SHA-256 RX-only записи:
`4cc0ceef5a95f84e5aa0c232d14ff1123efd307494b5c8a5646854be912fdbca`.
После записи оба CLKOUT выключены без ошибок. Проверка процессов до и после
дала `CLEAR`. Вызовов `hackrf_transfer -t` не было. Эксклюзивный маркер
preflight запрещает его автоматический повтор.
Артефакты:
- [подготовка](../data/processed/lab062/preparation.json);
- [программный шлюз](../data/processed/lab062/software_gate.json);
- [результат preflight](../data/processed/lab062/preflight_result.json);
- исходные TX и RX-only CS8 находятся в `data/raw/lab062/` и в Git не входят.
`READY FOR SINGLE LAB062 TX = YES` означает только техническую готовность.
Отдельного разрешения на передачу ещё нет. `RF TX = 0`. STOP.
Lab062 не коммитируется. Push не выполняется. Lab063 не создаётся автоматически.