# 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 ```