Перейти к содержанию

Лабораторная 11.14 — Резервный путь BPSK OTA со стороны хоста в стоковом shell

Цель

Дать практический RF-резервный путь, пока интегрированный overlay PL BPSK всё ещё заблокирован проблемой runtime-refill RX / rx_valid_count.

Расшифровка простыми словами

  • stock-shell (стоковый shell): обычная вендорская базовая линия Linux + PL платы после регулярной загрузки, до горячей загрузки какого-либо overlay курса во время работы.
  • OTA (over the air, по воздуху): передача через антенны в свободном пространстве, а не через коаксиальный кабель loopback.
  • BPSK (binary phase-shift keying, двоичная фазовая манипуляция): двухпозиционная цифровая модуляция, где каждый символ несёт один бит.
  • fallback (резервный путь): временный, но практичный маршрут, используемый, пока основной тракт модема PL заблокирован.
  • evidence (доказательства): сохранённый манифест, JSON метрик или график, доказывающий, что на самом деле произошло на стенде.

Эта работа не использует модем PL курса. Вместо этого она использует чистый стоковый shell Linux AD9361 и буферы libiio на стороне хоста, чтобы:

  • синтезировать детерминированный пакет BPSK по той же идее преамбулы/payload курса, что и в эталонном пакете;
  • передать этот пакет по стоковому тракту DMA TX;
  • захватить его обратно по стоковому тракту DMA RX;
  • обнаружить кадр, выровнять символы и сообщить BER/EVM.

Это полезно для двух вещей:

  1. доказать, что сам короткий путь по воздуху TX1 -> RX1 жизнеспособен;
  2. отделить проблемы RF-канала от всё ещё открытой проблемы запуска overlay PL.

Файлы

Путь Назначение
blocks/block_11_integrated_sdr_project/python/lab_11_14_stock_shell_bpsk_ota.py помощник BPSK TX/RX стокового shell под управлением хоста с анализом BER/EVM

Запуск

Для следующего живого прогона на стенде при чистой стоковой загрузке:

python blocks/block_11_integrated_sdr_project/python/lab_11_14_stock_shell_bpsk_ota.py \
  --run-tag live_ota_bpsk

Помощник:

  • настраивает стоковый тракт TX/RX AD9361;
  • отключает генераторы тонов DDS;
  • пропускает циклический пакет BPSK через cf-ad9361-dds-core-lpc;
  • захватывает короткое окно RX CI16 с cf-ad9361-lpc;
  • сохраняет захват, эталон TX, манифест, JSON метрик и базовые графики.

Безопасные первые настройки

Значения по умолчанию в репозитории намеренно консервативны:

  • центральная частота 915 МГц;
  • частота дискретизации 3,84 МС/с;
  • символьная скорость 240 ксимв/с при 16 отсчётах на символ;
  • ослабление TX -50 дБ;
  • ручное усиление RX 35 дБ.

Если преамбула не захватывается, сначала увеличьте усиление RX, а уже потом мощность TX.

Синтетический самотест

Прежде чем трогать железо, скрипт может проверить собственную логику формирования сигнала и обнаружения кадра локально:

python blocks/block_11_integrated_sdr_project/python/lab_11_14_stock_shell_bpsk_ota.py \
  --synthetic-test \
  --run-tag synthetic_selftest

Этот путь уже самопроверяется и локально достигает нулевого BER.

Текущий статус

По состоянию на 2026-06-23 этот помощник подготовлен как следующий резервный шаг на чистом стенде. Необходимость в нём напрямую вытекает из текущего раскола при запуске:

  • стоковый shell по-прежнему поддерживает RX-захват на хосте до любой перезагрузки overlay;
  • загруженный в runtime overlay курса восстанавливает axi_gpreg, но после этого по-прежнему лишает данных тракт refill RX;
  • поэтому следующий RF-вопрос лучше всего сначала решать на стоковом shell, используя BPSK под управлением хоста по проверенному тракту DMA TX/RX.

Живой результат 2026-06-23

Первый чистый прогон на стенде в стоковом shell теперь завершён и прошёл успешно с закоммиченным помощником.

Эталонный прогон:

python blocks/block_11_integrated_sdr_project/python/lab_11_14_stock_shell_bpsk_ota.py \
  --run-tag live_20260623d

Наблюдаемый результат:

  • центральная частота 915 МГц;
  • частота дискретизации 3,84 МС/с;
  • символьная скорость 240 ксимв/с;
  • ослабление TX -50 дБ;
  • ручное усиление RX 35 дБ;
  • BER полный = 0;
  • BER payload = 0;
  • EVM = 54,98 %.

Эти числа получены с опорой на эталон: усиление/фаза подгоняются по всему известному кадру, и остаётся кандидат с наименьшим числом битовых ошибок. Пересчёт 2026-09-24 по закоммиченной записи с оценкой приёмника из Lab 11.20 (усиление/фаза по преамбуле, PLL по решениям, только биты нагрузки): 0 / 256 битовых ошибок нагрузки, EVM 53,9 %. Значит, высокий EVM: свойство этой записи, а не артефакт оценки фазы.

Артефакты:

  • datasets/lab11_14_stock_shell_bpsk_ota/manifest_live_20260623d.yaml
  • docs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_metrics.json
  • docs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_spectrum.png
  • docs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_constellation.png
  • docs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_matched_filter.png

Помощник теперь также принудительно выполняет безопасное восстановление TX после прогона через SSH/sysfs, так что стенд возвращается к:

  • TX_LO powerdown = 1;
  • TX attenuation = -89,75 дБ;
  • состояния sync_start_enable стокового shell без изменений.

Практический вывод: короткий путь OTA TX1 -> RX1 теперь проверен на стоковом shell AD9361. Оставшийся блокировщик: уже не «может ли плата излучать и принимать этот пакет BPSK?», а именно «как восстановить тот же маршрут внутри overlay PL курса, не ломая runtime-тракт RX?».