Lab056: compare 20 and 500 ksymbol/s in controlled RF session

This commit is contained in:
LittleSam129
2026-09-10 13:58:11 +03:00
parent 5add95ecb8
commit 92477a4632
27 changed files with 6518 additions and 0 deletions

View File

@@ -406,6 +406,51 @@
- **Далее:** STOP. Отдельное согласование измерительной схемы и допустимой
частоты; усилитель не назначен, Git add/commit/push/pull/fetch не выполнялись.
## Lab056 — подготовка одного эфирного ABAB, 20 и 500 ксимв/с
- **База:** Lab055 зафиксирована коммитом
`5add95ecb8865f59075bbbced08d97b183fb3b48`, только её семь файлов; без push.
- **Подготовлено:** один PRBS7/BPSK/RRC TX-файл ABAB, 1,323568 с;
Fs 8 Мвыб/с, цифровая несущая +50 кГц. RMS A/B 44,004413/44,001925 код,
разница мощности −0,000491 дБ; клиппинг 0. RX планируется на 3 с.
- **Проверено программно:** известные разницы усиления 0 и −6,020600 дБ
восстановлены с ошибкой менее 0,3 дБ в обеих парах. Анализируются отдельно
принятая мощность, фон, коэффициент передачи, остаток, спектр и энергия символа.
- **Проверки:** 34 целевых теста; quick_gate 857/30/13 PASS,
pytest 857 passed, 0 failed; verifier без остаточных находок; diff check PASS.
- **Граница:** пользователь выбрал эфир; частота/полоса и геометрия пока
не согласованы. 1400 МГц для излучения не используется. Общий такт проверен
только mock-вызовами; аппаратный preflight NOT_PERFORMED. RF TX=0.
Эфирный результат будет характеризовать весь путь с антеннами и распространением.
- **Отчёт:** [состояние](lab056_current_state.md),
[подготовка TX](../data/processed/lab056/preparation.json),
[сводка проверок](../data/processed/lab056/acceptance.json), журнал 047.
- **Далее:** STOP и отдельное разрешение на согласованный RF-сеанс.
Lab056 не коммитилась, push не выполнялся; Lab054 NOT_A сохранён.
- **Корректировка, запись 048:** кабельный контроль отложен из-за отсутствия
SMA-переходника; принят контролируемый OTA. RF_FREQ задаёт пользователь,
страна и границы диапазона не запрашиваются. Конкретная частота пока UNKNOWN.
Добавлен отдельный RX-only preflight с STOP перед разрешением TX, проверки
клиппинга до/после передачи, вывод комплексного h и повторов A2/A1, B2/B1.
TX и прежние результаты сохранены. 44 целевых теста; quick_gate 867/30/13
PASS, pytest 867 passed; verifier без находок. Аппаратных команд нет, RF TX=0.
[Сводка корректировки](../data/processed/lab056/ota_correction.json).
- **Аппаратный preflight, запись 049:** пользователь задал 1400000000 Гц
только для Lab056, OTA LOS примерно 3–5 м. Common clock PASS: оба reg29
0x26, SLAVE CLKIN DETECTED. RX-only 800 000 отсчётов/0,1 с, overruns 0,
клиппинг 0, RMS 2,203153 код. CLKOUT выключены, процессы CLEAR, RF TX=0.
[Отчёт preflight](lab056_rx_preflight.md). STOP до отдельного разрешения TX.
- **Единственный ABAB, запись 050:** после отдельного разрешения один TX
1,323568 с и RX 3 с; 4/4 сегмента, ошибка согласования начал ≤1 отсчёта,
клиппинг/overruns/underruns 0. X=+0,108895 дБ, Y=−0,163042 дБ,
Z=−13,870505 дБ. Повтор мощности A2/A1 −0,482024 дБ, B2/B1 −0,512676 дБ;
повтор коэффициента передачи примерно −0,18 дБ у обоих режимов.
Прежний провал 15,41 дБ в этой OTA-сессии не воспроизвёлся; собственные
потери HackRF не изолированы. Verifier подтвердил сырые данные и расчёты.
[RF-отчёт](lab056_rf_result.md), [сводка](../data/processed/lab056/rf_result.json),
[график](../data/processed/lab056/rf_overview.png). Выполненных TX 1, сейчас
RF TX=0, повторов нет. STOP, Lab056 не коммитилась, push не выполнялся.
## Правило хранения данных
Большие записи IQ, потоки `cs8`, бинарные объекты и другие аппаратные исходные

View File

