Files
SDR-Rover/docs/LABS_INDEX.md
2026-09-08 16:04:09 +03:00

26 KiB
Raw Blame History

Указатель лабораторных работ

Этот файл показывает, где находятся код, проверки, документы и данные лабораторных работ. Он не заменяет отчёты и не дублирует большие IQ-записи. Пути к внешним аппаратным данным приведены только там, где они уже зафиксированы в документации проекта и существуют на текущем компьютере.

Lab043

  • Цель: воспроизводимый BPSK-канал HackRF -> HackRF с общей опорой, независимой кадровой синхронизацией и измерением параметров радиотракта.
  • Статус: рабочая точка BPSK и общий опорный генератор подтверждены; дополнительные аппаратные ветви использовались для диагностики усиления, непрерывности и асимметрии сигнала.
  • Основной эксперимент: experiments/lab043_hackrf_bpsk.py.
  • Основные проверки: tests/test_lab043_hackrf_bpsk.py. Дополнительные проверки находятся в файлах tests/test_lab043_*.py.
  • Документ состояния: docs/lab043_current_state.md.
  • Обработанные данные: каталоги data/processed/lab043_diagnostics, lab043_hackrf_compare, lab043_hackrf_continuity, lab043_hackrf_counter и lab043_hackrf_gain_ladder.
  • Внешние аппаратные данные: C:\Users\user\Documents\SDR_Rover_Lab043_raw\.
  • Журнал: отдельной записи с темой Lab043 нет. Переход к Lab043 указан в записи 020, а подтверждённая рабочая точка Lab043 используется и упоминается в записях 021-024 (PROJECT_LOG.md).

Lab044

  • Цель: передача произвольного протокольного пакета через реальный BPSK-канал HackRF с независимым решением CRC.
  • Статус: один аппаратный запуск, RESULT C; преамбула и PHY sync восстановлены, пакет не дошёл до проверки CRC.
  • Основной эксперимент: experiments/lab044_hackrf_bpsk_packet.py.
  • Основные проверки: tests/test_lab044_hackrf_bpsk_packet.py.
  • Документ состояния: docs/lab044_current_state.md.
  • Обработанные данные: отдельные результаты не сохранялись; каталог data/processed/lab044 содержит только навигационный README.
  • Внешние аппаратные данные: C:\Users\user\Documents\SDR_Rover_Lab044_raw\20260831_140142_bpsk_packet\.
  • Журнал: подготовка в записи 021, аппаратный результат в записи 022 (PROJECT_LOG.md).

Lab045

  • Цель: защищённый BPSK-кадр со свёрточным FEC R=1/2, K=7, перемежением, мягким декодером Витерби, защищённым PHY-заголовком и CRC.
  • Статус: аппаратный RESULT A; исправление реальных ошибок FEC доказано, CRC пройден, полезная нагрузка восстановлена без ошибок.
  • Основной эксперимент: experiments/lab045_hackrf_bpsk_fec.py.
  • Основные проверки: tests/test_lab045_hackrf_bpsk_fec.py.
  • Документ состояния: docs/lab045_current_state.md.
  • Обработанные данные: отдельные результаты не сохранялись; каталог data/processed/lab045 содержит только навигационный README.
  • Внешние аппаратные данные: C:\Users\user\Documents\SDR_Rover_Lab045_raw\20260901_103434_bpsk_fec\.
  • Журнал: программная подготовка в записи 023, аппаратный результат в записи 024 (PROJECT_LOG.md).

Lab046

  • Цель: фрагментация произвольного бинарного объекта, передача его несколькими независимо защищёнными кадрами Lab045 и аварийно-безопасная сборка объекта.
  • Статус: программная проверка завершена успешно; RF не запускался.
  • Основной эксперимент: experiments/lab046_bpsk_object_transport.py.
  • Основные проверки: tests/test_lab046_bpsk_object_transport.py.
  • Документ состояния: docs/lab046_current_state.md.
  • Обработанные данные: отдельного каталога в data/processed нет.
  • Внешние аппаратные данные: отсутствуют, поскольку этап программный.
  • Журнал: запись 025 (PROJECT_LOG.md).

