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

Лабораторная 11.20 — Чтение WAV IQ RTL-SDR, демодуляция OTA BPSK и измерение BER

Цель

Офлайн обработать запись WAV IQ, сделанную RTL-SDR в роли пассивного RF-монитора, демодулировать BPSK-пакет, захваченный с антенны TX ZynqSDR, и сообщить BER и EVM относительно известной эталонной битовой последовательности курса.

Эта работа: офлайн-анализ, парный к работам с живым захватом (11.21–11.22). Она принимает путь к файлу WAV (плюс необязательный манифест YAML) и создаёт самодостаточный пакет доказательств BER/EVM без какого-либо железа.

Контекст

Подход с внешним монитором RTL-SDR принят потому, что:

  • тракт PL RX у ZynqSDR по-прежнему стоит на rx_valid_count = 0;
  • RTL-SDR может независимо принимать сигнал TX ZynqSDR по воздуху;
  • запись WAV, сделанную в Lab 11.21 или 11.22, можно воспроизводить офлайн любое число раз с разными параметрами демодулятора.

Файлы

Путь Назначение
blocks/block_11_integrated_sdr_project/python/lab_11_20_read_rtl_wav_ota_bpsk_ber.py загрузить WAV, нормализовать IQ, обнаружить кадр BPSK, вычислить BER/EVM

Запуск

python blocks/block_11_integrated_sdr_project/python/lab_11_20_read_rtl_wav_ota_bpsk_ber.py \
  --manifest datasets/lab11_20_rtl_sdr_ota_bpsk/manifest_live_20260624a.yaml

WAV-файлы не хранятся в git (они занимают сотни мегабайт). Поле манифеста local_path_hint_windows указывает, какой файл ищет анализатор; чтобы указать свою копию, передайте --iq-path.

Цепочка обработки

файл WAV (int16 I/Q) -> комплексный float, убрана глобальная DC
  -> кандидаты грубой частоты: пики спектра около ожидаемого смещения
  -> для каждого кандидата: перенос в основную полосу, передискретизация к частоте
     эталона, вырезка активного окна, согласованный RRC-фильтр
  -> сетка точной частоты x 16 фаз отсчёта: корреляция с 25-битной преамбулой
  -> две оценки лучшего кадра:
       с опорой на эталон: усиление/фаза подгоняются по всему известному кадру,
                           остаётся кандидат с наименьшим числом битовых ошибок
       приёмник:           кандидат с наибольшей нормированной корреляцией с
                           преамбулой, усиление/фаза по преамбуле, PLL по решениям,
                           BER только по 256 битам полезной нагрузки
  -> графики и метрики JSON

Числа с опорой на эталон используют известную полезную нагрузку, которой нет ни у одного приёмника. Это верхняя граница качества линии. Оценка приёмника: то, чего мог бы добиться реальный демодулятор этого кадра.

Ожидаемый формат WAV

WAV должен быть 16-битным стерео (левый = I, правый = Q) либо 16-битным моно с чередующимися I/Q, как выдаёт помощник захвата RTL-SDR (Lab 11.21 / 11.22).

sample_rate = частота из заголовка WAV (например, 3 840 000 или 2 400 000)
samples     = 16-битные знаковые целые
layout      = I[0] Q[0] I[1] Q[1] ...

Ожидаемые результаты

Файл Содержимое
docs/assets/lab1120_<tag>_spectrum.png спектр RX в основной полосе
docs/assets/lab1120_<tag>_constellation.png созвездие символов
docs/assets/lab1120_<tag>_ber_metrics.json BER, EVM, число отсчётов, смещение тайминга

Критерии успеха

Метрика Цель
BER полный ≤ 1 % (или 0 для чистого OTA)
EVM записать и сравнить с согласованной базовой линией; универсального порога прохождения не используется, пока не откалибрована нормировка амплитуды/тайминга
Кадр обнаружен да

Пересчёт записей: 2026-09-24

Обе записи от 2026-06-24, WAV которых доступны локально, проанализированы текущим скриптом:

Запись Ошибки с опорой на эталон EVM с опорой на эталон Ошибки приёмника (нагрузка) EVM приёмника
manifest_live_20260624_stock_10cm_ref 0 / 281 10,60 % 0 / 256 9,97 %
manifest_live_20260624a 0 / 281 20,64 % 0 / 256 9,47 %
  • BER = 0 сохраняется для реального приёмника на обеих записях (по 256 бит нагрузки, поэтому утверждение: лишь «ниже примерно 1 %», см. правило трёх в Лабораторной 8.7).
  • EVM с опорой на эталон может быть хуже, чем у приёмника. На 20260624a выбранная коррекция частоты ровно 2600,000 Гц: узел сетки точного поиска. Небольшое остаточное смещение продолжает вращать созвездие вдоль кадра. Один коэффициент усиления/фазы на весь кадр не может следовать за этим вращением, поэтому EVM равен 20,6 %; PLL его отслеживает и получает 9,5 %. EVM, измеренный без отслеживания фазы, включает ошибку самого оценщика, а не только канала.

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

Этот результат получен с опорой на эталон и не пересчитывался: его WAV локально недоступен.

Применённый к записи WAV, снятой во время OTA-прогона BPSK в стоковом shell (Lab 11.21), офлайн-демодулятор обнаружил преамбулу, восстановил 281 бит payload и измерил BER = 0 / EVM ≈ 55 %. Это проходит ворота восстановления бит, а высокий EVM остаётся диагностическим результатом, а не признаком качества модуляции. Он совпадает с базовой линией AD9361 на плате из Lab 11.14 (EVM = 54,98 %), поэтому будущие захваты следует сравнивать с этой базовой линией, пока нормировка не пересмотрена.

Чек-лист отчёта

  • Указан источник файла WAV (какая работа его записала).
  • Указаны частота дискретизации WAV и центральная частота из манифеста.
  • Приложен график созвездия.
  • Записаны BER и EVM.
  • Указано, обнаружен ли кадр и сколько бит payload восстановлено.

Шаблон инженерного вывода

Запись WAV RTL-SDR из ____ на ____ МГц (Fs = ____ МС/с) демодулирована офлайн. Обнаружение
кадра: ____. Восстановлено бит payload: ____. BER = ____. EVM = ____ %. OTA-канал BPSK
подтверждён / не подтверждён как работоспособный, потому что ______.