@@ -0,0 +1,326 @@
# Lab056 — подготовка сравнения 20 и 500 ксимв/с в одной сессии
Подготовка 9 сентября 2026 года; корректировка OTA 10 сентября 2026 года.
Lab056 завершила единственный разрешённый OTA ABAB-сеанс 10 сентября.
Принятая мощность B/A +0,108895 дБ, коэффициент передачи по мощности
−0,163042 дБ, энергия символа −13,870505 дБ. Прежний провал 15,41 дБ
не воспроизвёлся. [Полный RF-отчёт](lab056_rf_result.md).
Выполненных передач 1, повторов 0; **RF TX сейчас = 0, STOP**.
Ниже сохранено описание этапов подготовки и preflight; актуальный итог
приведён в RF-отчёте и в заключительном блоке состояния.
Простыми словами: для будущего опыта создан файл, который дважды чередует
медленную и быструю передачу с практически одинаковой цифровой амплитудой.
Анализатор на искусственных записях различает равное усиление и падение на 6 дБ.
Как изменятся полезный принятый сигнал и фон между A/B в реальном эфире,
ещё не измерено; пока записан только RX-фон без TX.
Одинаковый TX VGA и одинаковая цифровая мощность не доказывают одинаковую
мощность на выходе HackRF. Для абсолютных ватт/dBm нужен калиброванный прибор.
## Зафиксированная база и границы задания
По новому явному разрешению пользователя создан коммит Lab055:
`5add95ecb8865f59075bbbced08d97b183fb3b48`
`Lab055: audit received signal energy across symbol rates`
В коммите ровно семь файлов: анализатор и тесты Lab055, её отчёт, два JSON
результата, только запись 046 журнала и только раздел Lab055 индекса.
Предшествующие незакоммиченные изменения Lab054 сохранены в рабочем каталоге.
Перед коммитом quick_gate: 823 теста, 28 функциональных проверок, 13 штатных
пропусков; pytest: 823 passed, 0 failed. Push не выполнялся.
Lab055 установила почти равную цифровую мощность активного TX
(1950,308/1950,598 код²), снижение согласованной RX-компоненты на 15,413 дБ
и сопоставимый фон в одинаковой полосе. Разные аппаратные сессии не позволяют
приписать это снижение одной скорости. Lab054 остаётся **NOT_A, 0/16**.
Повторно проверены все 34 SHA-256 входов Lab055: изменений нет.
Пользователь осознанно изменил методику: необходимого SMA-переходника нет,
поэтому сейчас выполняется подготовка контролируемого эфирного ABAB.
Кабельный контроль TX → 30 дБ → RX отложен до получения переходника
и будет отдельной проверкой, без автоматического запуска после Lab056.
Схема: MASTER TX → TX-антенна → свободное пространство → RX-антенна → SLAVE RX.
На всю ABAB сохраняются антенны, кабели, одинаковая поляризация, расстояние,
ориентация, положение оборудования, частота, усиления и common clock.
Антенны не трогают; по возможности исключают движение людей возле них.
Внешние PA и LNA, в том числе TQP3M9037, не используются.
`RF_FREQ = USER_AUTHORIZED_RF_HZ = 1400000000`: значение сообщил пользователь.
Частоту, разрешённую для лаборатории, определяет пользователь. Страна и
границы национальных диапазонов больше не являются обязательными полями
runner; повторное исследование национальной регуляторики не проводилось.
1400 МГц не подставляется по умолчанию. Mock-значения 915/916 МГц также
не являются выбором частоты для аппаратного опыта.
| Параметр эфирной схемы | Текущее значение |
|---|---|
| Центральная RF-частота | 1400000000 Гц, только лабораторная Lab056 |
| TX-антенна / RX-антенна | Имеющиеся антенны 1400 МГц по описанию пользователя; модели/маркировка не сообщены |
| Расстояние TX–RX | Примерно 3–5 м по заданию; точное измерение не сообщено |
| Взаимная ориентация и поляризация | Одинаковые, антенны неподвижны, по заданию пользователя |
| Прямая видимость LOS / отсутствие прямой видимости NLOS | LOS |
После конкретного RF_FREQ выполнен аппаратный RX-only preflight, PASS.
Сейчас STOP. TX — только после отдельного разрешения на один ABAB-сеанс.
Само сообщение частоты не является разрешением на TX. Частота 1400 МГц
не назначена рабочей частотой SDR_Rover: ориентир около 180 МГц и варианты
50/144 МГц рассматриваются отдельно, вне Lab056.
## Подготовленный TX
Файл: `data/raw/lab056/tx_abab.cs8`, signed int8 IQ, 21 177 088 байт.
SHA-256: `5b34bbe1a8e6d037d2d6d367a74e9eb84e8940db7da61600ffaa7f7497d4f600`.
Параметры сохранены в `data/raw/lab056/tx_metadata.json` и
[preparation.json](../data/processed/lab056/preparation.json).
Используются прежние PRBS7, BPSK и RRC из тракта Lab043/Lab042:
roll-off 0,35, span 10 символов, защитные участки по 16 символов.
Fs = 8 000 000 комплексных отсчётов/с, цифровая несущая +50 кГц.
Алгоритмы PHY/FEC/CRC, пороги и штатный приёмник не изменялись.
| Параметр | A: 20 ксимв/с | B: 500 ксимв/с |
|---|---:|---:|
| Отсчётов на символ | 400 | 16 |
| Полезных PRBS7-символов | 4096 | 102400 |
| Длительность активных символов | 0,204800 с | 0,204800 с |
| Длительность сегмента с защитными участками | 0,206900 с | 0,204884 с |
| RMS всего сегмента после int8 | 44,004413 код | 44,001925 код |
| Средняя мощность всего сегмента | 1936,388382 код² | 1936,169379 код² |
| RMS активного участка | 44,227281 код | 44,010867 код |
| Средняя мощность активного участка | 1956,052408 код² | 1936,956395 код² |
| Клиппинг | 0 | 0 |
Разница средней мощности B/A всего сегмента: **−0,000491 дБ**,
критерий подготовки |разница| ≤ 0,01 дБ выполнен. Активные участки отличаются
на −0,042606 дБ из-за разной доли защитных участков; это явно сохранено
в метаданных и учитывается при сравнении коэффициента передачи.
RMS указан в кодах, средняя мощность — RMS² в код².
Последовательность: gap → A1 → gap → B1 → gap → A2 → gap → B2 → gap.
Каждый gap длится 0,1 с. A1 и A2 совпадают побайтно; B1 и B2 тоже.
Один файл содержит 10 588 544 комплексных отсчёта, **1,323568 с**.
План RX: 24 000 000 отсчётов, **3 с**, запуск на 0,5 с раньше TX.
Важно: gap — нулевые цифровые IQ при работающем TX-процессе.
Это не выключение передатчика; утечка несущей и собственный фон возможны.
Полная длительность файла включает эти участки.
## Измерения сохранённого RX
Анализатор `experiments/lab056_abab_energy.py` сначала ищет всю ABAB
корреляцией с известным TX: шаг 32 отсчёта, сетка остаточного частотного
смещения (CFO) от −2 до +2 Гц с шагом 0,25 Гц. Затем существующий метод
Lab055 уточняет задержку, CFO, фазу, постоянное смещение и комплексный
коэффициент на обучающих плитках; мощность компоненты и остатка проверяется
на отдельных плитках. При недостаточном совпадении результат UNKNOWN.
Порог 0,05 относится только к этой диагностической локализации;
он не меняет пороги PHY/CRC и не даёт независимого приёма пакетов.
Прореживание без фильтра используется только при грубом поиске. Мощности
и спектры вычисляются по исходным полным отсчётам. RX не масштабируется
для искусственного выравнивания A/B.
Для каждого A1/B1/A2/B2 сохраняются:
- Полная средняя IQ-мощность `mean(|r|²)` и мощность после удаления среднего
(AC), RMS, постоянное смещение, пик и клиппинг.
- Два ближайших окна фона по 60 мс в соседних нулевых цифровых участках.
Дополнительно — доступные окна по 50 мс вне всей последовательности.
Внешние окна нельзя автоматически назвать RF OFF без проверки времён
запуска/остановки: в текущей подготовке аппаратного фона ещё нет.
- Разность AC-мощности и среднего локального фона. Разброс оценивается
по неперекрывающимся блокам 4 мс, включая отличие фона до и после сегмента.
Если превышение не больше трёх оценок неопределённости, итоговая мощность
полезного сигнала `null`, а исходная разность сохраняется. Это критерий
численной устойчивости, не калиброванный доверительный интервал.
- Комплексный коэффициент `h = sum(conj(s)*r) / sum(|s|²)` после согласования
и удаления постоянного смещения; сравнивается `|h|²`.
- Мощность согласованной компоненты и остатка. Остаток включает шум и
искажения, которые не описывает модель; это не чистый тепловой шум.
- Интегральная мощность спектра Welch в полосах 27 и 675 кГц вокруг
+50 кГц. Для A штатная полоса 27 кГц, для B — 675 кГц;
обе полосы записываются также для сравнения фона в одинаковых условиях.
Отдельно для двух пар сохраняются B/A в дБ по принятой мощности после
вычитания фона, по `|h|²`, по согласованной компоненте и по её энергии
символа `P/Rs`. Единицы мощности — коды RX², энергии — код²·с;
это относительные цифровые оценки, не калиброванные ватты и джоули.
При одинаковой принятой мощности рост скорости в 25 раз даст уменьшение
энергии символа на 13,9794 дБ. Равенство принятой мощности сначала проверяется.
Корректировка добавляет явный вывод `h.real`, `h.imag` и фазы относительно
начала активного участка. Он вычисляется на тех же обучающих плитках
при уже найденном CFO; его модуль проверяется на совпадение с моделью
Lab055. Алгоритм согласования и разделение обучения/проверки сохранены.
Отдельно выводятся A2/A1 и B2/B1: полная raw-мощность, фон, полезная
мощность после вычитания фона, `|h|²` и согласованная компонента.
Итоговые X/Y/Z в `comparison_summary` используют отношение средних
линейных мощностей двух B к двум A. X — полезная принятая мощность
после вычитания фона, Y — `|h|²`, Z — энергия символа этой же полезной
мощности. Если вычитание фона неустойчиво хотя бы в одном сегменте,
X/Z остаются `null`; компонентные метрики и повторяемость сохраняются.
## Проверка искусственными записями
Созданы две явно синтетические записи CS8 по 3 с: одинаковое усиление
обоих режимов и уменьшение амплитуды B вдвое (мощность −6,020600 дБ).
В модель добавлены шум, постоянное смещение, CFO +0,2 Гц, фаза и неизвестное
для поиска начало 4 160 013 отсчётов. Известное начало записано в результат
после анализа и не передавалось алгоритму поиска.
| Вход модели | Пара | Разница принятой мощности B/A | Разница `|h|²` B/A | Разница энергии согласованной компоненты |
|---|---:|---:|---:|---:|
| Одинаковое усиление | 1 | −0,051497 дБ | +0,001786 дБ | −14,019673 дБ |
| Одинаковое усиление | 2 | −0,041310 дБ | −0,002894 дБ | −14,024352 дБ |
| B: −6,020600 дБ | 1 | −6,050214 дБ | −6,014144 дБ | −20,035602 дБ |
| B: −6,020600 дБ | 2 | −6,028048 дБ | −6,022175 дБ | −20,043634 дБ |
Обе проверки PASS: ошибка коэффициента передачи в каждой паре меньше
заданных 0,3 дБ. Разница принятой мощности включает небольшое различие
цифровой мощности активных участков. Это результаты модели, не RF Lab056.
Данные: [равное усиление](../data/processed/lab056/software_equal.json),
[ослабление B](../data/processed/lab056/software_minus6db.json).
При корректировке те же сохранённые IQ проанализированы без перегенерации.
Прежние файлы результатов сохранены; новые сводки:
[равное усиление, OTA summary](../data/processed/lab056/software_equal_ota_summary.json),
[ослабление B, OTA summary](../data/processed/lab056/software_minus6db_ota_summary.json).
| Искусственная запись | X: мощность B/A | Y: коэффициент передачи B/A | Z: энергия символа B/A | Повтор `|h|²`, A2/A1 | Повтор `|h|²`, B2/B1 |
|---|---:|---:|---:|---:|---:|
| Равное усиление | −0,046404 дБ | −0,000553 дБ | −14,025804 дБ | −0,002308 дБ | −0,006988 дБ |
| B: −6,020600 дБ | −6,039124 дБ | −6,018156 дБ | −20,018524 дБ | −0,002308 дБ | −0,010340 дБ |
Это по-прежнему результаты программной модели. Они не устанавливают
величину эфирного различия Lab056.
Повторный анализ существующего файла с новым именем результата:
```powershell
python experiments/lab056_abab_energy.py analyze --rx data/raw/lab056/synthetic_equal.cs8 --output data/processed/lab056/recheck_equal.json
```
Существующие выходные файлы не перезаписываются. Команды `prepare` и
`software` создают данные только при отсутствии соответствующих файлов.
## Подготовка однократного аппаратного запуска
`experiments/lab056_capture_runner.py` не имеет аппаратного CLI. Без конкретного
положительного целого RF_FREQ из задания пользователя аппаратные действия
не начинаются. Частота одинакова для всех RX-команд и единственной TX-команды;
цифровая несущая остаётся +50 кГц. Страна/регуляторная полоса не запрашиваются
программой. Геометрия сохраняется вместе с частотой в отдельном OperatingPoint.
Роли плат сохранены: MASTER/TX `000000000000000097c063dc323b97d3`,
SLAVE/RX `000000000000000097c063dc2e5327d3`. Планируется прежнее тактирование
10 МГц TCXO → MASTER → CLKOUT → SLAVE CLKIN. Требуются оба reg29 = 0x26
и SLAVE CLKIN = DETECTED после короткого RX-start. Сначала логика проверена
mock-вызовами; теперь эти значения подтверждены аппаратным preflight.
Вызов `preflight_only` после получения RF_FREQ проверит инвентаризацию,
common clock и сохранит 0,1 с RX без TX на заданной частоте при RX 24/24 дБ.
Он проверит размер, явный нулевой счётчик потерь, уровень и клиппинг,
запишет `preflight_result.json`, выключит CLKOUT и завершится с STOP.
Любая TX-команда внутри этого этапа запрещена обёрткой runner.
Файл попытки создаётся эксклюзивно; автоматического повтора нет.
После отдельного разрешения `capture_once` потребует PASS preflight той же
частоты, геометрии и SHA TX. Поскольку после preflight CLKOUT выключены,
перед фактическим сеансом опора проверяется заново при запуске. Это проверка
готовности перед единственным TX, а не повтор передачи.
TX VGA 10 дБ, RX LNA/VGA 24/24 дБ, RF amplifier и Bias-Tee OFF,
Fs 8 Мвыб/с фиксированы на всю ABAB. RX запускается первым; затем допускается
один TX-процесс с конечным числом отсчётов, без `-R`. Маркер попытки создаётся
эксклюзивно; ошибка расходует попытку, автоматического повтора нет.
Требуются процессы CLEAR до/после, правильный размер RX, явные нулевые
RX overruns/TX underruns и успешное выключение CLKOUT обеих плат.
После упреждения RX проверяются последние 65 536 записанных отсчётов:
при rail-кодах −128/127 TX не запускается, RF TX=0 и STOP. Полная запись
проверяется также после ABAB. Если клиппинг появился только при передаче,
фиксируется RF TX=1 и невалидное измерение без повтора. Уже выполненная
передача не переобозначается нулём. В отчёте сохраняются RMS, пики I/Q,
доли клиппинга; отсутствие rail-кодов само по себе не доказывает отсутствие
аналоговой компрессии. Gain не меняется автоматически ни в одном сценарии.
Аппаратные помощники переиспользованы из существующей Lab054; её файлы
`experiments/lab054_hardware_control.py` и `tools/hackrf_process_check.py`
включаются в фиксацию Lab056 как необходимые зависимости вместе с их
двумя тестовыми файлами. Без них runner Lab056 не импортируется в чистой
копии репозитория, что независимо воспроизведено verifier. Старые отчёты,
данные и записи журнала Lab054 в эту фиксацию не входят. Реализации
зависимостей не переписывались; аппаратная логика осталась проверенной.
Verifier независимо подтвердил SHA/размеры TX, нулевые gaps, побайтную
повторяемость A/B и пересчитал коэффициенты передачи вторым методом.
Он воспроизвёл ошибку разбора журнала `1 RX overruns\n0 overruns`;
исправленный разбор отклоняет ненулевые, неизвестные и неразобранные
счётчики. Повторные mock-вызовы `capture_once` закрыли находку.
Остаточных воспроизведённых находок нет. Оборудование verifier не использовал.
Исходная подготовка: 34 целевых теста passed; quick_gate: 857 тестов,
30 функциональных проверок, 13 штатных пропусков, PASS. Полный pytest:
857 passed, 0 failed, 96,50 с (кеш отключён из-за прежнего отказа доступа).
`git diff --check`: PASS. Машинная сводка:
[acceptance.json](../data/processed/lab056/acceptance.json).
Корректировка OTA: 44 целевых теста PASS; quick_gate 867 тестов /
30 функциональных проверок / 13 штатных пропусков, PASS; pytest
867 passed, 0 failed, 89,32 с. Verifier исполнил все 44 сценария
в памяти без файлов и оборудования; остаточных находок нет.
Новая сводка [ota_correction.json](../data/processed/lab056/ota_correction.json)
дополняет исходную acceptance, не заменяя исторические 857 passed.
## Как читать будущий эфирный результат
Эфирный ABAB сравнит весь путь: TX, антенны, распространение, RX. Малое
различие означает, что большой провал не воспроизведён в этом пути и этой
сессии. Оно не доказывает равенство мощности непосредственно на выходе TX.
Большое повторяемое различие тоже нельзя автоматически отнести внутрь
HackRF: частотная избирательность антенн и многолучевого распространения
остаётся частью измерения. Для отделения аппаратного эффекта пригодится
отдельно согласованный кабельный или калиброванный измерительный опыт.
Ни необходимость PA, ни изменение результатов Lab047/Lab054 из этой
подготовки не следуют. Архитектура проекта сохраняется: управление через
RadioMaster/ExpressLRS/CRSF, SDR — видеотракт с целью минимум 5 свежих кадров/с.
## Состояние перед STOP
```text
LAB055 COMMIT = 5add95ecb8865f59075bbbced08d97b183fb3b48
NEW HEAD = 5add95ecb8865f59075bbbced08d97b183fb3b48
LAB056 RESULT = OTA_ABAB_VALID_LARGE_DROP_NOT_REPRODUCED_STOP
PHYSICAL CONNECTION = OTA, LOS, fixed antennas, same polarization/orientation, approximately 3-5 m per user
RF FREQUENCY = 1400000000 Hz (Lab056 test only)
A SYMBOL RATE = 20 ksymbol/s
B SYMBOL RATE = 500 ksymbol/s
TX RMS A = 44.004413 code
TX RMS B = 44.001925 code
TX POWER DIFFERENCE B/A = -0.000491 dB (whole segment)
ABAB TX DURATION = 1.323568 s
RX PLANNED DURATION = 3 s, lead 0.5 s
COMMON CLOCK PREFLIGHT = HARDWARE PASS, both reg29=0x26, SLAVE CLKIN=DETECTED
RX PREFLIGHT = PASS, 800000 complex samples, 0.1 s, overruns=0
CLIPPING = 0
READY FOR ANOTHER TX = NO (authorized single attempt consumed)
COMPLETED TX SESSIONS = 1
AUTOMATIC TX REPEATS = 0
RX ABAB RECORD = 24000000 complex samples, 3 s, clipping=0, overruns=0
TX UNDERRUNS = 0
RECEIVED POWER DIFFERENCE B/A = +0.108895 dB
TX-MATCHED CHANNEL GAIN DIFFERENCE B/A = -0.163042 dB
ENERGY PER SYMBOL DIFFERENCE = -13.870505 dB
BASELINE pytest = 857 passed (сохранённый результат подготовки)
quick_gate = PASS, 867 tests / 30 functional / 13 skipped
pytest = PASS, 867 passed / 0 failed (после корректировки)
git diff --check = PASS
RF TX = 0
LAB056 COMMIT = NOT_PERFORMED
PUSH = NOT_PERFORMED
CURRENT SINGLE-TX AUTHORIZATION = CONSUMED
STOP
```

