Files
SDR-Rover/docs/lab055_current_state.md

373 lines
31 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lab055 — энергетический аудит сохранённых Lab047 и Lab054
Дата: 9 сентября 2026 года. Только обработка файлов, RF TX = 0.
## Что установлено простыми словами
1. **Цифровая амплитуда передачи практически не изменилась.** Средняя мощность
активной части TX равна 1950,308 и 1950,598 код²: различие всего +0,000645 дБ.
RMS обоих полных файлов около 44 кодов, ограничения отсчётов нет.
2. **Согласованная с TX компонента принятого сигнала существенно ослабла.**
Её медианная мощность в модели канала уменьшилась с 0,202732 до
0,00582916 код², то есть на 15,413 дБ, примерно в 34,8 раза. Это оценка
компоненты в цифровом RX, описываемой моделью, а не измерение ватт на разъёме.
3. **Фон в одинаковой широкой полосе сопоставим.** В полосе 675 кГц медианы
0,117815 и 0,112066 код². Признака роста фона на десятки децибел нет.
Фон меняется между окнами и до/после передачи. Остаток после вычитания
модели содержит также искажения: особенно в Lab047 он выше отдельного фона.
4. **Подтверждено падение цифровой энергии TX на символ на 13,9788 дБ**, поскольку
измеренная средняя цифровая мощность сохранилась, а скорость выросла в 25 раз.
Это не доказывает, что 13,98 дБ ухудшения приёма вызваны только скоростью:
условие неизменной полезной принятой мощности не выполнено даже в модели.
5. **Без измерительного прибора не установлены** выходная RF-мощность обеих
передач, мощность на входе RX, потери конкретного подключения, фактическая
аналоговая характеристика и разложение ослабления между этими причинами.
Одинаковое TX VGA = 10 дБ не доказывает одинаковую выходную мощность.
6. **Внешний усилитель пока преждевременен.** Для ближайшей диагностики нужен
контролируемый кабельный/экранированный стенд, известное ослабление и измерение
уровней. По одному SNR назначать мощность усилителя в ваттах нельзя.
Исторический Lab054 остаётся **NOT_A, 0/16 пакетов**. TX reference используется
после независимого решения только для диагностики. Нового декодирования,
изменения порогов, частот, усилений, PHY/FEC/CRC или радиопередачи не было.
## Артефакты и происхождение данных
Основной результат: [energy_audit_v2.json](../data/processed/lab055/energy_audit_v2.json).
Анализатор: [lab055_energy_audit.py](../experiments/lab055_energy_audit.py).
Тесты: [test_lab055_energy_audit.py](../tests/test_lab055_energy_audit.py).
Первый `energy_audit.json` сохранён как предварительный и заменён в выводах V2:
Welch недовзвешивал защитные края TX, а окно поиска задержки задевало проверочную
плитку. В V2 для TX применена полная прямоугольная периодограмма каждого кадра;
поиск задержки защищён внутренними отступами. Сценарий утечки воспроизведён
verifier, превращён в тест и после исправления повторно пройден. Первичные
аппаратные записи и результаты обоих опытов не перезаписывались.
Lab047: `C:\Users\user\Documents\SDR_Rover_Lab047_raw\20260903_115747`.
Это аппаратная RX-запись единственного сеанса 3 сентября, а не программный
loopback JPEG. Первичная обработка была незавершена из-за лимита кандидатов;
позднейший независимый анализ именно этой записи принял 36 кадров и восстановил
точный JPEG. Основания: `docs/lab047_current_state.md`, `capture_result.json`,
`independent_reprocess_result_corrected.json` и `post_verdict_diagnostics.json`.
Lab054: `data/raw/lab054`, единственный сеанс 9 сентября. Официальная сводка:
`data/processed/lab054/rf_summary.json`; независимо принято 0/16.
| Параметр | Lab047 | Lab054 | Основание |
|---|---:|---:|---|
| Формат | signed int8 I,Q | signed int8 I,Q | Метаданные, чётный размер, декодирование байтов |
| TX, байт | 166060800 | 2952192 | Фактические файлы |
| RX, байт | 240000000 | 48000000 | Фактические файлы |
| TX, с | 10,3788 | 0,184512 | Число IQ/Fs |
| RX, с | 15 | 3 | Число IQ/Fs |
| Частота дискретизации | 8 Мвыб/с | 8 Мвыб/с | TX/RX stderr и метаданные |
| Центральная RF-частота | 1400 МГц | 1400 МГц | TX/RX stderr |
| Скорость | 20000 симв/с | 500000 симв/с | Метаданные и формирователи |
| Отсчётов/символ | 400 | 16 | Fs/Rs, код и длины кадров |
| Цифровая несущая | +50 кГц | +50 кГц | Метаданные и формирователи |
| TX VGA | 10 дБ | 10 дБ | Метаданные и команды runner; аппаратного readback нет |
| RX LNA/VGA | 24/24 дБ | 24/24 дБ | Метаданные и команды runner; аппаратного readback нет |
| RF amplifier/Bias-Tee | OFF/OFF | OFF/OFF | Метаданные, команды, stderr |
| RRC | α=0,35, span=10 | α=0,35, span=10 | Восстановлено из кода |
| Аналоговый baseband-фильтр | UNKNOWN | UNKNOWN | Явного `-b` и readback полосы в артефактах нет |
| Выходная мощность, дБм | UNKNOWN | UNKNOWN | Измеренной калибровки нет |
| Кабели/антенны/ослабление/расстояние | Не подтверждены как неизменные | Не подтверждены как неизменные | Разные сеансы |
В обоих журналах одна пара HackRF r9: TX serial заканчивается `323b97d3`,
RX — `2e5327d3`; firmware/libhackrf 2024.02.1. Идентичность платы и настроек
не устанавливает неизменность аналогового тракта. Аппаратуру сейчас не опрашивали.
SHA-256 проверены чтением блоками и совпали с историческими метаданными:
```text
Lab047 TX 001a0c11128d18b2b8e3e67a3e8416a84174ed0e383887836186a10aa45beded
Lab047 RX 8521bf1b574cd1fe4e0a4f980c00c8664f8bb51551a241e46449e1eb2c77e635
Lab054 TX e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5
Lab054 RX 641886879964250c315dd399d469503808aae43fb319bef05e0bf2a78bf14585
```
JSON содержит SHA всех входных файлов в обоих аппаратных каталогах и
`data/processed/lab054`. После расчёта их хеши проверены повторно: неизменны.
## Метод, окна и единицы
Для комплексного цифрового отсчёта x=I+jQ:
```text
μ = mean(x)
P = mean(|x|²) [код²]
P_AC = mean(|x−μ|²) [код²]
RMS = sqrt(P) [код]
PAPR = 10 log10(max(|x|²)/P) [дБ]
Es_digital = P/Rs [код²·с]
```
Код TX и код RX не переводятся в ватты и не считаются одной калиброванной
физической шкалой. Пиковое значение цифрового кода не является RF-мощностью.
Весь TX анализируется покадрово: 2306400 отсчётов/кадр у Lab047 и 92256 у
Lab054. «Активная часть» определена одинаково: центральное окно после удаления
21·SPS отсчётов с каждого края, то есть 5724 символьных интервала. Guard=16
символов плюс половина RRC span=5. Полный файл включает все защитные интервалы
и хвосты. Это фиксированное структурное окно, не амплитудный порог.
Статистика моментов суммируется по всем отсчётам. TX-полоса интегрируется по
прямоугольной периодограмме каждого полного или активного окна; интеграл
по всей частотной оси удовлетворяет Парсевалю. Точка спектрального максимума
вместо интегральной мощности нигде не используется.
Фон: отдельные окна по 0,1 с, из каждого удаляется собственное комплексное
среднее. Начала окон в секундах:
```text
Lab047: 0.05,0.20,0.35,0.50; 12.05,12.4,12.75,13.1,13.45,13.8
Lab054: 0.02,0.12,0.22,0.32; 1.0,1.25,1.5,1.75,2.0,2.5,2.8
```
Все эти окна находятся вне диагностически найденной передачи. PSD фона:
двусторонний Welch комплексного сигнала, periodic Hann, 65536 отсчётов,
перекрытие 32768, без дополнительного detrend; шаг 122,0703125 Гц. Каждое
фоновое окно содержит 23 сегмента Welch. Мощность полосы — сумма PSD·Δf;
средняя плотность в полосе — эта мощность, делённая на её ширину. Все сравниваемые
абсолютные полосы центрированы на +50 кГц: 27, 675 и 1000 кГц.
Модель RX: `y[n] = d + g*x[n−τ]*exp(j2πf*n/Fs) + r[n]`.
Это плоский комплексный коэффициент, постоянная составляющая, целочисленная
задержка и постоянный CFO внутри кадра. Частотно-зависимый канал, дробная
задержка, изменение усиления внутри кадра, нелинейность и все помехи остаются
в r. Поэтому мощность модели — оценка согласованной компоненты, не гарантированная
полная мощность всех полезных RF-компонент.
Активный кадр делится на 8 плиток. Чётные 0,2,4,6 обучают CFO/g/DC, нечётные
1,3,5,7 проверяют модель. Длительность плитки: 35,775 мс и 1,431 мс.
Задержка обучается только внутри плитки 0: reference `[2m:L−2m]`, поиск RX
`[m:L−m]`, m=SPS. При любом выбранном сдвиге ±m поиск остаётся внутри итоговой
обучающей плитки. Исходные начала Lab047 берутся из принятого независимого
результата; Lab054 — из завершённой диагностики 16 известных следов. Это
намеренное использование TX после verdict, не независимый поиск кадров.
Проверочная мощность модели — `mean(|g*x_corrected|²)`, остаток —
`mean(|y−d−g*x_corrected|²)`. Сохраняется перекрёстный член, поскольку вне
обучающей выборки нельзя автоматически записывать P_RX=P_model+P_residual.
Медианный перекрёстный член: 0,0000904 и 0,0002491 код². Подгонка по конечному
шумному обучающему набору может завышать |g|²; проверка на других плитках
уменьшает оптимизм остатка, но не устраняет всю неопределённость модели.
PSD остатка считается для каждой проверочной плитки отдельно, затем усредняется;
разорванные окна не склеиваются. Welch использует min(65536, длина плитки),
поэтому у Lab054 спектральная сетка остатка грубее, чем у фоновых окон.
Мощности интегрируются, сравнение отдельных пиков не проводится.
Чтение — read-only memmap; в обработке один кадр/одно фоновое окно, а не несколько
копий полной 240-МБ записи. Наибольший исходный кадр содержит 2,3064 млн IQ.
## Цифровая передача
| Метрика | Lab047 | Lab054 |
|---|---:|---:|
| Mean I, весь TX, код | −0,00005353 | −0,0852262 |
| Mean Q, весь TX, код | −0,00003583 | +0,2849923 |
| Mean I/Q, active, код | −0,00005730 / −0,00054603 | −0,0883308 / +0,2855104 |
| P весь TX, код² | 1936,234201 | 1936,512534 |
| P active, код² | 1950,308025 | 1950,597617 |
| RMS весь TX, код | 44,002661 | 44,005824 |
| RMS active, код | 44,162292 | 44,165570 |
| Максимальный модуль IQ, код | 70,17834 | 70,00000 |
| Максимум abs(I)/abs(Q), код | 69 / 70 | 67 / 70 |
| Ограниченные компоненты/отсчёты | 0 / 0 | 0 / 0 |
| PAPR весь TX, дБ | 4,05448 | 4,03176 |
| PAPR active, дБ | 4,02303 | 4,00028 |
| P в собственной полосе, весь TX, код², среднее кадров | 1935,91206 | 1936,20139 |
| P в собственной полосе, active, код², среднее кадров | 1949,94924 | 1950,24632 |
| Es весь TX, код²·с | 0,096811710 | 0,0038730251 |
| Es active, код²·с | 0,097515401 | 0,0039011952 |
Собственная расчётная полоса `(1+α)Rs`: 27 и 675 кГц. Границы относительно
центра HackRF: +36,5…+63,5 и −287,5…+387,5 кГц. Небольшая ненулевая средняя
Lab054 относится к конечной широкополосной цифровой форме, пересекающей ноль.
Формирователь сначала сворачивает импульсную последовательность с RRC единичной
энергии и умножает на 0,70. На этой промежуточной ступени энергия импульса в
сумме квадратов почти постоянна, а средняя мощность масштабируется как 1/SPS.
Затем и старый `_scale_and_carrier`, и параметрический
`build_parameterized_tx_complex` **нормируют всю форму к RMS 44** и квантуют CS8.
Следовательно, итоговый инвариант — средняя цифровая мощность всего кадра;
пиковая амплитуда зависит от последовательности, энергия на символ не постоянна.
Источник: `lab044_hackrf_bpsk_packet.py:189`, `lab049_bpsk_symbol_rate.py:153`.
## RX: сигнал, фон и остаток
Тройки означают min / median / max по 36 или 16 кадрам либо по 10/11 фоновым
окнам. Полные покадровые и пооконные значения находятся в JSON.
| Метрика, единицы | Lab047 | Lab054 |
|---|---:|---:|
| DC фона I, код | 0,93661 / 0,94647 / 0,95317 | 0,94343 / 0,95945 / 0,96513 |
| DC фона Q, код | 1,82984 / 1,83810 / 1,85304 | 1,81475 / 1,82897 / 1,84521 |
| DC активного RX I/Q, среднее кадров, код | 0,95030 / 1,82697 | 0,95036 / 1,83411 |
| Фон после DC, вся цифровая полоса, код² | 0,80744 / 0,90063 / 2,40830 | 0,76492 / 0,77637 / 1,05093 |
| Фон в 27 кГц, код² | 0,004791 / 0,009997 / 0,011033 | 0,006595 / 0,007428 / 0,009188 |
| Фон в 675 кГц, код² | 0,076705 / 0,117815 / 0,141878 | 0,101860 / 0,112066 / 0,136654 |
| Фон в 1 МГц, код² | 0,101003 / 0,142208 / 0,178637 | 0,133711 / 0,144025 / 0,175794 |
| Плотность фона в 27 кГц, код²/Гц | 1,775e−7 / 3,703e−7 / 4,086e−7 | 2,442e−7 / 2,751e−7 / 3,403e−7 |
| Плотность фона в 675 кГц, код²/Гц | 1,136e−7 / 1,745e−7 / 2,102e−7 | 1,509e−7 / 1,660e−7 / 2,025e−7 |
| Согласованная компонента RX, код² | 0,18848 / 0,20273 / 0,22969 | 0,004902 / 0,005829 / 0,007671 |
| Модуль коэффициента g, RX-код/TX-код | 0,009833 / 0,010195 / 0,010854 | 0,001585 / 0,001729 / 0,001984 |
| Остаток на обучении, вся полоса, код² | 0,82150 / 0,97775 / 1,50614 | 0,72737 / 0,75433 / 0,95130 |
| Остаток на проверке, вся полоса, код² | 0,83542 / 0,96131 / 1,85690 | 0,73922 / 0,82244 / 1,03050 |
| Остаток проверки в 27 кГц, код² | 0,017821 / 0,019407 / 0,024829 | 0,006205 / 0,008370 / 0,009905 |
| Остаток проверки в 675 кГц, код² | 0,122124 / 0,132075 / 0,171027 | 0,111024 / 0,121966 / 0,149865 |
В собственной полосе фон вырос с 0,009997 до 0,112066 код² главным образом
из-за изменения ширины и положения полосы. Эта строка не означает рост
спектральной плотности шума приёмника. В одинаковых абсолютных полосах
увеличения такой величины нет.
Фон нестационарен. Медианный эквивалентный N0 Lab047 до передачи равен
2,1901e−7, после — 4,0330e−7 код²/Гц. У Lab054 — 1,9005e−7 и 1,8744e−7.
Единственный максимум 2,4083 код² широкополосного фона Lab047 не используется
как типичный уровень. Нельзя переносить фон до/после TX на время передачи
без дополнительного предположения о стационарности.
## Согласованный фильтр и условная энергетическая модель
Конвенция комплексного белого шума: `E|w|²=σ²`, дисперсия каждой из I и Q
равна σ²/2, двусторонняя комплексная PSD `N0=σ²/Fs`. Дополнительного множителя
2 в интеграле нет. Реальный фон окрашен и включает помехи/квантование;
его плотность не объявляется измеренным тепловым N0.
```text
Pn_out = ∫ Sbackground(f) |H(f−fc)|² df
ENBW = Fs·Σ|h[n]|² / |Σh[n]|²
N0_equivalent = Pn_out / (Fs·Σ|h[n]|²)
Es/N0_equivalent = Pmodel / (Rs·N0_equivalent) [условная оценка]
```
N0_equivalent — плотность белого комплексного шума, который дал бы ту же
выходную мощность данного RRC. Она зависит от выбранного фильтра и положения
в окрашенном спектре. Поэтому различие N0_equivalent между режимами включает
изменение спектрального взвешивания, а не только физическое изменение шума.
| Параметр | Lab047 | Lab054 |
|---|---:|---:|
| RRC taps | 4001 | 161 |
| Σh² | ≈1 | ≈1 |
| Задержка одного RRC, отсчёты | 2000 | 80 |
| Усиление мощности на центре полосы | 396,55892 | 15,87720 |
| ENBW, Гц | 20173,547 | 503867,304 |
| Фон после RRC, код², min/median/max | 1,48735 / 3,11017 / 3,37378 | 1,34855 / 1,49956 / 1,82704 |
| N0_equivalent, код²/Гц, min/median/max | 1,859e−7 / 3,888e−7 / 4,217e−7 | 1,686e−7 / 1,874e−7 / 2,284e−7 |
| Остаток проверки после RRC, код², min/median/max | 5,87405 / 6,41205 / 8,13390 | 1,48590 / 1,67147 / 2,01445 |
| Условное Es/N0_equivalent по медианам, дБ | +14,1620 | −12,0624 |
Формальное разложение для выбранных сопоставимых определений:
```text
ΔPmodel = −15,41316 дБ
10log10(Rs054/Rs047) = +13,97940 дБ
ΔN0_equivalent = −3,16822 дБ
Δ(Es/N0_equivalent) = −15,41316 − 13,97940 − (−3,16822)
= −26,22434 дБ
```
Это арифметика модели по медианам, **не установленное распределение физических
причин потерь**. Полезная модельная мощность не постоянна; фон нестационарен;
изменилось спектральное взвешивание. Полная полезная RF-мощность вне модели
не измерена. Условие «полезная принятая мощность и N0 неизменны» не подтверждено.
Фраза «14 дБ уже объяснены скоростью, осталось 9 дБ» для этих данных некорректна.
Если в том же выражении вместо фонового Pn_out поставить фильтрованный остаток
проверки, получаются +11,0199 и −12,5337 дБ, изменение −23,5536 дБ.
Это **отношение к эквивалентному остатку**, не Es/N0. Остаток/фон после RRC
равен примерно 2,06 у Lab047 и 1,11 у Lab054. Так видна причина различия между
условной моделью и прежними измерениями SNR преамбулы (+10,85/−12,32 дБ).
Метрики измеряют разные величины на разных окнах; прежние результаты не исправлялись.
## Уход от нулевой частоты — только расчёт
Полоса Lab054 пересекает ноль; смещение +500 кГц поместило бы её в
+162,5…+837,5 кГц. Взвешивание сохранённого фона перенесённым RRC даёт медианные
выигрыши 3,06/3,21/3,21 дБ для +500/+750/+1000 кГц относительно +50 кГц.
Предполагается одинаковая передача полезной компоненты через аналоговый тракт,
что не измерено. Цифровая перестройка старой записи не является испытанием
другого аналогового режима. Реальная несущая не менялась.
## Только план следующего измерения
Никакие действия из этого раздела не выполнены и не разрешаются этим отчётом.
Наличие измерителя мощности, анализатора спектра, калиброванных ослабителей,
нагрузки 50 Ом и экранированного корпуса пока не установлено.
1. Зафиксировать отдельно допустимую частоту, схему и имеющиеся приборы.
Использовать соединение TX → измеряемый отвод/измеритель → известный
ослабитель → RX, с согласованными 50-омными портами; измерение TX сначала
выполнить на эквиваленте нагрузки. Исключить антенны и неконтролируемое излучение.
2. Измерить реальную выходную мощность обеих цифровых форм на одной частоте,
при одинаковом TX VGA и неизменных кабелях/нагрузке. Зафиксировать среднюю
мощность, полосу, погрешность прибора и соответствующие цифровые RMS/PAPR.
3. Проверить ослабление и потери кабелей в рабочей полосе. Вычислять входной
уровень RX по измеренной мощности TX и измеренным потерям; не соединять
порты напрямую. Предусмотреть запас ниже аппаратного предела и отдельно
проверить отсутствие насыщения АЦП при выбранных RX-усилениях.
4. Измерить фон RX с согласованной нагрузкой и при выключенном TX на той же
схеме. Получить калиброванную плотность входного шума и проверить аналоговую
полосу. Требуемый уровень для выбранного критерия приёма затем рассчитывать
как `P_required = N0_input + 10log10(Rs) + (Es/N0)_required` в согласованных
единицах. Сам порог требуется определить программными тестами/контрольным
измерением, а не назначить по неудачному кадру.
5. После отдельного согласования проверить обе скорости с одинаковой
**измеренной** входной мощностью RX и неизменной схемой. Только такой контроль
проверит условную потерю энергии на символ при постоянной мощности.
Документация HackRF указывает максимальную входную мощность −5 дБм; это предел
защиты, не целевой рабочий уровень и не чувствительность. Чувствительность
конкретного режима требует измерения. [Официальная документация HackRF](https://hackrf.readthedocs.io/en/latest/hackrf_one.html).
На 1400–1427 МГц запрещены все излучения по п. 5.340 Регламента радиосвязи ITU.
Разрешения на новый эфир в этой полосе нет; план требует допустимой частоты
и отдельно согласованной измерительной схемы. Проверен официальный документ,
п. 5.340, PDF стр. 115:
[ITU Radio Regulations, Volume 1, 2024](https://www.itu.int/en/ITU-R/seminars/rrs/rrs-25-africa/Plenaries/0.%20ITU-R%20Regulatory%20Documents/1.%20Radio%20Regulations%20%202024%20and%20Rules%20of%20Procedure/Radio%20Regulations%20Ed%202024/RR_Ed-2024_Vol%201-E.pdf).
Архитектура сохранена: RadioMaster/ExpressLRS/CRSF — отдельное управление;
SDR — видео с целью не менее 5 свежих изображений/с; будущий видеодиапазон
около 180 МГц. Этот аудит не подтверждает работоспособность будущего диапазона
и не назначает мощность внешнего усилителя.
## Проверки и воспроизведение
```powershell
python -m pytest tests/test_lab055_energy_audit.py -q
python experiments/lab055_energy_audit.py --output data/processed/lab055/recheck_01.json
python tools/quick_gate.py
python -m pytest tests/ -q
git diff --check
```
Анализатор отказывается перезаписывать существующий выход и сохраняет новый
JSON только внутри `data/processed/lab055`. `recheck_01.json` должен быть новым.
Для воспроизведения нужны локальные исходные IQ по указанным путям; тесты
этого требования не имеют. Проверка не запускает оборудование.
Целевые тесты: **9 passed**. Verifier независимо проверил целочисленные суммы
TX, PSD через отдельные FFT, Парсеваль, взвешенную регрессию CFO, комплексный
МНК и проверочные мощности. Найденная утечка устранена; остаточных находок нет.
Полные шлюзы: `quick_gate` PASS — 823 теста, 28 функциональных проверок,
13 штатных пропусков; отдельный `pytest tests/ -q` — **823 passed**, 89,15 с.
Единственное предупреждение pytest относится к недоступной записи его кеша;
проверки завершились с кодом 0. `git diff --check` — PASS.
HEAD: `0368c6d3e930f4d245e056223fd4e5c4f70e6b49`, ветка `main`.
Существующие изменения Lab054 сохранены. Изменения Lab055: отдельные анализатор,
тесты, JSON, этот отчёт; добавляются только новая запись журнала и ссылка индекса.
```text
RF TX = 0
HACKRF = NOT STARTED
LAB054 HISTORICAL RESULT = NOT_A, 0/16
GIT ADD / COMMIT / PUSH / PULL / FETCH = NOT PERFORMED
STOP. Следующий этап — согласование измерительной схемы и приборов;
никакого автоматического аппаратного продолжения.
```