diff --git a/PROJECT_LOG.md b/PROJECT_LOG.md index c3f6a4f..7a665c4 100644 --- a/PROJECT_LOG.md +++ b/PROJECT_LOG.md @@ -1024,3 +1024,76 @@ commit и push не выполнялись. STOP. Новый RF, повтор Lab046C, изменение порога, JPEG, QPSK и изменение FEC без отдельной постановки запрещены. + +# Запись 032 + +## Дата + +2 сентября 2026 года + +## Тема + +Lab046C: успешная полная передача объекта 16384 байта через аппаратный +радиоканал 1400 МГц, RESULT A. + +## Выполнено + +После отдельной точной авторизации выполнен один непрерывный процесс передачи +без повтора. Новый криптографически случайный объект 16384 байта разбит +существующей архитектурой Lab046 на 68 фрагментов и передан 68 +последовательными защищёнными BPSK-кадрами. RF равна 1400 МГц, частота +дискретизации 8 МГц, символьная скорость 20 ксимв/с, цифровое смещение несущей ++50 кГц. Усиления сохранены: TX VGA 10 дБ, RX LNA/VGA 24/24 дБ, RF amplifier +и Bias-Tee выключены. MASTER reg29 `0x26`, SLAVE CLKIN `DETECTED`, SLAVE reg29 +`0x26`; общий опорный генератор прошёл проверку. + +Поток передачи содержит 156 835 200 комплексных отсчётов, 313 670 400 байт и +19,6044 с сигнала. Приём содержит 192 000 000 комплексных отсчётов, +384 000 000 байт и 24,0 с сигнала. Приём начался на 0,7525116 с раньше +передачи и закончился на 3,6341200 с позже. RX overruns 0, TX underruns 0, +clipping 0, near limit 0. После опыта оба CLKOUT выключены, оставшихся +процессов `hackrf_transfer` нет. + +До полного декодирования по фону до передачи зафиксирован порог первого +каскада `Q99.9 + 4 * MAD`: Q99.9 `0.023181289434432983`, MAD +`0.0025865877978503704`, threshold `0.033527640625834465`. На независимом фоне +после передачи maximum `0.030997175723314285`, кандидатов 0. Порог после +начала декодирования не менялся. Исторический строгий +`IQ_PREAMBLE_THRESHOLD = 0.65`, Lab045, PHY и FEC не менялись. + +Независимый приёмник обработал весь 24-секундный файл без смещений и периода +кадров передатчика, ожидаемого числа 68, пакетов, кодированных битов и +исходного объекта. Получено 295469 локальных максимумов, 35009 кандидатов +первого каскада и 95 обработанных неперекрывающихся гипотез. PHY-заголовок +PASS/FAIL `68/27`, FEC attempts/PASS/FAIL `68/68/0`, CRC PASS/FAIL `68/0`, +действительных кадров 68. Поиск завершился по концу записи и списка +кандидатов, а не по известному количеству кадров. + +До открытия опорных данных передатчика `ObjectAssembler` независимо принял 68 +уникальных фрагментов без дубликатов, конфликтов и пропусков: **OBJECT +COMPLETE = YES**. Только после фиксации этого вердикта выполнено сравнение с +передатчиком. Совпали 68/68 кадров, пропущено 0, ложных CRC PASS 0. До FEC +обнаружено 787 ошибок кодированных бит, после FEC 0 ошибок протокольных бит. +Восстановленный объект имеет 16384 байта, 0 ошибочных байт и 0 ошибочных бит. +SHA-256 исходного и восстановленного объектов совпадает: +`b5a27caaa3f03dfc468e71a857a06f18cf0259ca6ea21d3c42ccfde7168d1dfe`. + +SNR min/median/max для 68 кадров равен `8.302870/8.909278/9.837726 дБ`, ошибки +преамбулы `0/3/9` из 1280, CFO +`-0.214661/0.016493/0.281551 Гц`. Медианный SNR по третям сеанса снижался +`9.29 -> 8.86 -> 8.57 дБ`, но потерь кадров и CRC FAIL не было. Итог: +**LAB046C HARDWARE RESULT = A; FULL RF OBJECT TRANSPORT = PASS; 68/68 FRAMES; +OBJECT COMPLETE = YES; SHA MATCH = YES; OBJECT BYTE ERRORS = 0.** + +Большие сформированные артефакты оставлены вне Git в +`C:\Users\user\Documents\SDR_Rover_Lab046_raw\20260902_151819_1400MHz_full`. +Независимый проверяющий только чтением сверил аппаратные и независимые JSON, +арифметику порога, счётчики, размеры, SHA-256, побайтовое совпадение объектов, +временное покрытие RX над TX и очистку; расхождений не найдено. После опыта +`python tools/quick_gate.py` прошёл, `python -m pytest tests/ -q` дал 512 +passed и 0 failed, `git diff --check` прошёл. + +## Следующий этап + +STOP. Новый RF, JPEG, видео, QPSK, 180 МГц и FEC 12+3 без отдельной постановки +не начинать. diff --git a/docs/lab046_current_state.md b/docs/lab046_current_state.md index 15c860f..5d09517 100644 --- a/docs/lab046_current_state.md +++ b/docs/lab046_current_state.md @@ -8,33 +8,91 @@ **ПРОГРАММНАЯ ПРОВЕРКА НЕПРЕРЫВНОГО СЫРОГО IQ-ПОТОКА = PASS.** -**LAB046C HARDWARE RESULT = C.** +**LAB046C HARDWARE RESULT = A (FULL 1400 MHZ RF OBJECT TRANSPORT).** -**RF TX COUNT = 1.** +**FULL RF OBJECT TRANSPORT = PASS.** -**PREAMBLE CANDIDATES = 0. VALID FRAMES = 0. CRC PASS = 0.** +**RF TX PROCESS COUNT FOR THIS RESULT = 1.** -**OBJECT COMPLETE = NO.** +**VALID FRAMES = 68/68. CRC PASS = 68. CRC FAIL = 0.** -**POST-RUN TX-REFERENCE DIAGNOSTIC = 68/68 WAVEFORM TRACES DETECTED.** +**PRE-FEC CODED BIT ERRORS = 787. POST-FEC PROTOCOL BIT ERRORS = 0.** -**OFFICIAL RESULT CHANGED BY POST-RUN DIAGNOSTICS = NO.** +**OBJECT COMPLETE = YES. OBJECT SIZE = 16384 BYTES.** -**OFFLINE DETECTOR STUDY = COMPLETE.** +**SHA MATCH = YES. OBJECT BYTE ERRORS = 0. OBJECT BIT ERRORS = 0.** -**OFFLINE REPROCESSING OF ORIGINAL RX CAPTURE = FAIL.** +**HISTORICAL FIRST LAB046C AT 1080 MHZ = RESULT C.** -**OFFLINE VALID FRAMES = 0. OFFLINE OBJECT COMPLETE = NO.** +**THE HISTORICAL 1080 MHZ RESULT WAS NOT RECLASSIFIED.** -**ORIGINAL HARDWARE RESULT CHANGED = NO.** +**INDEPENDENT 1400 MHZ THRESHOLD = 0.033527640625834465.** -**CURRENT SOFTWARE GATE = PASS: quick_gate 506, pytest 506 passed, +**CURRENT SOFTWARE GATE = PASS: quick_gate 512, pytest 512 passed, git diff --check clean.** -Lab046A/B остаются только программными лабами. Для Lab046C выполнен ровно один -заранее разрешённый непрерывный RF-сеанс без повтора. Ни JPEG, ни видео, ни +Lab046A/B остаются только программными лабами. В истории Lab046C отдельно +сохранены первый полный аппаратный результат C на 1080 МГц и новый полный +аппаратный результат A на 1400 МГц. В новом опыте выполнен ровно один заранее +разрешённый непрерывный процесс передачи без повтора. Ни JPEG, ни видео, ни QPSK не запускались. +## Lab046C: полный аппаратный результат 1400 МГц, RESULT A + +2 сентября 2026 года через два HackRF передан новый криптографически случайный +объект размером 16384 байта. Он был разбит существующей архитектурой Lab046 на +68 фрагментов и передан 68 последовательными защищёнными BPSK-кадрами одним +непрерывным процессом. Частота равна 1400 МГц, частота дискретизации 8 МГц, +символьная скорость 20 ксимв/с, цифровое смещение несущей +50 кГц. Усиления не +менялись: TX VGA 10 дБ, RX LNA/VGA 24/24 дБ, RF amplifier и Bias-Tee выключены. + +Общий опорный генератор прошёл аварийно-безопасную проверку: MASTER reg29 +`0x26`, SLAVE CLKIN `DETECTED`, SLAVE reg29 `0x26`. Приём начался на +`0.7525116 с` раньше передачи и закончился на `3.6341200 с` позже неё. Файл +передачи содержит 156 835 200 комплексных отсчётов, 313 670 400 байт и +19,6044 с сигнала; процесс передачи занял 19,6408497 с. Приём содержит +192 000 000 комплексных отсчётов, 384 000 000 байт и 24,0 с сигнала; процесс +приёма занял 24,0274813 с. Переполнения приёмника, опустошения передатчика, +ограничение АЦП и приближение к пределу отсутствуют. + +До полного декодирования по фону до передачи зафиксировано правило первого +каскада `Q99.9 локальных максимумов + 4 * MAD`: Q99.9 +`0.023181289434432983`, MAD `0.0025865877978503704`, порог +`0.033527640625834465`. После начала декодирования порог не менялся. На +независимом фоне после передачи максимум равен `0.030997175723314285`, +кандидатов выше порога нет. Исторический строгий порог +`IQ_PREAMBLE_THRESHOLD = 0.65`, Lab045, PHY и FEC не менялись. + +Независимый приёмник обработал весь 24-секундный файл. Он не использовал +смещения и период кадров передатчика, ожидаемое число 68, пакеты, кодированные +биты или исходный объект. Первый каскад получил 295469 локальных максимумов и +35009 кандидатов. Строгий каскад обработал 95 неперекрывающихся гипотез: +PHY-заголовок PASS/FAIL `68/27`, FEC attempts/PASS/FAIL `68/68/0`, CRC +PASS/FAIL `68/0`, действительных кадров `68`. Поиск завершился по концу записи +и списка кандидатов, а не по достижении известного количества кадров. + +`ObjectAssembler` принял 68 уникальных фрагментов. Дубликатов, конфликтующих +дубликатов и пропусков нет. Независимый вердикт: `OBJECT COMPLETE = YES`. +Восстановленный объект размером 16384 байта был записан до открытия опорных +данных передатчика. Только после этого выполнено сравнение: все 68 кадров +совпали с 68 переданными, пропущенных кадров и ложных CRC PASS нет. Ошибки до +FEC составили 787 кодированных бит, после FEC 0 протокольных бит. Ошибки +объекта равны 0 байт и 0 бит. SHA-256 исходного и восстановленного объектов: +`b5a27caaa3f03dfc468e71a857a06f18cf0259ca6ea21d3c42ccfde7168d1dfe`. + +Для 68 принятых кадров SNR min/median/max равен +`8.302870/8.909278/9.837726 дБ`, ошибки преамбулы `0/3/9` из 1280, CFO +`-0.214661/0.016493/0.281551 Гц`. Медианный SNR по третям сеанса плавно +снижался `9.29 -> 8.86 -> 8.57 дБ`, но все кадры прошли FEC и CRC. Ошибки +начала кадра находились в пределах от -4 до +3 отсчётов. + +Фактические внешние артефакты сохранены в +`C:\Users\user\Documents\SDR_Rover_Lab046_raw\20260902_151819_1400MHz_full`. +Большие `tx_stream.cs8`, `rx_stream.cs8`, `tx_object.bin` и +`recovered_object.bin` в Git не добавляются. После результата оба CLKOUT +выключены, процессов `hackrf_transfer` нет. Независимая проверка сохранённых +JSON, размеров, SHA-256, временного покрытия и счётчиков расхождений не нашла. + ## Lab046C: подготовка аппаратного непрерывного объекта Добавлен `experiments/lab046c_hackrf_bpsk_object.py`, который не меняет @@ -76,7 +134,7 @@ MASTER reg29 `0x26`, SLAVE CLKIN `DETECTED` после 141,51 мс, SLAVE reg29 `0x26`; после проверки оба CLKOUT выключены, процессов `hackrf_transfer` нет, `RF TX = 0` на этапе подготовки. -## Lab046C: первый аппаратный результат +## Lab046C: первый аппаратный результат 1080 МГц, исторический RESULT C Выполнен ровно один непрерывный RF TX всего `tx_stream.cs8`; автоматического или ручного повтора не было. MASTER/TX @@ -469,9 +527,9 @@ 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 после результата не менялись. Следующий этап -определяется отдельной постановкой. Offline weak-signal прогон с заранее -зафиксированным правилом уже завершён как FAIL и не повторяется с другим -порогом. Новый RF-сеанс автоматически не разрешён. +Для Lab046A/B RF TX = 0. Первый полный аппаратный Lab046C на 1080 МГц сохранён +как исторический RESULT C. Новый полный аппаратный Lab046C на 1400 МГц +завершён как RESULT A: 68/68 кадров, объект 16384 байта восстановлен без +ошибок. Erasure-код 12+3 GF(256) не задействован, Lab045, PHY и FEC не +менялись. Следующий этап определяется отдельной постановкой. Новый RF-сеанс, +JPEG, видео, QPSK и переход к другой FEC автоматически не разрешены.