222
docs/lab056_rf_result.md Normal file
View File

@@ -0,0 +1,222 @@
# Lab056 — единственный OTA ABAB: результат
10 сентября 2026 года, сеанс 12:32:24–12:32:28 по Москве.
**Внутри одного короткого эфирного сеанса большой провал при переходе
20 → 500 ксимв/с не воспроизвёлся.** Принятая мощность после вычитания фона
у B выше A на 0,109 дБ; согласованный коэффициент передачи по мощности
ниже на 0,163 дБ. Обе пары A/B дают близкие результаты. Энергия символа
уменьшилась на 13,871 дБ: при почти одинаковой принятой мощности она
приходится на в 25 раз большее число символов в секунду.
Это результат всего OTA-пути с антеннами и распространением. Он не
измеряет выходные dBm HackRF и не объясняет задним числом причину прежнего
различия Lab047/Lab054 на 15,41 дБ. Lab054 остаётся **NOT_A, 0/16**.
Выполнена ровно **одна** передача. Сейчас **RF TX = 0**, передатчик
остановлен; повторов нет. Разрешённая попытка израсходована. **STOP.**
## Фактические условия
Пользователь отдельно разрешил этот сеанс после аппаратного RX-only
preflight. Частота 1 400 000 000 Гц относится только к Lab056, не является
выбором рабочего диапазона SDR_Rover. Ориентир около 180 МГц и варианты
50/144 МГц рассматриваются отдельно и здесь не исследовались.
OTA: MASTER TX → TX-антенна → LOS → RX-антенна → SLAVE RX. По заданию
пользователя антенны неподвижны, ориентация и поляризация одинаковы,
расстояние примерно 3–5 м, кабели не меняются. Использованы имеющиеся
антенны на 1400 МГц; модели/маркировка и точное измеренное расстояние
не сообщены. Программа не измеряет геометрию; это описание пользователя.
Один сохранённый TX-файл содержит A1 → gap → B1 → gap → A2 → gap → B2
с дополнительными начальным/конечным gaps. A = 20 ксимв/с, B = 500 ксимв/с.
Fs 8 Мвыб/с; цифровая несущая +50 кГц; прежние PRBS7/BPSK/RRC.
TX VGA 10 дБ, RX LNA/VGA 24/24 дБ, RF amplifier/Bias-Tee OFF.
Внешние PA/LNA отсутствуют. Частота, усиления, Fs и параметры формы
не менялись между сегментами. PHY/FEC/CRC, пороги и timing не изменялись.
Цифровой RMS всего сегмента A/B: 44,004413/44,001925 код;
разница мощности B/A −0,000491 дБ. Разница активных частей −0,042606 дБ
из-за разной доли защитных участков сохранена в метаданных и не скрывается.
RX не нормировался для искусственного выравнивания A/B.
## Полнота записи и аппаратные проверки
| Проверка | Фактический результат |
|---|---|
| Число TX-процессов | 1, без `-R`, конечный `-n 10588544` |
| TX-файл | 21 177 088 байт, 10 588 544 комплексных отсчёта, 1,323568 с |
| Основной RX | 48 000 000 байт, 24 000 000 комплексных отсчётов, ровно 3 с |
| Порядок запуска | RX раньше TX на 0,517342 с по журналу запуска процессов |
| MASTER / SLAVE reg29 | 0x26 / 0x26 |
| SLAVE CLKIN | DETECTED в пределах штатного ожидания запуска опоры |
| RX overruns / TX underruns | 0 / 0 по всем явным счётчикам журналов |
| Клиппинг RX до TX | 0 / 65 536 отсчётов проверенного хвоста |
| Клиппинг полного RX после ABAB | 0 / 24 000 000 отсчётов; 0 / 48 000 000 компонент |
| Полный RX: RMS / максимумы абсолютных I,Q | 2,235380477 код / 5, 6 код |
| Процессы до / после | CLEAR / CLEAR |
| Завершение | CLKOUT обеих плат выключены, ошибок cleanup нет |
Общая опора проверена при запуске заново, поскольку предыдущий preflight
завершился выключением CLKOUT. Первый запрос CLKIN ещё не обнаружил опору;
второй обнаружил её через 137,359 мс штатного ожидания. После PASS
состоялся единственный TX; опрос CLKIN не является повтором передачи.
В журнале 14 команд: инвентаризация, опора, два коротких RX-start по
65 536 отсчётов для выбора опоры, один основной RX, один TX и cleanup.
После запуска TX до его окончания других аппаратных команд нет.
Параметры команд и их исходный вывод сохранены; аппаратной перестройки
между A/B не было. Физическая неподвижность антенн следует из заданных
пользователем условий, а не из программного измерения.
Утилита указала TX transfer time 1,32538 с и RX transfer time 3,01535 с.
Это служебные интервалы обмена, отличные от длительности отсчётов файла;
они не используются вместо расчёта длительности по числу отсчётов и Fs.
Отсутствие rail-кодов не является калиброванной проверкой аналоговой
компрессии; обнаруженных цифровых признаков насыщения нет.
## Все четыре сегмента
Подготовленный анализатор нашёл ABAB с нормированной корреляцией 0,384366
и грубым остаточным CFO 0 Гц. Оценённые начала всей последовательности
по отдельным сегментам: 4 454 791, 4 454 791, 4 454 790, 4 454 791 отсчёт.
Разброс составляет один отсчёт, 0,125 мкс. Все сегменты расположены
внутри RX, идут в правильном порядке и не перекрываются.
| Сегмент | Начало сегмента, отсчёт RX | Начало, с | Конец, с | Активных отсчётов |
|---|---:|---:|---:|---:|
| A1 | 5 254 791 | 0,656848875 | 0,863748875 | 1 638 400 |
| B1 | 7 709 991 | 0,963748875 | 1,168632875 | 1 638 400 |
| A2 | 10 149 062 | 1,268632750 | 1,475532750 | 1 638 400 |
| B2 | 12 604 263 | 1,575532875 | 1,780416875 | 1 638 400 |
Длительность активного участка каждого сегмента 0,2048 с. С защитными
участками A длится 0,2069 с, B — 0,204884 с. Межсегментные интервалы
составляют 0,1 с с расхождением не более одного отсчёта из-за согласования.
В спектрах A и B видны соответственно узкая и широкая полосы PRBS/BPSK.
Границы, ширина спектров и согласованные компоненты подтверждают
наличие четырёх сегментов; это диагностическое измерение с TX-эталоном,
не независимый приём пакетов.
![Запись, мощности и спектры единственного ABAB](../data/processed/lab056/rf_overview.png)
## Измерения A1/B1/A2/B2
Все мощности ниже — **код² RX**, не ватты/dBm. `h` выражает отношение
цифровых кодов RX/TX после согласования и удаления постоянного смещения.
Для вычитания фона используется AC-мощность — после удаления среднего,
поэтому она показана отдельно от RAW, включающего постоянную составляющую.
| Метрика | A1 | B1 | A2 | B2 |
|---|---:|---:|---:|---:|
| RAW RX POWER, включая среднее | 5,303053589 | 5,328170166 | 5,311703491 | 5,396551514 |
| RX AC POWER, без среднего | 1,084963566 | 1,092709351 | 1,049867204 | 1,090638777 |
| BACKGROUND POWER, AC | 0,622282607 | 0,616699337 | 0,635792032 | 0,667630886 |
| BACKGROUND-SUBTRACTED SIGNAL POWER | 0,462680958 | 0,476010015 | 0,414075173 | 0,423007891 |
| Оценка неопределённости вычитания фона | 0,029702311 | 0,034542825 | 0,017352868 | 0,047227716 |
| TX-MATCHED COMPLEX GAIN h | −0,008543899 + j0,009310849 | −0,008089660 + j0,009397484 | −0,007000883 + j0,010205712 | −0,006710537 + j0,010126447 |
| Коэффициент передачи по мощности, abs(h)² | 0,000159690119 | 0,000153755289 | 0,000153168935 | 0,000147576238 |
| MATCHED SIGNAL COMPONENT POWER | 0,312320987 | 0,297815525 | 0,299566893 | 0,285847043 |
| RESIDUAL POWER | 0,821513728 | 0,884789710 | 0,782684444 | 0,880722972 |
| INTEGRATED SPECTRAL POWER, полоса 27 кГц | 0,347264323 | 0,029697350 | 0,335922975 | 0,030437417 |
| INTEGRATED SPECTRAL POWER, полоса 675 кГц | 0,508299262 | 0,512832243 | 0,500120185 | 0,533314850 |
Полосы спектрального интегрирования центрированы на +50 кГц. Фактическая
расчётная полоса A — 27 кГц, B — 675 кГц; строка 675 кГц также даёт
сравнение в общей полосе. Спектральные интегралы включают фон. Различие
значений в полосе 27 кГц между A/B не является потерей полной мощности B:
большая часть широкого сигнала B лежит вне этой узкой полосы.
Вычитание фона устойчиво во всех четырёх сегментах по заранее подготовленному
критерию: превышение больше трёх оценок неопределённости. Эта оценка учитывает
разброс блоков и отличие фона до/после, но не является калиброванным
доверительным интервалом. Фон берётся из ближайших нулевых цифровых gaps;
TX-процесс в них работает, поэтому gaps нельзя называть выключенным RF.
Отдельные внешние окна фона и их спектры сохранены в полном JSON.
Комплексный h оценён на обучающих плитках; его фаза относится к началу
активного участка после коррекции CFO. Мощность согласованной компоненты
и остатка измерена на проверочных плитках. Остаток содержит шум и
неописанные моделью искажения. Поэтому он не равен отдельно измеренному
фону, а согласованная компонента не равна всей мощности после вычитания фона.
Полная RAW/AC-статистика относится ко всему активному участку; плиточные
метрики не следует складывать с ней как одну точную энергетическую сумму.
## Повторяемость и итоговые X/Y/Z
В таблице повторяемости знак относится ко **второму повтору относительно
первого**: A2/A1 и B2/B1, 10 log10 отношения мощностей.
| Сравнение повторов | RAW RX | Фон AC | Полезная мощность после фона | abs(h)² | Согласованная компонента |
|---|---:|---:|---:|---:|---:|
| A1 / A2 REPEATABILITY: A2/A1 | +0,007078 дБ | +0,093274 дБ | −0,482024 дБ | −0,181074 дБ | −0,181074 дБ |
| B1 / B2 REPEATABILITY: B2/B1 | +0,055382 дБ | +0,344629 дБ | −0,512676 дБ | −0,178136 дБ | −0,178136 дБ |
| Пара A/B | Принятая мощность B/A после фона | abs(h)² B/A | Согласованная компонента B/A |
|---|---:|---:|---:|
| B1/A1 | +0,123345 дБ | −0,164480 дБ | −0,206538 дБ |
| B2/A2 | +0,092693 дБ | −0,161543 дБ | −0,203601 дБ |
Итоговые X/Y/Z — отношение средних **линейных** мощностей B1/B2 к A1/A2,
а не среднее значений в дБ. Z рассчитано из той же мощности после фона,
что X, с делением на скорость символов. Это энергия в код²·с, не джоули.
```text
500K / 20K RECEIVED POWER DIFFERENCE = +0.108895 dB
500K / 20K TX-MATCHED CHANNEL GAIN DIFFERENCE = -0.163042 dB
ENERGY PER SYMBOL DIFFERENCE = -13.870505 dB
```
Расчёт Z: +0,108895 − 10 log10(500000/20000) = −13,870505 дБ.
Отдельная энергия согласованной компоненты в парных результатах изменилась
на −14,185938 и −14,183001 дБ; это другой числитель, её не подменяют Z.
## Инженерная интерпретация
1. Внутри этой сессии 20 и 500 ксимв/с дали почти равные мощности. Небольшое
различие повторилось в обеих парах; утверждать точную частотную
характеристику по двум повторам нельзя.
2. Вторые повторы слабее первых на 0,48/0,51 дБ по мощности после фона
и примерно на 0,18 дБ по коэффициенту передачи. Фон также немного
меняется и содержит кратковременные всплески; при этом относительное
сравнение B/A сохраняется: расхождение двух оценок X около 0,031 дБ,
двух оценок Y около 0,003 дБ.
3. Прежний провал порядка 15,41 дБ **не воспроизвёлся** в текущей короткой
OTA-сессии. Причина различия старых раздельных опытов остаётся
неустановленной; их результаты не пересматриваются.
4. По OTA нельзя объявить эффект собственной аппаратной потерей HackRF
Plus: антенны и распространение входят в измеренный путь. В этой
сессии большого эффекта вообще не обнаружено. Абсолютная мощность
на выходе передатчика не измерена.
5. Кабельный контроль после получения SMA-переходника остаётся необходимым
отдельным этапом для отделения свойств аппаратуры от антенн и канала.
OTA его не заменяет. Автоматического повторения опыта или добавления
PA/внешнего LNA нет; необходимость усилителя не установлена.
## Проверка и артефакты
Verifier независимо прочитал журналы и raw IQ без оборудования и записи
файлов: проверил число команд, постоянство параметров, опору, размеры,
SHA, отсутствие клиппинга/потерь и согласованность четырёх начал. Raw AC,
два окна фона, CFO и комплексный МНК пересчитаны вторым способом;
результаты совпали с анализатором до 1e−12. Воспроизведённых находок нет.
RX SHA-256: `e336dd653fa554058052fcf851e9f2462f66b8cf7c710815ca2b9a09ffc23ad4`.
TX SHA-256: `5b34bbe1a8e6d037d2d6d367a74e9eb84e8940db7da61600ffaa7f7497d4f600`.
- [Полный подготовленный анализ](../data/processed/lab056/rf_analysis.json).
- [Итоговая машинная сводка](../data/processed/lab056/rf_result.json).
- [Авторизация и фиксированные параметры](../data/processed/lab056/rf_session_authorization.json).
- [Фактические команды и время](../data/processed/lab056/rf_session_commands.json).
- Raw: `data/raw/lab056/rx_stream.cs8`, `capture_result.json`,
`hardware_attempt.json`, `tx_process_result.json`, `rx_stdout.txt`, `rx_stderr.txt`.
Исходные результаты подготовки, preflight и искусственные записи сохранены.
Код анализатора/runner и TX не изменялись; использована проверенная версия
44 целевых теста / quick_gate 867/30/13 / pytest 867 passed. Для анализа
аппаратной записи полные тесты повторно не запускались. Diff check PASS.
HEAD `5add95ecb8865f59075bbbced08d97b183fb3b48`, Lab056 не коммитилась,
push не выполнялся. Приём пакетов, видео и FEC не проверялись.
**Выполненных TX-сеансов: 1. RF TX сейчас = 0. STOP.**

