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

Лабораторная 7.4 — Приёмная цепочка пакетов и обнаружение кадра

Цель

Ввести компактный поток приёма пакетов:

  • известная преамбула;
  • нормализация AGC;
  • обнаружение кадра согласованным фильтром;
  • анализ ложных срабатываний и пропусков.

Зачем это нужно

Приёмник, который работает постоянно, должен на каждом отсчёте отвечать на вопрос, которого loopback-симуляция никогда не задаёт: начинается ли здесь вообще пакет? Отвечать слишком охотно это шум вызовет ложные обнаружения, которые тратят ресурс декодера и портят статистику; слишком осторожно, вы пропустите настоящие пакеты. Стандартный инструмент это согласованный фильтр по известной преамбуле, нормированный так, чтобы оценка не зависела от (неизвестной и меняющейся) амплитуды сигнала: именно для этого служат шаг AGC и нормировка на энергию в detection_metric(). Положение пика затем служит грубым кадровым таймингом, от которого стартуют все последующие этапы синхронизации (Блок 8), поэтому детектор, срабатывающий «примерно там», недостаточно хорош.

Инженерный вопрос

Насколько надёжно можно обнаруживать начало пакетов и количественно оценивать пропуски и ложные обнаружения до перехода к полным цепочкам синхронизации?

Исполняемый файл

Файл Назначение
blocks/block_07_tx_rx_chains/python/lab_7_4_packet_receiver_detection.py генерация пакетов, детектор, метрики

Запуск из корня репозитория:

python blocks/block_07_tx_rx_chains/python/lab_7_4_packet_receiver_detection.py

Сгенерированные артефакты

docs/assets/lab74_packet_detection_metric.png
docs/assets/lab74_packet_detection_timeline.png
docs/assets/lab74_packet_receiver_metrics.json

Ключевые метрики

Метрика Смысл
true_positives пакеты, обнаруженные в пределах допуска
false_positives обнаружения, не соответствующие настоящему пакету
misses настоящие пакеты, которые не обнаружены
detection_probability TP / число настоящих пакетов
false_alarm_rate FP / число отсчётов метрики
среднее/СКО ошибки тайминга качество синхронизации для обнаруженных пакетов

Чего ожидать

С параметрами по умолчанию (12 пакетов, 64-символьная BPSK-преамбула при 4 отсчётах на символ, случайные амплитуды пакетов 0,55–1,25, шум 0,22 rms, порог 0,20, допуск 16 отсчётов):

True packets: 12
Detected candidates: 12
TP / FP / Miss: 12 / 0 / 0
Detection probability / miss rate / false alarm rate: 1.000 / 0.000 / 0.000000
Timing error mean/std (samples): 0.00 / 0.00

На что стоит посмотреть на графиках:

  • Метрика достигает около 0,9 в каждом истинном начале и держится на шумовой полке около 0,05 (редко выше 0,18) в промежутках и внутри payload. Нормированная оценка равна |<x, preamble>| / (|preamble|·|x|), поэтому близка к 1 лишь когда принятое окно действительно похоже на преамбулу, независимо от громкости пакета.
  • Ошибка тайминга здесь ровно нулевая, потому что модель синтетическая, выровнена по отсчётам и не содержит сдвига несущей или неизвестной дробной задержки. На реальных захватах этого ждать не стоит: положение пика реального детектора неопределённо на долю символа и уточняется петлями тайминга Блока 8.
  • Допуск (16 отсчётов = 4 символа): часть определения «обнаружен». Обнаружение, попавшее в 100 отсчётах от истинного начала, не является синхронизированным пакетом, даже если что-то пересекло порог; всегда указывайте допуск рядом с вероятностью обнаружения.

Упражнения

  1. Пройдите порог от 0,10 до 0,70 с шагом 0,05. При каком пороге исчезает первое ложное срабатывание и какой запас остаётся между ним и самым слабым истинным пиком? (С параметрами по умолчанию 0,10 и 0,15 дают одно ложное срабатывание, 0,20 и выше: ни одного.) Почему порог чуть выше шумовой полки хрупок?
  2. Поднимите noise_rms до 0,5, затем до 1,0. Когда вероятность обнаружения начинает падать и что появляется раньше: пропуск или ложное срабатывание?
  3. Уменьшите preamble_symbols вдвое, до 32. Как меняется разрыв между истинными пиками и шумовой полкой и что это говорит о том, зачем в реальных пакетах длинные преамбулы?
  4. Умножьте принятый поток на exp(j·2π·f·n/fs) для f = 200, 1000, 2000 и 5000 Гц. Посчитайте фазу, которую сдвиг накапливает на 256-отсчётной преамбуле (2π·f·256/fs), и сравните с детектором: средний истинный пик падает с примерно 0,91 до 0,83, 0,57 и 0,19, а на 5 кГц пропускаются все пакеты. Почему согласованный фильтр терпит долю радиана, но рушится, когда фаза проходит полный оборот, и что делал бы по-другому детектор, устойчивый к CFO? (Это мотивация оценщиков CFO из Блока 8.)
Ответы (проверены запуском скрипта лабораторной)
  1. Числа приведены в упражнении. Порог чуть выше шумового пола хрупок, потому что пол не постоянен: он зависит от длины преамбулы (упражнение 3) и от того, что ещё есть в потоке, а пик каждого пакета зависит от его собственного SNR. Ставьте порог посередине промежутка между наибольшим значением пола и самым слабым истинным пиком.
  2. Детектор держится гораздо дольше, чем предполагает упражнение: при noise_rms 0,5 и 1,0 найдены все 12 пакетов (средний истинный пик 0,73 и 0,49). Первый пропуск появляется при 1,5 (самый слабый пакет даёт пик 0,18 ниже порога 0,20), а при 3,0 пропущено пять из двенадцати. Ложная тревога не появляется вовсе: метрика нормирована на энергию окна, поэтому рост шума снижает и пол (99,9-й процентиль 0,24 → 0,17), и пики. Первыми идут пропуски.
  3. Истинные пики остаются около 0,93, но пол растёт с 0,24 до 0,34 (99,9-й процентиль) и при пороге 0,20 появляется одна ложная тревога. Пол нормированной корреляции масштабируется как 1/√L, и уменьшение L вдвое поднимает его в √2 раз: 0,243 × 1,41 = 0,34. Длинная преамбула покупает зазор между «пакетом» и «чем-то ещё».
  4. Согласованный фильтр складывает отсчёты преамбулы когерентно; набег фазы φ по преамбуле уменьшает сумму примерно в |sinc(φ/2π)|. Доля радиана почти ничего не стоит; когда фаза проходит полный оборот, вклады взаимно гасятся. CFO-устойчивый детектор коррелирует короткие отрезки по отдельности и складывает их модули, или перебирает набор частотных смещений, или использует дифференциальную метрику (задержка и умножение), которую смещение лишь поворачивает.

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

  • Указаны длина преамбулы, порог и допуск.
  • Приложен график метрики с порогом и обнаружениями.
  • Приложен график временной шкалы с истинными и обнаруженными началами.
  • Указаны TP/FP/пропуски и вероятность обнаружения.
  • Объяснён компромисс порога (доля пропусков против ложных срабатываний).