Лабораторная 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 метрика. |
Инженерные вопросы¶
- Почему свёртка является естественной операцией для FIR-фильтрации?
- Почему корреляция является естественной операцией для обнаружения преамбулы?
- Как шум влияет на корреляционный пик?
- Какая ширина аккумулятора нужна fixed-point correlator?
- Как реализовать 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: напоминание, что режим свёртки это часть модели, а не деталь построения графика.
Упражнения¶
- Снизьте SNR с 9 дБ до 0, −6 и −12 дБ. При каком SNR оценка задержки начинает ошибаться и как ведёт себя отношение пика к медиане перед этим?
- Сократите преамбулу с 64 до 16 символов. Сколько дБ отношения пика к медиане вы теряете? Сравните с
10*log10(64/16). - Примените FIR как
np.convolve(rx, h)(полная свёртка) вместоmode="same". На сколько отсчётов сдвигается оценка и почему ровно на(len(h) - 1) / 2?
Ответы (проверены запуском скрипта лабораторной)
- При шумовой модели лабораторной оценка не ломается ни при 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 дБ запас всё ещё положительный.
- Если запустить как написано, 16-символьная преамбула показывает большее отношение пик/медиана (41,6 дБ), чем 64-символьная, потому что лабораторная масштабирует шум к средней мощности записи, которая падает вместе с длиной преамбулы. При фиксированной мощности шума 16 символов дают 36,3 дБ против 40,2: потеря 3,9 дБ это меньше, чем
10·log10(64/16) = 6 дБкогерентного выигрыша, потому что медиана корреляции это не мощность шума. - Оценка сдвигается с 512 до 532 отсчётов: 20 =
(41 − 1)/2. Полная свёртка симметричного 41-отводного фильтра задерживает сигнал на половину его длины;mode="same"эту задержку обрезает.