View File

@@ -0,0 +1,98 @@
# Lab056 — аппаратный common-clock и RX-only preflight
10 сентября 2026 года, 12:16:28–12:16:29 по Москве.
**Аппаратный preflight PASS. RF TX = 0. STOP перед отдельным разрешением TX.**
Проверена общая опора и записан фон при выключенном передатчике.
Сравнение A/B по эфиру ещё не выполнялось.
```text
RF_FREQ = 1400000000 Hz
COMMON CLOCK = PASS; MASTER reg29=0x26; SLAVE reg29=0x26; SLAVE CLKIN=DETECTED
RX PREFLIGHT = PASS; 800000 complex samples; 0.1 s; RX overruns=0
CLIPPING = 0 / 800000 samples (0%)
RF TX = 0
READY FOR SINGLE ABAB TX = YES (technical preflight; separate authorization pending)
STOP
```
## Условия
По заданию пользователя 1400 МГц — только частота текущего лабораторного
Lab056. Она не назначает рабочий диапазон SDR_Rover. Ориентир дальнейших
полевых работ около 180 МГц рассматривается отдельно; антенна на этот
диапазон уже имеется. Варианты 50/144 МГц здесь не исследуются.
Схема задана пользователем: MASTER TX → TX-антенна → LOS → RX-антенна → SLAVE RX.
Используются имеющиеся антенны на 1400 МГц. Точные модели/маркировка не
сообщены и программно не установлены; они не являлись препятствием для
этого RX-only этапа. Антенны неподвижны, ориентация и поляризация одинаковы.
Расстояние по заданию примерно 3–5 м; точное измеренное значение отсутствует.
Кабели и геометрия сохраняются на будущую ABAB.
Аппаратный RX: Fs 8 Мвыб/с, LNA/VGA 24/24 дБ, RF amplifier и Bias-Tee OFF.
Внешние PA/LNA не используются. TX VGA 10 дБ остаётся запланированным
параметром будущего сеанса; TX в этом этапе не включался.
MASTER `000000000000000097c063dc323b97d3` и SLAVE
`000000000000000097c063dc2e5327d3` подтверждены свежей инвентаризацией.
Обе платы определены как HackRF One r9 с firmware/libhackrf 2024.02.1.
## Что выполнено
Перед оборудованием подтверждены HEAD, пустой Git index, SHA проверенного
кода и неизменность готового TX. Проверка процессов дала CLEAR.
Выполнены короткие RX-start по 65 536 отсчётов на MASTER и SLAVE для выбора
источника тактирования, чтения reg29 обеих плат и SLAVE CLKIN. Оба reg29
равны 0x26; CLKIN обнаружен первым запросом, через 67,787 мс после начала
ожидания опоры. Затем SLAVE записал 800 000 комплексных отсчётов RX, 0,1 с.
Все три команды hackrf_transfer работали только с `-r`, на одной частоте
и с одинаковыми RX-параметрами. Журнал команд не содержит `-t`.
| Метрика сохранённого RX | Значение |
|---|---:|
| Размер CS8 | 1 600 000 байт |
| Комплексных отсчётов | 800 000 |
| Полная средняя мощность | 4,85388125 код² |
| Мощность после удаления среднего | 0,6658039582 код² |
| RMS полного IQ | 2,203152571 код |
| Среднее I / Q | 0,92535625 / 1,82532 код |
| Максимум абсолютного I / Q | 4 / 6 код |
| Максимальная комплексная амплитуда | 6,08276253 код |
| Отсчётов с rail-кодами −128/127 | 0 |
| RX overruns | 0 |
Цифровых признаков насыщения в этом RX-only фоне нет. Это не доказывает
отсутствие перегрузки при включённом TX: его сигнал пока отсутствовал.
Из этих отсчётов также нельзя установить абсолютную RF-мощность или
доказать отсутствие аналоговой компрессии. При будущем разрешённом запуске
сохраняются подготовленные проверки клиппинга без автоподбора gain.
SHA-256 RX: `c4257f26e4cc8562eb32228f9a50fdeb055879c928af0744cdf4a81cf7cd085b`.
SHA-256 TX: `5b34bbe1a8e6d037d2d6d367a74e9eb84e8940db7da61600ffaa7f7497d4f600`.
После проверки CLKOUT обеих плат выключены успешно, процессы CLEAR,
ошибок cleanup нет. Больше аппаратных действий не выполнялось.
## Доказательства и STOP
- [План и описание геометрии](../data/processed/lab056/rx_preflight_plan.json).
- [Журнал фактических команд с временем и выводом](../data/processed/lab056/rx_preflight_commands.json).
- [Результат RX-only preflight](../data/processed/lab056/rx_preflight_result.json).
- Исходный RX и исходный результат: `data/raw/lab056/preflight_rx.cs8`,
`preflight_result.json`; маркер попытки: `preflight_attempt.json`.
Код и TX waveform не менялись. Последние программные проверки относятся
к этой же версии: 44 целевых теста, quick_gate 867/30/13 PASS и pytest
867 passed. Полные тесты повторно не запускались для записи аппаратного
результата. Git diff --check PASS. Lab054 NOT_A, 0/16 сохранён.
Verifier проверил только сохранённые файлы: 12 команд, три RX-start,
ни одной TX-команды; регистры, CLKIN, cleanup и параметры подтверждены
по исходному выводу. Целочисленный пересчёт мощности/клиппинга и SHA
полностью согласован с JSON. Воспроизведённых расхождений нет, PASS.
Дополнительных аппаратных команд verifier не выполнял.
HEAD `5add95ecb8865f59075bbbced08d97b183fb3b48`. Lab056 не коммитилась,
push не выполнялся. Технические условия preflight выполнены; отдельного
разрешения на единственный ABAB TX ещё нет. **STOP.**