479 lines
41 KiB
Markdown
479 lines
41 KiB
Markdown
# Указатель лабораторных работ
|
||
|
||
Этот файл показывает, где находятся код, проверки, документы и данные
|
||
лабораторных работ. Он не заменяет отчёты и не дублирует большие IQ-записи.
|
||
Пути к внешним аппаратным данным приведены только там, где они уже зафиксированы
|
||
в документации проекта и существуют на текущем компьютере.
|
||
|
||
## Lab043
|
||
|
||
- **Цель:** воспроизводимый BPSK-канал HackRF -> HackRF с общей опорой,
|
||
независимой кадровой синхронизацией и измерением параметров радиотракта.
|
||
- **Статус:** рабочая точка BPSK и общий опорный генератор подтверждены;
|
||
дополнительные аппаратные ветви использовались для диагностики усиления,
|
||
непрерывности и асимметрии сигнала.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab043_hackrf_bpsk.py`](../experiments/lab043_hackrf_bpsk.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab043_hackrf_bpsk.py`](../tests/test_lab043_hackrf_bpsk.py).
|
||
Дополнительные проверки находятся в файлах `tests/test_lab043_*.py`.
|
||
- **Документ состояния:**
|
||
[`docs/lab043_current_state.md`](lab043_current_state.md).
|
||
- **Обработанные данные:** каталоги
|
||
[`data/processed/lab043_diagnostics`](../data/processed/lab043_diagnostics),
|
||
[`lab043_hackrf_compare`](../data/processed/lab043_hackrf_compare),
|
||
[`lab043_hackrf_continuity`](../data/processed/lab043_hackrf_continuity),
|
||
[`lab043_hackrf_counter`](../data/processed/lab043_hackrf_counter) и
|
||
[`lab043_hackrf_gain_ladder`](../data/processed/lab043_hackrf_gain_ladder).
|
||
- **Внешние аппаратные данные:**
|
||
`C:\Users\user\Documents\SDR_Rover_Lab043_raw\`.
|
||
- **Журнал:** отдельной записи с темой Lab043 нет. Переход к Lab043 указан в
|
||
записи 020, а подтверждённая рабочая точка Lab043 используется и упоминается
|
||
в записях 021-024
|
||
([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab044
|
||
|
||
- **Цель:** передача произвольного протокольного пакета через реальный
|
||
BPSK-канал HackRF с независимым решением CRC.
|
||
- **Статус:** один аппаратный запуск, `RESULT C`; преамбула и PHY sync
|
||
восстановлены, пакет не дошёл до проверки CRC.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab044_hackrf_bpsk_packet.py`](../experiments/lab044_hackrf_bpsk_packet.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab044_hackrf_bpsk_packet.py`](../tests/test_lab044_hackrf_bpsk_packet.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab044_current_state.md`](lab044_current_state.md).
|
||
- **Обработанные данные:** отдельные результаты не сохранялись; каталог
|
||
[`data/processed/lab044`](../data/processed/lab044) содержит только
|
||
навигационный README.
|
||
- **Внешние аппаратные данные:**
|
||
`C:\Users\user\Documents\SDR_Rover_Lab044_raw\20260831_140142_bpsk_packet\`.
|
||
- **Журнал:** подготовка в записи 021, аппаратный результат в записи 022
|
||
([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab045
|
||
|
||
- **Цель:** защищённый BPSK-кадр со свёрточным FEC R=1/2, K=7, перемежением,
|
||
мягким декодером Витерби, защищённым PHY-заголовком и CRC.
|
||
- **Статус:** аппаратный `RESULT A`; исправление реальных ошибок FEC доказано,
|
||
CRC пройден, полезная нагрузка восстановлена без ошибок.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab045_hackrf_bpsk_fec.py`](../experiments/lab045_hackrf_bpsk_fec.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab045_hackrf_bpsk_fec.py`](../tests/test_lab045_hackrf_bpsk_fec.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab045_current_state.md`](lab045_current_state.md).
|
||
- **Обработанные данные:** отдельные результаты не сохранялись; каталог
|
||
[`data/processed/lab045`](../data/processed/lab045) содержит только
|
||
навигационный README.
|
||
- **Внешние аппаратные данные:**
|
||
`C:\Users\user\Documents\SDR_Rover_Lab045_raw\20260901_103434_bpsk_fec\`.
|
||
- **Журнал:** программная подготовка в записи 023, аппаратный результат в
|
||
записи 024 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab046
|
||
|
||
- **Цель:** фрагментация произвольного бинарного объекта, передача его
|
||
несколькими независимо защищёнными кадрами Lab045 и аварийно-безопасная
|
||
сборка объекта.
|
||
- **Статус:** программная проверка завершена успешно; RF не запускался.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab046_bpsk_object_transport.py`](../experiments/lab046_bpsk_object_transport.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab046_bpsk_object_transport.py`](../tests/test_lab046_bpsk_object_transport.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab046_current_state.md`](lab046_current_state.md).
|
||
- **Обработанные данные:** отдельного каталога в `data/processed` нет.
|
||
- **Внешние аппаратные данные:** отсутствуют, поскольку этап программный.
|
||
- **Журнал:** запись 025 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab046A
|
||
|
||
- **Цель:** независимый поиск и приём нескольких кадров объекта в одном
|
||
непрерывном нормированном потоке мягких BPSK-значений.
|
||
- **Статус:** программная проверка завершена успешно; работа с IQ и
|
||
аппаратная проверка на этом этапе не выполнялись.
|
||
- **Основной эксперимент:** отдельного `lab046a_*.py` нет; реализация находится
|
||
в [`experiments/lab046_bpsk_object_transport.py`](../experiments/lab046_bpsk_object_transport.py).
|
||
- **Основные проверки:** отдельного `test_lab046a_*.py` нет; сценарии находятся
|
||
в [`tests/test_lab046_bpsk_object_transport.py`](../tests/test_lab046_bpsk_object_transport.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab046_current_state.md`](lab046_current_state.md).
|
||
- **Обработанные данные:** отдельного каталога в `data/processed` нет.
|
||
- **Внешние аппаратные данные:** отсутствуют, поскольку этап программный.
|
||
- **Журнал:** запись 026 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab046B
|
||
|
||
- **Цель:** поиск и приём нескольких полных кадров Lab045 в одном непрерывном
|
||
сыром IQ-потоке без использования границ кадров передатчика.
|
||
- **Статус:** программная проверка завершена успешно; RF не запускался.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab046b_continuous_iq.py`](../experiments/lab046b_continuous_iq.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab046b_continuous_iq.py`](../tests/test_lab046b_continuous_iq.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab046_current_state.md`](lab046_current_state.md).
|
||
- **Обработанные данные:** отдельного каталога в `data/processed` нет.
|
||
- **Внешние аппаратные данные:** отсутствуют, поскольку этап программный.
|
||
- **Журнал:** запись 027 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab046C
|
||
|
||
- **Цель:** непрерывная аппаратная передача объекта 16 КиБ последовательностью
|
||
защищённых BPSK-кадров и независимое восстановление объекта из IQ-записи.
|
||
- **Статус:** полный аппаратный результат на 1400 МГц равен `RESULT A`:
|
||
принято 68/68 кадров, объект восстановлен без ошибок. Первый полный опыт на
|
||
1080 МГц сохраняется отдельно как исторический `RESULT C`.
|
||
- **Основной аппаратный эксперимент:**
|
||
[`experiments/lab046c_hackrf_bpsk_object.py`](../experiments/lab046c_hackrf_bpsk_object.py).
|
||
- **Автономная обработка сохранённых записей:**
|
||
[`experiments/lab046c_offline_recovery.py`](../experiments/lab046c_offline_recovery.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab046c_hackrf_bpsk_object.py`](../tests/test_lab046c_hackrf_bpsk_object.py)
|
||
и
|
||
[`tests/test_lab046c_offline_recovery.py`](../tests/test_lab046c_offline_recovery.py).
|
||
- **Документы состояния:**
|
||
[`docs/lab046_current_state.md`](lab046_current_state.md) и отдельный отчёт
|
||
о короткой записи 1400 МГц
|
||
[`docs/lab046c_1400mhz_offline_reprocessing.md`](lab046c_1400mhz_offline_reprocessing.md).
|
||
- **Обработанные данные:** локально присутствуют каталоги
|
||
`data/processed/lab046c_offline_recovery` и
|
||
`data/processed/lab046c_1400mhz_offline`; в текущем состоянии Git их файлы
|
||
не отслеживаются.
|
||
- **Внешние аппаратные данные:**
|
||
`C:\Users\user\Documents\SDR_Rover_Lab046_raw\20260901_145339_bpsk_object\`,
|
||
`C:\Users\user\Documents\SDR_Rover_RF_Check\20260901_172749_1400MHz\` и
|
||
`C:\Users\user\Documents\SDR_Rover_Lab046_raw\20260902_151819_1400MHz_full\`.
|
||
- **Журнал:** записи 028-032 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab047
|
||
|
||
- **Цель:** передача настоящего JPEG как обычного двоичного объекта через уже
|
||
проверенный транспорт Lab046 и восстановление файла с проверкой SHA-256 и
|
||
декодирования изображения.
|
||
- **Статус:** завершена успешно. В одном непрерывном аппаратном сеансе при
|
||
1400 МГц передан настоящий JPEG: 36/36 кадров, 19 ошибок кодированных бит до
|
||
FEC, 0 ошибок после FEC, CRC PASS/FAIL 36/0. Объект собран полностью,
|
||
SHA-256 совпал, Pillow декодирует JPEG RGB 320 x 240, ошибок байтов и битов
|
||
нет. `REAL RF JPEG TRANSPORT = PASS`.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab047_jpeg_object_transport.py`](../experiments/lab047_jpeg_object_transport.py).
|
||
- **Основные проверки:**
|
||
[`tests/test_lab047_jpeg_object_transport.py`](../tests/test_lab047_jpeg_object_transport.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab047_current_state.md`](lab047_current_state.md).
|
||
- **Обработанные данные:** малые демонстрационные JPEG и отчёты находятся в
|
||
[`data/processed/lab047`](../data/processed/lab047). Большие потоки `cs8` и
|
||
сырые IQ там не хранятся.
|
||
- **Внешние аппаратные данные:** исходная RX-запись и результаты находятся в
|
||
`C:\Users\user\Documents\SDR_Rover_Lab047_raw\20260903_115747`; большие
|
||
потоки `cs8` и сырые IQ в Git не добавляются.
|
||
- **История приёма:** первоначальная обработка остановилась до PHY/FEC/CRC по
|
||
`MAX_CANDIDATES_REACHED`. После исправления последовательной обработки один
|
||
полный автономный анализ исходной записи восстановил JPEG точно; порог
|
||
`0.030964473262429237` не менялся, второй RF-сеанс не выполнялся.
|
||
- **Журнал:** записи 033-034 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab048
|
||
|
||
- **Цель:** профилирование и ускорение доказанного автономного BPSK-приёмника
|
||
без изменения детектора, PHY, FEC, CRC и порога.
|
||
- **Статус:** завершена успешно только на сохранённой RX-записи Lab047;
|
||
обработка ускорена с 37,423910 до 13,966058 с, в 2,679633 раза. Для 15,0 с
|
||
эфира отношение времени обработки равно 0,931071:
|
||
`REAL-TIME CAPABLE = YES`.
|
||
- **Результат:** сохранены 36/36 кадров, FEC PASS 36/36, CRC PASS/FAIL 36/0,
|
||
полный JPEG, точный SHA-256, 0 ошибочных байтов и битов. Порог
|
||
`0.030964473262429237` не изменён.
|
||
- **Ограничение:** приблизительный пик памяти остаётся около 1,44 ГиБ из-за
|
||
16-миллионного блока грубого поиска; запас реального времени около 1,03 с.
|
||
- **Основной эксперимент:**
|
||
[`experiments/lab048_receiver_performance.py`](../experiments/lab048_receiver_performance.py).
|
||
- **Проверки:**
|
||
[`tests/test_lab048_receiver_performance.py`](../tests/test_lab048_receiver_performance.py).
|
||
- **Документ состояния:**
|
||
[`docs/lab048_current_state.md`](lab048_current_state.md).
|
||
- **Обработанные данные:** машинный результат и восстановленный JPEG находятся
|
||
в [`data/processed/lab048`](../data/processed/lab048).
|
||
- **RF:** новый радиосеанс не выполнялся, `RF TX = 0`.
|
||
- **Журнал:** запись 035 ([`PROJECT_LOG.md`](../PROJECT_LOG.md)).
|
||
|
||
## Lab049
|
||
|
||
- **Актуальная архитектура:** RadioMaster + штатные ELRS TX/RX, CRSF к контроллеру
|
||
ровера; независимый SDR для видео и объёмных данных. Будущий SDR около 180 МГц,
|
||
лабораторная база 1400 МГц. Это не перенос штатного ELRS на 180 МГц.
|
||
- **Аудит CRSF/ELRS:** официальный релиз 4.1.0, размеры OTA 8/13 байт,
|
||
реальные интервалы и доли телеметрии; ELRS недостаточно для JPEG >3 кадра/с.
|
||
- **Бюджет SDR:** RC/критическая телеметрия в отдельном ELRS не вычитаются.
|
||
20/50/100/200 ксимв/с дают в идеале 0,09635 / 0,24088 / 0,48175 / 0,96350 JPEG/с.
|
||
Для 3/5/10 требуются минимум 622,728 / 1037,880 / 2075,760 ксимв/с
|
||
по фактическому текущему PHY. 3 — промежуточный уровень; цель >3, ориентиры 5 и 10.
|
||
- **Задача предыдущего опыта:** 20/50/100/200 ксимв/с при Fs=8 Мвыб/с,
|
||
полный независимый IQ-приём и исторический стресс-тест общего канала.
|
||
- **Актуальный результат:** идеал — 36/36 во всех режимах. Шум Eb/N0=7 dB, CFO +10 Гц:
|
||
20 — 6/36, FAIL; 50/100/200 — точный JPEG 36/36, CRC 36/0, PARTIAL.
|
||
- **Полный приёмник Lab048:** processing/IQ 16,60454 / 1,35433 / 3,60210 / 7,31872;
|
||
ни один режим не успевает в реальном времени в шумном сценарии.
|
||
- **Исторические задержки общего канала:** блокировка 288,30 / 115,32 / 57,66 / 28,83 мс. Доставка EMERGENCY
|
||
в худшей фазе включает ещё один кадр; даже на 200 она требует почти 57,66 мс.
|
||
- **Исторический стресс-тест:** CONTROL 20 Гц и TELEMETRY 10 Гц в 30 полных
|
||
кадрах/с оставляли VIDEO только на 200. Это не целевая CRSF/ELRS-архитектура.
|
||
- **Диагностический PHY-кандидат:** 50 ксимв/с, 160 выборок/символ —
|
||
наименьшая вычислительная перегрузка среди точных шумных проходов. RF не разрешён.
|
||
- **Код:** [расчётчик ELRS/SDR](../experiments/lab049_crsf_elrs_budget.py),
|
||
[Lab049 IQ](../experiments/lab049_bpsk_symbol_rate.py),
|
||
[независимый IQ-адаптер](../experiments/lab049_independent_iq.py).
|
||
- **Тесты:** [35 расчётных](../tests/test_lab049_crsf_elrs_budget.py),
|
||
[исходные](../tests/test_lab049_bpsk_symbol_rate.py),
|
||
[регрессии IQ](../tests/test_lab049_independent_iq.py).
|
||
- **Отчёт:** [архитектура CRSF/ELRS](lab049_crsf_elrs_architecture.md),
|
||
[новый бюджет JSON](../data/processed/lab049/crsf_elrs_budget.json),
|
||
[состояние](lab049_current_state.md), [аудит](lab049_audit.md),
|
||
[JSON](../data/processed/lab049/result.json).
|
||
- **История:** [старый frame-aligned результат](../data/processed/lab049/frame_aligned_result.json)
|
||
не измерял полный независимый поиск. Журнал: записи 036–038.
|
||
- **Безопасность:** свойства Lab038–041 сохраняются; сопряжение CRSF ещё не проверено.
|
||
Видео не разрешает движение при потере ELRS. Модули protocol и прежние тесты сохранены.
|
||
- **Далее:** программный Lab050 — профиль RX, поток видео и ограничение возраста очереди.
|
||
- **RF:** RF TX = 0, STOP.
|
||
|
||
## Lab050
|
||
|
||
- **Цель:** последовательность JPEG через отдельный SDR-транспорт, ограничение
|
||
возраста изображения и блочный независимый IQ-приём. Управление ELRS отдельно.
|
||
- **База:** Lab049 закреплена коммитом
|
||
`cdf5396e807b83f82a264632dc46f71428fcd616`; Lab050 не добавлена в индекс и не коммитилась.
|
||
- **Переиспользовано:** планировщик Lab035 с LATEST_ONLY и завершением активного
|
||
изображения. Добавлены готовность JPEG отдельно от съёмки, произвольный предел
|
||
возраста и прогноз RX. Поздно готовый старый снимок не вытесняет свежий.
|
||
- **Профили:** A 320×240 RGB q35 — 8724 байта; B 160×120 RGB q35 — 2771;
|
||
C 128×96 RGB q25 — 1740; D 160×120 grayscale q30 — 2028. По 30
|
||
детерминированных сдвигов исходного фото; это не видео камеры.
|
||
- **Матрица:** 240 сценариев, вход 3/5/10 кадров/с, Rs=200/400/500/800/1000 ксимв/с,
|
||
MAX_VIDEO_AGE=200/333/500/1000 мс. Ожидающая очередь ≤1.
|
||
- **Идеальная модель:** C/500k — 5 или 10 свежих кадров/с, возраст около 92,6 мс.
|
||
При камере 10 и Rs=200k, возрасте 333 мс: 14 передач, 16 замен, 4,333 свежих
|
||
кадра/с внутри окна и один дополнительный после него.
|
||
- **Потоковый RX:** 24/24 RF-пакета и 3/3 точных JPEG до `finish` на каждой скорости;
|
||
IQ-память ограничена. В шумном опыте processing/RF = 44,322 / 147,986 /
|
||
170,374 / 295,095 / 333,865. Реального времени нет.
|
||
- **Память:** удерживаемые IQ 2,13–6,51 МиБ; расчёт массивов 47,5–143,4 МиБ,
|
||
не измеренный RSS. Состояние RX не растёт вместе с длиной сессии.
|
||
- **Достижимость:** 5/10 кадров/с без QPSK — CONDITIONAL. C≤1952 байт,
|
||
500 ксимв/с, стоимость RX-пакета ≤16/12 мс для модели возраста 200 мс;
|
||
требуется ещё примерно 144/192-кратное ускорение относительно этого замера.
|
||
- **Код:** [видеомодель](../experiments/lab050_video_stream.py),
|
||
[потоковый RX](../experiments/lab050_streaming_receiver.py).
|
||
- **Проверки:** [44 теста Lab050](../tests/test_lab050_video_stream.py),
|
||
quick_gate — 650 тестов и 14 функциональных проверок; независимые verifier/adversary.
|
||
- **Отчёт:** [состояние](lab050_current_state.md),
|
||
[JSON](../data/processed/lab050/result.json),
|
||
[замеры RX](../data/processed/lab050/receiver_benchmarks.json). Журнал: запись 039.
|
||
- **Далее:** Lab051 — профиль и ускорение строгой обработки ложных кандидатов.
|
||
- **RF:** RF TX = 0. Lab050 commit/push не выполнялись. STOP.
|
||
|
||
## Lab051
|
||
|
||
- **Цель:** алгоритмически ускорить независимый блочный RX на 500 ксимв/с,
|
||
16 отсчётов/символ, Fs=8 Мвыб/с; проверить 5 свежих JPEG C в секунду.
|
||
- **База:** Lab050 закреплена разрешённым коммитом
|
||
`60691a09f193f36983c7174c5252ed0897c559e9`.
|
||
- **Профиль:** главная стоимость Lab050 — fallback timing, 41,833 с на ложных
|
||
кандидатах. Полный диапазон 1601 смещения сохранён и вычисляется через FFT
|
||
и накопленные энергии, с исходным выбором на неразделимых пиках.
|
||
- **Изменения:** общий front-end, точное повторное использование децимации,
|
||
кэш результатов уточнённого окна, короткий probe до PHY PASS, предвычисленные
|
||
метрики прежнего Viterbi. Порог, PHY/FEC/CRC и protocol не менялись.
|
||
- **Короткий контроль:** 24/24 пакета, 3/3 точных JPEG; медиана трёх повторов
|
||
1,144176 с вместо исторических 55,157553 с. Processing/RF=3,534193.
|
||
- **Основной поток:** 30 JPEG за 6 с, 240/240 пакетов, SHA MATCH 30/30.
|
||
Обработка 6,044416 с IQ заняла 38,630132 с, processing/RF=6,391045.
|
||
При MAX_VIDEO_AGE=200 мс все 30 JPEG просрочены; FRESH DISPLAY FPS=0.
|
||
Цель реального времени не достигнута, включая минимальную свежесть >0.
|
||
- **Память:** пик удерживаемого IQ 3,031 МиБ, RSS процесса в опыте измерен.
|
||
Тест 33,55 с не показывает роста IQ/кэша с длительностью. Это не готовая live-
|
||
очередь: непрерывный источник потребовал бы около 2,09 ГБ внешнего backlog.
|
||
- **Регрессия:** сохранённая Lab047-запись 20 ксимв/с штатным Lab048:
|
||
36/36, CRC PASS, JPEG SHA MATCH; 19 ошибок до FEC и 0 после.
|
||
- **Код:** [приёмник](../experiments/lab051_streaming_receiver.py),
|
||
[профилировщик](../experiments/lab051_receiver_profile.py),
|
||
[полный поток](../experiments/lab051_receiver_performance.py),
|
||
[38 тестов](../tests/test_lab051_streaming_receiver.py).
|
||
- **Отчёт:** [состояние](lab051_current_state.md),
|
||
[измеренный поток](../data/processed/lab051/stream.json). Журнал: запись 040.
|
||
- **Далее:** отдельное программное исследование стоимости уникальных фоновых
|
||
кандидатов в полном потоке 5 кадров/с с тем же PHY/FEC/CRC.
|
||
- **RF / Git:** RF TX=0; Lab051 git add/commit и push не выполнялись. STOP.
|
||
|
||
## Lab052
|
||
|
||
- **Цель:** снизить число ложных строгих проверок на 500 ксимв/с при сохранении
|
||
BPSK, PRBS7, PHY/FEC/CRC, фрагментации и всех принимаемых настоящих пакетов.
|
||
- **База:** Lab051 закреплена разрешённым коммитом
|
||
`9f33607d3ae82992c595de37dd64e99d7e4dea73`; 13 файлов, без push.
|
||
- **Профиль:** 1675842 локальных пика, 392785 кандидатов первого каскада;
|
||
прежний RX выполнил 147005 строгих проверок: 146765 ложных и 240 истинных.
|
||
Исторические 147082 Lab051 означали все кандидаты, а не только ложные.
|
||
- **Алгоритм:** общий дешёвый расчёт корреляций двух половин преамбулы,
|
||
локальная нормировка каждой половины; ограниченная полная ширина группы
|
||
20480 отсчётов, максимум первым, альтернативы сохраняются после FAIL.
|
||
Первый порог прежний; VALID только после штатного PHY/FEC/CRC.
|
||
- **Отвергнутый вариант:** безусловное подавление соседних меньших пиков
|
||
теряло слабый пакет рядом с сильной ложной преамбулой. Контрпример adversary
|
||
исправлен и закреплён тестами, включая границы блоков и плохую CRC.
|
||
- **Кандидаты:** 388407 отклонены дешёво, 384 группы, 243 представителя +12
|
||
альтернативных строгих проверок; 15 ложных, 240 настоящих, 0 потерь.
|
||
Сокращение ложных строгих проверок 9784,33×. Все 240 уникальных стартов совпали.
|
||
- **Полный поток:** C/5 JPEG в секунду, 30 изображений, 240/240 пакетов,
|
||
30/30 JPEG SHA MATCH. Медианный полный проход 7,369795 с /6,044416 с IQ
|
||
=1,219273. Возраст 234,520/834,077/1549,595 мс, все 30 просрочены,
|
||
**FRESH DISPLAY FPS=0; REAL-TIME CAPABLE=NO**.
|
||
- **Остаточная нагрузка:** настоящие пакеты 3,996005 с, общая децимация/
|
||
корреляция 1,790240 с. Все ложные проверки вместе лишь 28,884 мс.
|
||
- **Память:** удерживаемый IQ 3,031 МиБ, инженерная оценка массивов 136,161 МиБ,
|
||
измеренный process RSS peak 160,984 МиБ. Шумовой тест 16,78 с не накапливает
|
||
IQ/кандидатов; внешний live-backlog остаётся нереализованным.
|
||
- **Регрессии:** 37/45 слабых сценариев у обоих приёмников, 0 дополнительных
|
||
потерь. Старая запись 20 ксимв/с: 36/36, CRC PASS, JPEG SHA MATCH.
|
||
- **Код:** [обнаружитель](../experiments/lab052_candidate_detection.py),
|
||
[опыты](../experiments/lab052_detector_study.py),
|
||
[статистика](../experiments/lab052_detection_statistics.py),
|
||
[30 тестов](../tests/test_lab052_candidate_detection.py).
|
||
- **Отчёт:** [состояние](lab052_current_state.md),
|
||
[основной поток](../data/processed/lab052/stream.json). Журнал: запись 041.
|
||
- **Далее:** отдельное исследование истинных пакетов, общей обработки IQ и
|
||
задержки JPEG-пачки; текущий этап завершить на программных результатах.
|
||
- **RF / Git:** RF TX=0; Lab052 git add/commit и push не выполнялись. STOP.
|
||
|
||
## Lab053 — стоимость настоящих пакетов и потоковая обработка на CPU
|
||
|
||
- **Режим:** BPSK 500 ксимв/с, Fs 8 Мвыб/с, 16 отсчётов/символ;
|
||
JPEG C (128×96 RGB, q25), 5 кадров/с, предел возраста 200 мс.
|
||
- **База:** Lab052 закреплена коммитом
|
||
`cc38900caea4b310568edc691be7db124503fd21` — 27 файлов, без push.
|
||
- **Изменения:** локальные окна строгих расчётов, кольцевой IQ-буфер,
|
||
неизменный алгоритм Viterbi с CPU JIT, раздельные стадии ввода/RX/JPEG.
|
||
Общие децимация и корреляции сохранены; все 1601 timing-offset проверяются.
|
||
PHY/FEC/CRC, пороги и порядок кандидатов Lab052 не изменены.
|
||
- **Стоимость пакета:** среднее 7,016 мс, медиана 6,862 мс, p95 8,292 мс;
|
||
40 пакетов/с требуют около 0,281 с работы обработчика на секунду потока.
|
||
- **Производительность:** 4,384788 с суммарной работы стадий на 6,044416 с IQ,
|
||
отношение 0,725428. Отдельный полный проход без ожидания источника:
|
||
4,010478 с, отношение 0,663501. Прогрев JIT выполнен до приёма IQ.
|
||
- **Свежесть:** 240/240 пакетов, 30/30 точных JPEG, 5 свежих кадров/с;
|
||
возраст 150,298 / 153,996 / 176,062 мс. Три полных прохода прошли критерии.
|
||
Проверены 1/2/4 работника; выбран один, дополнительные не дали выигрыша.
|
||
- **Очереди и память:** IQ максимум 5/8 блоков, строгие задания 1/4;
|
||
переполнений нет. IQ 3,031 МиБ, выделенное кольцо 6,483 МиБ,
|
||
инженерная оценка рабочих массивов с резервами 72,720 МиБ,
|
||
измеренный пик RSS процесса 197,199 МиБ. Это разные показатели памяти.
|
||
- **Длинный поток:** 24,044416 с IQ, 960/960 пакетов, 120/120 точных JPEG,
|
||
5 свежих кадров/с, максимальный возраст 189,396 мс, отношение 0,742840;
|
||
IQ максимум 7/8, состояние ограничено, после закрытия очищено.
|
||
- **Регрессии:** те же 240 решений и 255 строгих кандидатов при 1/2/4 работниках;
|
||
37/45 слабых случаев у обоих приёмников, без новых потерь.
|
||
Старая запись 20 ксимв/с: 36/36, CRC и SHA PASS.
|
||
- **Проверки:** 50 новых тестов; полный pytest 768 passed;
|
||
quick_gate 768 тестов /26 функциональных /13 штатных пропусков, PASS.
|
||
Verifier и adversary подтвердили результаты. Отрицательные опыты
|
||
без JIT и с замедлением ввода фиксируют переполнение и прекращение потока.
|
||
- **Отчёт:** [состояние](lab053_current_state.md),
|
||
[критерии](../data/processed/lab053/acceptance.json),
|
||
[основной поток](../data/processed/lab053/stream.json),
|
||
[графики](../data/processed/lab053/performance_and_age.png). Журнал: запись 042.
|
||
- **Границы результата:** программная подача IQ по часам; камера, экран и
|
||
аппаратный приём не проверены. GPU не использована, RF TX=0.
|
||
- **Далее:** рассмотрение результатов ChatGPT. Lab053 git add/commit и push
|
||
не выполнялись. STOP.
|
||
|
||
## Lab055 — энергетический аудит сохранённых Lab047 и Lab054
|
||
|
||
- **Режим:** только файлы, RF TX=0; HackRF не запускался, Lab054 NOT_A сохранён.
|
||
- **Результат:** цифровая мощность активного TX практически одинакова
|
||
(1950,308/1950,598 код²), согласованная компонента RX в модели уменьшилась
|
||
на15,413дБ. Фон в одинаковой полосе675кГц сопоставим. Выходная RF-мощность
|
||
без калибровки неизвестна; одинаковый TX VGA не является её измерением.
|
||
- **Границы:** условная потеря13,98дБ из-за скорости требует постоянных
|
||
принятой мощности и N0; эти условия не подтверждены. Остаток модели
|
||
содержит шум и искажения. Описан только план кабельного измерения.
|
||
- **Проверки:**9 целевых тестов; pytest823 passed; quick_gate823/28/13 PASS;
|
||
verifier без остаточных находок. Исходные IQ и результаты неизменны.
|
||
- **Отчёт:** [состояние](lab055_current_state.md),
|
||
[итоговый расчёт](../data/processed/lab055/energy_audit_v2.json), журнал046.
|
||
- **Далее:** 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`, бинарные объекты и другие аппаратные исходные
|
||
данные остаются во внешних каталогах. В `data/processed` хранятся только
|
||
небольшие обработанные результаты или навигационные README. Пустые и
|
||
фиктивные файлы результатов не создаются.
|
||
|
||
## Lab057 — OFFLINE-диагностика ошибок символов и заголовка Lab054
|
||
|
||
- **Запись 051; только сохранённые данные, RF TX=0.** Полный независимый baseline
|
||
воспроизвёл 100 прежних кандидатов, 100 PHY_HEADER_MAGIC_MISMATCH, FEC/CRC
|
||
NOT_REACHED и 0/16 пакетов. Штатные PHY/RRC/FEC/CRC не изменялись.
|
||
- **Пять фиксированных вариантов:** S0; D0 — фаза по TRAIN; D1 — нулевой
|
||
остаточный CFO; D2 — CFO по TRAIN; D3 — дополнительно локальный timing.
|
||
Ошибки VALIDATION: 3494/3775/3355/3440/3466 из 9216. Header/CRC: у всех 0/16.
|
||
D1 улучшает VALIDATION против S0 на 1,5082 п.п., массовые ошибки сохраняются.
|
||
Единственная первопричина не установлена; PA не назначается.
|
||
- **Контроли:** TX054 16/16, RX047 36/36 во всех вариантах; фон 0/16.
|
||
Утечка DC из VALIDATION в оценивание TRAIN устранена и независимо проверена.
|
||
19 новых тестов; pytest 886 passed, quick_gate 886/31/13 PASS.
|
||
- [Постановка и ограничения](lab057_current_state.md), [итоговый отчёт](lab057_offline_result.md),
|
||
[CSV](../data/processed/lab057/frame_results.csv), [JSON](../data/processed/lab057/summary.json),
|
||
[график](../data/processed/lab057/comparison.png), [проверки](../data/processed/lab057/acceptance.json).
|
||
- **STOP:** исторический Lab054 NOT_A, 0/16 сохранён. Lab057 не коммитилась,
|
||
push не выполнялся; следующий OFFLINE-анализ Lab056 требует отдельного согласования.
|