Лабораторная 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
подтверждён / не подтверждён как работоспособный, потому что ______.