Лабораторная 6.4 — Анализ синтетической RF IQ-записи¶
Цель¶
Отладить pipeline анализа RF-захвата на синтетических IQ-данных до перехода к реальным записям с AD9363, RTL-SDR или HDSDR.
Что выполняется¶
В работе студент:
- читает metadata JSON;
- генерирует синтетический IQ-сигнал;
- строит FFT и временной график;
- оценивает peak frequency, frequency error и SNR;
- формирует metrics JSON и графики для отчёта.
Результат¶
После выполнения работы должны быть получены:
- синтетический RF capture workflow;
- FFT-график;
- time-domain preview;
- metrics JSON;
- вывод о готовности анализа к реальным IQ-файлам.
Что приложить к отчёту¶
- metadata JSON;
- FFT-график;
- measured peak и expected offset;
- оценку SNR;
- clipping/overload flag;
- инженерный вывод.
Подробная техническая часть¶
Практический вопрос¶
Можно ли взять файл RF-метаданных, сгенерировать или загрузить IQ-захват, оценить частоту пика, частотную ошибку, SNR и признаки перегрузки и получить воспроизводимый артефакт отчёта?
Исполняемые файлы¶
| Файл | Назначение |
|---|---|
blocks/block_06_rf_frontend_and_ad9363/python/lab_6_4_synthetic_rf_capture_analysis.py |
генерация и анализ синтетических IQ |
blocks/block_06_rf_frontend_and_ad9363/assets/example_first_rf_capture_metadata.json |
пример метаданных RF-захвата |
Запуск из корня репозитория:
python blocks/block_06_rf_frontend_and_ad9363/python/lab_6_4_synthetic_rf_capture_analysis.py
Необязательно: дополнительно записать синтетический IQ-файл CI16:
python blocks/block_06_rf_frontend_and_ad9363/python/lab_6_4_synthetic_rf_capture_analysis.py --write-iq
Сгенерированные результаты¶
Скрипт записывает артефакты анализа в docs/assets:
docs/assets/lab64_synthetic_rf_capture_fft.png
docs/assets/lab64_synthetic_rf_capture_time.png
docs/assets/lab64_synthetic_rf_capture_metrics.json
С --write-iq он также записывает:
blocks/block_06_rf_frontend_and_ad9363/assets/synthetic_first_rf_capture.ci16
Цепочка обработки¶
flowchart LR
META[JSON RF-метаданных] --> SYNTH[Генератор синтетических IQ]
SYNTH --> FFT[Анализ FFT]
FFT --> PEAK[Частота пика]
FFT --> SNR[Оценка SNR]
SYNTH --> CLIP[Проверка ограничения]
PEAK --> REPORT[JSON метрик + графики]
SNR --> REPORT
CLIP --> REPORT
Метрики¶
| Метрика | Смысл |
|---|---|
expected_offset_hz |
ожидаемое положение в основной полосе по частотному плану |
measured_peak_hz |
сильнейшая наблюдаемая компонента FFT |
frequency_error_hz |
измеренный пик минус ожидаемое смещение |
peak_dbfs |
оценённый уровень тона |
noise_floor_dbfs |
медианная полка спектра вне исключённых бинов |
snr_db |
уровень пика минус оценка шумовой полки |
clipping_count |
число обрезанных отсчётов I/Q после квантования CI16 |
overload_flag |
быстрое предупреждение по ограничению, уровню пика или плохому SNR |
Зачем сначала синтетика?¶
Анализ синтетического захвата полезен тем, что позволяет студенту отладить процесс обработки до встречи с реальной RF-неопределённостью:
- неверное соглашение о знаке частоты;
- ошибки нормировки FFT;
- ошибки разбора метаданных;
- отсутствие информации о частоте дискретизации;
- неверный порядок I/Q в CI16;
- проблемы с построением графиков;
- проблемы автоматизации отчёта.
Переход к реальным IQ-данным¶
После того как работа заработает, замените синтетический генератор настоящим читателем IQ:
JSON метаданных + реальный capture.ci16 -> FFT -> метрики -> отчёт
Те же поля метаданных должны оставаться действительными:
- частота дискретизации;
- формат IQ;
- центральные частоты;
- ожидаемое смещение;
- RF-полоса;
- настройки усиления;
- внешнее ослабление;
- заметки о перегрузке.
Чего ожидать¶
Expected offset: 100000.000 Hz
Measured peak: 100012.207 Hz
Frequency error: 12.207 Hz
Peak level: -5.82 dBFS
Noise floor: -79.88 dBFS
SNR estimate: 74.06 dB
Clipping count: 0
Overload flag: False
- Ошибка 12,2 Гц это квантование по бинам FFT, а не RF-ошибка: анализ использует FFT на 65 536 точек, поэтому при 2,4 МС/с бины отстоят на 36,6 Гц, и пик читается в ближайшем бине. На реальном захвате тот же анализ добавил бы к этому сдвиг генераторов передатчика и приёмника.
- «SNR 74 дБ» это пик над медианным бином FFT, поэтому он включает выигрыш обработки FFT на длинной записи. Это не SNR на отсчёт и не сравнимо с SNR, вычисленным по EVM. Всегда указывайте определение.
- Уровень пика −5,8 дБFS при нуле ограничений означает, что синтетический захват использует примерно половину полной шкалы; на железе по этому числу выставляют усиление RX.
Упражнения¶
- Задайте в метаданных
processing.fft_length= 16 384 и перезапустите. Как меняются частотная ошибка и «SNR» и почему SNR меняется, хотя сигнал нет? - Поднимайте амплитуду тона, пока счётчик ограничений не станет ненулевым. Что происходит со спектром (гармоники, поднятая полка)?
- Запишите ожидаемое смещение для реального захвата, где LO TX 915,000 МГц, цифровой тон +100 кГц, а LO RX 914,950 МГц.
Ответы (проверены запуском скрипта лабораторной)
- При 16 384 точках бин равен 146 Гц вместо 36,6 Гц, поэтому ошибка частоты растёт с 12,2 до 48,8 Гц (пик читается в ближайшем бине), а «SNR» падает с 74,06 до 68,03 дБ: ровно на 6 дБ. Энергия тона по-прежнему попадает в один бин, но каждый бин теперь собирает вчетверо большую шумовую полосу: шумовая полка поднимается с −79,9 до −73,8 дБFS. SNR «пик над медианой» всегда привязан к длине FFT.
- При масштабировании синтетического сигнала счётчик ограничений становится ненулевым при амплитуде тона около 0,93 (тон вместе с паразитом и пиками шума достигает полной шкалы). Выше появляется продукт на −300 кГц, трёхкратное смещение тона на противоположной стороне: −46 дБн при амплитуде 0,99, −30 дБн при 1,1. Раздельное ограничение I и Q искажает комплексный тон в нечётные гармоники на −3f, +5f, ..., поэтому на реальной записи перегрузка может выглядеть как зеркальный паразит.
915,000 + 0,100 − 914,950 = +0,150 МГц: тон появится на +150 кГц.
Чек-лист отчёта (расширенный)¶
- Приложен JSON метаданных или ссылка на него.
- Указано ожидаемое смещение в основной полосе.
- Записан измеренный пик FFT.
- Вычислена частотная ошибка.
- Оценён SNR.
- Проверен флаг ограничения/перегрузки.
- Приложен график FFT.
- Приложено превью во временной области.
- Объяснено, готов ли анализ к реальным IQ-данным.
Шаблон инженерного вывода¶
Синтетический RF-захват использовал файл метаданных ______ и ожидал тон на ____ Гц.
Измеренный пик — ____ Гц, частотная ошибка — ____ Гц.
Оценённый SNR — ____ дБ, число ограничений — ____.
Процесс анализа готов / не готов к реальным RF IQ-записям, потому что ______.