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

Лабораторная 3.6 — Свёртка и корреляция в SDR

Эта лабораторная разделяет две операции, которые часто смешивают на раннем этапе изучения DSP: свёртку для фильтрации и корреляцию для обнаружения. Это детерминированная script-driven работа, без notebook-подхода.

Цель

На одном синтетическом SDR-сигнале показать две разные инженерные роли:

Операция Роль в SDR Следствие для FPGA / реализации
Свёртка FIR-фильтрация, pulse shaping, отклик канала. Multiply-accumulate структура, задержка, квантование коэффициентов.
Корреляция Обнаружение преамбулы, оценка задержки, синхронизация. Скользящий matched filter, ширина аккумулятора, threshold logic.

Команда запуска

Из корня репозитория:

python blocks/block_03_dsp_basics/python/lab_3_6_convolution_correlation.py

Или через общий reproducibility suite:

python tools/run_all_labs.py

Генерируемые артефакты

Артефакт Назначение
docs/assets/lab36_convolution_filtering.png Свёртка как FIR-фильтрация.
docs/assets/lab36_correlation_detection.png Пик matched correlation для обнаружения преамбулы.
docs/assets/lab36_correlation_metrics.json Оценка задержки, ошибка задержки и peak-to-median метрика.

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

  1. Почему свёртка является естественной операцией для FIR-фильтрации?
  2. Почему корреляция является естественной операцией для обнаружения преамбулы?
  3. Как шум влияет на корреляционный пик?
  4. Какая ширина аккумулятора нужна fixed-point correlator?
  5. Как реализовать sliding correlator в FPGA logic?

Что включить в отчёт

  • Оба сгенерированных графика.
  • Истинную и оценённую задержку.
  • Ошибку задержки в отсчётах.
  • Значение correlation peak-to-median.
  • Пояснение, как FIR stage и matched correlator отображаются в RTL.

Связь со следующими блоками

Эта лабораторная напрямую связана с:

  • Block 05: FIR и matched-filter RTL structures;
  • Block 08: синхронизация и обнаружение преамбулы;
  • Block 11: receiver-chain measurement reports.

Чего ожидать

Estimated delay: 512 samples
Delay error: 0 samples
Correlation peak/median: 40.00 dB
  • 64-символьная преамбула QPSK спрятана на отсчёте 512 в записи из 2048 отсчётов, пропущена через трёхлучевой канал при SNR 9 дБ и отфильтрована ФНЧ. SNR измеряется по всей записи; преамбула занимает лишь 64 из 2048 отсчётов, поэтому внутри неё SNR около 24 дБ. Корреляция с известной преамбулой находит её точно.
  • Пик на 40 дБ выше медианы корреляции. 64-символьная преамбула даёт когерентный выигрыш 10*log10(64) = 18 дБ по мощности относительно одного отсчёта; отношение пика к медиане больше, потому что медиана чисто шумовой корреляции заметно ниже её среднего.
  • FIR симметричен и применяется с mode="same", поэтому задержки не вносит. Канал каузален. До сентября 2026 года канал тоже применялся с mode="same", что сдвигало преамбулу на отсчёт раньше, и работа сообщала 511: напоминание, что режим свёртки это часть модели, а не деталь построения графика.

Упражнения

  1. Снизьте SNR с 9 дБ до 0, −6 и −12 дБ. При каком SNR оценка задержки начинает ошибаться и как ведёт себя отношение пика к медиане перед этим?
  2. Сократите преамбулу с 64 до 16 символов. Сколько дБ отношения пика к медиане вы теряете? Сравните с 10*log10(64/16).
  3. Примените FIR как np.convolve(rx, h) (полная свёртка) вместо mode="same". На сколько отсчётов сдвигается оценка и почему ровно на (len(h) - 1) / 2?
Ответы (проверены запуском скрипта лабораторной)
  1. При шумовой модели лабораторной оценка не ломается ни при 0, ни при −6, ни при −12 дБ: она остаётся на 512 отсчётах, а отношение пик/медиана падает примерно на 3 дБ на каждые 3 дБ SNR (40,0 → 31,1 → 25,2 → 19,4 дБ). По 20 зёрнам шума отказы начинаются около −18 дБ (15/20 верных) и полностью наступают к −30 дБ (0/20). Так долго оценка держится из-за определения SNR: оно измеряется по всей записи из 2048 отсчётов, а преамбула занимает только 64, поэтому SNR внутри преамбулы на 15 дБ выше подписи; добавьте 18 дБ когерентного выигрыша 64 символов, и при −18 дБ запас всё ещё положительный.
  2. Если запустить как написано, 16-символьная преамбула показывает большее отношение пик/медиана (41,6 дБ), чем 64-символьная, потому что лабораторная масштабирует шум к средней мощности записи, которая падает вместе с длиной преамбулы. При фиксированной мощности шума 16 символов дают 36,3 дБ против 40,2: потеря 3,9 дБ это меньше, чем 10·log10(64/16) = 6 дБ когерентного выигрыша, потому что медиана корреляции это не мощность шума.
  3. Оценка сдвигается с 512 до 532 отсчётов: 20 = (41 − 1)/2. Полная свёртка симметричного 41-отводного фильтра задерживает сигнал на половину его длины; mode="same" эту задержку обрезает.