Files
SDR-Rover/docs/lab049_audit.md
2026-09-08 13:26:06 +03:00

7.0 KiB
Raw Permalink Blame History

Lab049: аудит исходного незакоммиченного варианта

8 сентября 2026 года. Корень C:/Users/user/Desktop/projects/SDR_Rover, ветка main, HEAD ac6cc792b896e34f7dd6d291955a0387fdafcf41. До работы уже существовали незакоммиченные реализация Lab049, тесты, data/processed/lab049/result.json, документ состояния и запись 036 журнала. Прежний JSON сохранён; он относится к выровненным кадрам и не является результатом полного независимого приёмника.

Карта архитектуры

  1. Базовый Rs задан в experiments/lab043_hackrf_bpsk.py: 20 000 символов/с. Lab044 и Lab045 наследуют его, Lab047 явно проверяет аппаратную точку.
  2. В Lab043 SAMPLES_PER_SYMBOL = SAMPLE_RATE_HZ // SYMBOL_RATE; Lab047 отдельно фиксирует 400. Lab049 теперь отвергает дробные частоты и нецелое отношение, не округляя вход.
  3. Жёсткие зависимости Lab043: _refine_frame_start, _matched_filter_taps, _matched_waveform, _preamble_timing_offset, _estimate_cfo_gain, _evaluate_symbols. Lab044: _scale_and_carrier, _preamble_reference_samples. Lab045: длительности TransmissionPlan; Lab046B: _extract_soft_window и _decode_iq_candidate. Временные шкалы используют Rs, фильтры и индексы — samples/symbol. В локальном поиске также есть фиксированные пределы ±800 и ±2000 выборок; они сохранены.
  4. shape_frame_like_lab042, RRC-фильтр ядра, преобразования бит/BPSK, фрагментация, packet/PHY header, FEC, перемежитель, CRC и сборка объекта уже параметрические либо вообще не зависят от Rs.
  5. protocol/priority_scheduler.py: строгий приоритет четырёх классов, непрерываемая передача пакета и LATEST_STATE для ожидающих состояний. Lab034–Lab036 добавили удаление устаревших изображений и изоляцию видеокадров в собственных блоках FEC; это внешнее стирающее кодирование видео, не новый свёрточный FEC Lab045.
  6. Минимальная доработка: адаптер скорости и чтения синтетического IQ к lab046c_offline_recovery.stream_process_capture, который используется Lab048; разделение ожидания/доставки и активного окна/опустошения очереди. Новый планировщик и изменения protocol/ не потребовались.

Проверка Lab033–Lab041

Сверены сохранённые отчёты этих лабораторий и связанные модули. Lab033 подтверждает строгий приоритет и отдельно считает ожидание начала и завершение передачи. Lab034: frame-aligned FEC изолирует удаляемое изображение, начатый пакет не прерывается. Lab035–Lab036 ограничивают возраст изображения и число ожидающих кадров. Lab037 подтверждает вставку управления между пакетами VIDEO. Lab038–Lab040 добавляют failsafe, аварийную защёлку, повторы и ACK; Lab041 — сеансы/перезапуски. Эти механизмы безопасности в Lab049 не заменены и не заявлены как аппаратно проверенные.

CONTROL взят из последнего Lab041: ControlStateMessage, 36 байт, 20 Гц; с 32-байтным LinkPacket — 68 байт и 10 880 бит/с до физического кодирования. TELEMETRY наследуется из Lab037 через Lab038–Lab041: синтетические 64 байта, 10 Гц, с LinkPacket — 96 байт и 7680 бит/с. Отдельного формата физических измерений телеметрии эти лаборатории не задают.

Воспроизведённые несоответствия

Проверки выполнены независимыми verifier и adversary, без правок с их стороны и без оборудования.

  • Исходный receive_iq_frame: идеальный кадр 100 ксимв/с проходит CRC, добавление 240 нулевых выборок перед ним даёт PHY=False, CRC=NOT_REACHED. Поиск ограничивался двумя символами от известной TX-границы.
  • Добавление +10 Гц к тому же кадру даёт PHY=True, CRC=NOT_REACHED; +100 Гц — PHY=False. Остаточная частота не оценивалась.
  • При 100 ксимв/с старый отчёт CONTROL max 47,980 мс описывал начало, а получение пакета занимает 105,640 мс; пропущены 6 сроков CONTROL. EMERGENCY: 30,240 мс до начала, 87,900 мс до получения — пропущен срок 50 мс.
  • При 200 ксимв/с EMERGENCY через 1 мкс после VIDEO доставляется через 57,659 мс, а не за 50 мс. Штатный failsafe до получения пакета остаётся в normal. Блокировка 28,83 мс и доставка почти 57,66 мс — разные метрики.
  • На 20/50/100 ксимв/с в двухсекундном окне не доставлено ни одного TELEMETRY. Единственное сообщение старой таблицы доставляется при последующем опустошении очереди.

Регрессии воспроизводятся командой:

python -m pytest tests/test_lab049_independent_iq.py -q

Исторический receive_iq_frame сохранён для локальных регрессий формы; основной проход Lab049 его больше не использует. Старые тесты не изменены. Новый RX получает полный поток, самостоятельно находит начало, оценивает CFO, фазу и полярность. PRBS7, физические и пакетные форматы, FEC, CRC и порог Lab047 0.030964473262429237 сохранены.

RF TX = 0. Git add/commit/push/pull/fetch не выполнялись.