Lab046A

  • Цель: независимый поиск и приём нескольких кадров объекта в одном непрерывном нормированном потоке мягких BPSK-значений.
  • Статус: программная проверка завершена успешно; работа с IQ и аппаратная проверка на этом этапе не выполнялись.
  • Основной эксперимент: отдельного lab046a_*.py нет; реализация находится в experiments/lab046_bpsk_object_transport.py.
  • Основные проверки: отдельного test_lab046a_*.py нет; сценарии находятся в tests/test_lab046_bpsk_object_transport.py.
  • Документ состояния: docs/lab046_current_state.md.
  • Обработанные данные: отдельного каталога в data/processed нет.
  • Внешние аппаратные данные: отсутствуют, поскольку этап программный.
  • Журнал: запись 026 (PROJECT_LOG.md).

Lab046B

  • Цель: поиск и приём нескольких полных кадров Lab045 в одном непрерывном сыром IQ-потоке без использования границ кадров передатчика.
  • Статус: программная проверка завершена успешно; RF не запускался.
  • Основной эксперимент: experiments/lab046b_continuous_iq.py.
  • Основные проверки: tests/test_lab046b_continuous_iq.py.
  • Документ состояния: docs/lab046_current_state.md.
  • Обработанные данные: отдельного каталога в data/processed нет.
  • Внешние аппаратные данные: отсутствуют, поскольку этап программный.
  • Журнал: запись 027 (PROJECT_LOG.md).

Lab046C

  • Цель: непрерывная аппаратная передача объекта 16 КиБ последовательностью защищённых BPSK-кадров и независимое восстановление объекта из IQ-записи.
  • Статус: полный аппаратный результат на 1400 МГц равен RESULT A: принято 68/68 кадров, объект восстановлен без ошибок. Первый полный опыт на 1080 МГц сохраняется отдельно как исторический RESULT C.
  • Основной аппаратный эксперимент: experiments/lab046c_hackrf_bpsk_object.py.
  • Автономная обработка сохранённых записей: experiments/lab046c_offline_recovery.py.
  • Основные проверки: tests/test_lab046c_hackrf_bpsk_object.py и tests/test_lab046c_offline_recovery.py.
  • Документы состояния: docs/lab046_current_state.md и отдельный отчёт о короткой записи 1400 МГц docs/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).

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.
  • Основные проверки: tests/test_lab047_jpeg_object_transport.py.
  • Документ состояния: docs/lab047_current_state.md.
  • Обработанные данные: малые демонстрационные JPEG и отчёты находятся в 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).

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.
  • Проверки: tests/test_lab048_receiver_performance.py.
  • Документ состояния: docs/lab048_current_state.md.
  • Обработанные данные: машинный результат и восстановленный JPEG находятся в data/processed/lab048.
  • RF: новый радиосеанс не выполнялся, RF TX = 0.
  • Журнал: запись 035 (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, Lab049 IQ, независимый IQ-адаптер.
  • Тесты: 35 расчётных, исходные, регрессии IQ.
  • Отчёт: архитектура CRSF/ELRS, новый бюджет JSON, состояние, аудит, JSON.
  • История: старый frame-aligned результат не измерял полный независимый поиск. Журнал: записи 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-кратное ускорение относительно этого замера.
  • Код: видеомодель, потоковый RX.
  • Проверки: 44 теста Lab050, quick_gate — 650 тестов и 14 функциональных проверок; независимые verifier/adversary.
  • Отчёт: состояние, JSON, замеры RX. Журнал: запись 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 после.
  • Код: приёмник, профилировщик, полный поток, 38 тестов.
  • Отчёт: состояние, измеренный поток. Журнал: запись 040.
  • Далее: отдельное программное исследование стоимости уникальных фоновых кандидатов в полном потоке 5 кадров/с с тем же PHY/FEC/CRC.
  • RF / Git: RF TX=0; Lab051 git add/commit и push не выполнялись. STOP.

Правило хранения данных

Большие записи IQ, потоки cs8, бинарные объекты и другие аппаратные исходные данные остаются во внешних каталогах. В data/processed хранятся только небольшие обработанные результаты или навигационные README. Пустые и фиктивные файлы результатов не создаются.