Проект 12.2 — Итоговый проект: анализ RF-захвата¶
Цель¶
Проанализировать реальный или синтетический IQ-захват с полными метаданными и подготовить отчёт инженерного уровня.
Смысл проекта: не красивый спектр. Нужно показать, что другой инженер, имея только ваши файлы, получит те же числа и тот же вывод, и показать, что вы знаете, каким из этих чисел можно доверять, а каким нельзя.
Зачем это нужно¶
Каждое утверждение в отчёте по SDR в конечном счёте опирается на запись: «сигнал на +3 кГц», «SNR 30 дБ», «фронтенд не перегружен». Запись без метаданных это список чисел без единиц; спектр без указанной частоты дискретизации не имеет частотной оси; SNR без определения несопоставим. Этот проект тренирует неброскую дисциплину, отличающую измерение от скриншота: сначала метаданные, проверки качества до выводов и явное указание, для чего захват пригоден, а для чего нет.
Необходимая цепочка¶
flowchart LR
CAP[IQ-захват] --> META[Метаданные]
META --> READ[Читатель]
READ --> FFT[Анализ FFT]
FFT --> QC[Проверки качества]
QC --> REPORT[Отчёт]
Минимальные результаты¶
- запись в реестре наборов данных;
- JSON с метаданными;
- команда чтения IQ;
- график FFT;
- оценка SNR;
- проверка смещения DC и ограничения;
- итоговый отчёт.
Критерии успеха¶
| Критерий | Цель |
|---|---|
| Полнота метаданных | обязательно |
| Частотная ошибка | определяет студент |
| SNR | определяет студент |
| Доля ограничения | ниже порога |
Цели фиксируются в плане анализа до финального прогона. Захват, не прошедший собственные ворота качества, остаётся допустимой работой, если отчёт говорит об этом и объясняет причину; захват, объявленный «хорошим» без проверок: нет.
Выберите входные данные¶
| Вход | Откуда | Чему учит |
|---|---|---|
| Синтетическое воспроизведение | datasets/demo_qpsk_capture (детерминированный, 64 КиБ, SHA256 в манифесте) |
полному процессу с известной истиной, поэтому ошибки видны |
| Готовый реальный захват | datasets/lab1_0_rtl_sdr_observation (WAV RTL-SDR), datasets/lab6_6_zynq_rx_observation или datasets/lab6_8_zynq_ota_tone_observation (CI16 Zynq AD9361) |
реальным искажениям, истина неизвестна |
| Собственный захват | ваш приёмник, ваши метаданные | всему пути от железа до отчёта; требует записи RF-безопасных настроек |
Не заявляйте доказательств более высокой ступени, чем использовали: синтетический захват должен быть помечен как синтетический и в отчёте, и в манифесте.
Заморозьте план анализа¶
До просмотра результатов напишите полстраницы:
| Поле | Необходимое содержание |
|---|---|
| вопрос | одно опровержимое предложение, например «тон в пределах 200 Гц от ожидаемого смещения, а захват не ограничен» |
| факты о захвате | формат, частота дискретизации, центральная частота, порядок каналов, настройки усиления, длительность |
| ожидаемый сигнал | где вы его ожидаете (смещение от центра) и как его узнаете |
| метрики | частота пика, частотная ошибка, SNR (с определением), смещение DC, доля ограничения |
| пороги | числовые пределы каждой проверки качества |
| правило остановки | когда анализ завершён |
Ворота верификации¶
- G0 это метаданные: манифест проходит
python tools/check_dataset_manifests.pyи содержит формат, частоту дискретизации, центральную частоту, порядок каналов, происхождение и контрольную сумму. - G1 это чтение обратно: читатель восстанавливает задокументированное число отсчётов, контрольная сумма совпадает; первые отсчёты выглядят так, как их описывает формат.
- G2 это здравый смысл: пик спектра находится там, где его ожидают метаданные, либо разница объяснена (перепутанные I/Q зеркалят спектр; неверная частота дискретизации масштабирует ось).
- G3 это качество: смещение DC, доля ограничения и SNR вычислены с заявленными определениями и сравнены с замороженными порогами.
- G4 это воспроизведение: чистый checkout заново создаёт графики и JSON с метриками одной командой.
Ловушки анализа, которые нужно проверить явно¶
| Ловушка | Симптом | Как исключить |
|---|---|---|
| перепутанные I/Q | зеркальный спектр, сигнал на −f вместо +f | повторить с изменённым i_first; настоящий тон перейдёт на зеркальную частоту |
| пик DC принят за сигнал | сильный пик ровно на 0 Гц | перестроить приёмник на известный шаг: настоящий сигнал сместится, пик DC это нет |
| неверная частота дискретизации | спектр выглядит верно, но с ошибочной шкалой частот | сравнить с известным эталоном (тон на известном смещении, вещательная несущая) |
| ограничение (clipping) | широкополосные «брызги», поднятая шумовая полка, сплюснутая форма | указать долю отсчётов около полной шкалы; посмотреть превью во времени |
| неопределённый SNR | числа, которые нельзя сравнить | указать, чем является SNR: пиком над медианным шумом, отношением мощности в полосе или оценкой по EVM |
| утечка / «пикет-забор» FFT | амплитуда пика зависит от положения тона | использовать окно и назвать его; не сравнивать высоты пиков в разных бинах без этого |
Пакет доказательств¶
project_12_2/
├── plan.md
├── manifest.yaml
├── run.py # или команда читателя из Lab 9.2–9.4
├── metrics.json
├── figures/
│ ├── spectrum.png
│ └── time_preview.png
└── report.md
metrics.json должен содержать сырые значения (число отсчётов, бин пика, оценка шумовой полки) наряду с производными, чтобы рецензент мог пересчитать заявленный SNR.
Отправная точка, безопасная для CI¶
Из корня репозитория:
python tools/check_dataset_manifests.py
python blocks/block_09_recording_and_analysis_tools/python/lab_9_4_read_wav_iq_and_analyze.py \
--manifest datasets/lab1_0_rtl_sdr_observation/manifest_narrowband_220860000.yaml
Вторая команда это Lab 9.4, разобранный пример цепочки этого проекта; её вывод показывает именно тот набор метрик (пик, частотная ошибка, SNR, смещение DC, доля ограничения, pass/fail), который ожидается в вашем отчёте.
Итоговый чек-лист приёмки¶
- Манифест полон, контрольная сумма подтверждается.
- План анализа и пороги предшествуют финальному прогону.
- Указана синтетическая или реальная природа захвата.
- Три наиболее вероятных неверных прочтения (перестановка I/Q, пик DC, неверная частота дискретизации) проверены явно.
- У SNR есть письменное определение.
- Каждое приведённое отношение можно пересчитать из сохранённых сырых значений.
- Вывод говорит, пригоден захват для дальнейшей обработки или нет, и почему.
- Команда на чистом checkout воспроизводит графики и метрики.
Оцените работу по рубрике оценки итоговых проектов и напишите отчёт по шаблону отчёта Блока 12.
Шаблон вывода отчёта¶
RF-захват содержит ____ отсчётов в формате ____. Измеренный пик находится на ____ Гц,
SNR составляет ____ дБ, доля ограничения — ____. Захват пригоден / не пригоден для дальнейшей обработки, потому что ______.