Лабораторная 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.
Это полезно для двух вещей:
- доказать, что сам короткий путь по воздуху TX1 -> RX1 жизнеспособен;
- отделить проблемы 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.yamldocs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_metrics.jsondocs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_spectrum.pngdocs/assets/lab114_stock_shell_bpsk_ota_live_20260623d_constellation.pngdocs/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?».