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

Лабораторная 6.4 — Анализ синтетической RF IQ-записи

Цель

Отладить pipeline анализа RF-захвата на синтетических IQ-данных до перехода к реальным записям с AD9363, RTL-SDR или HDSDR.

Что выполняется

В работе студент:

  1. читает metadata JSON;
  2. генерирует синтетический IQ-сигнал;
  3. строит FFT и временной график;
  4. оценивает peak frequency, frequency error и SNR;
  5. формирует 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.

Упражнения

  1. Задайте в метаданных processing.fft_length = 16 384 и перезапустите. Как меняются частотная ошибка и «SNR» и почему SNR меняется, хотя сигнал нет?
  2. Поднимайте амплитуду тона, пока счётчик ограничений не станет ненулевым. Что происходит со спектром (гармоники, поднятая полка)?
  3. Запишите ожидаемое смещение для реального захвата, где LO TX 915,000 МГц, цифровой тон +100 кГц, а LO RX 914,950 МГц.
Ответы (проверены запуском скрипта лабораторной)
  1. При 16 384 точках бин равен 146 Гц вместо 36,6 Гц, поэтому ошибка частоты растёт с 12,2 до 48,8 Гц (пик читается в ближайшем бине), а «SNR» падает с 74,06 до 68,03 дБ: ровно на 6 дБ. Энергия тона по-прежнему попадает в один бин, но каждый бин теперь собирает вчетверо большую шумовую полосу: шумовая полка поднимается с −79,9 до −73,8 дБFS. SNR «пик над медианой» всегда привязан к длине FFT.
  2. При масштабировании синтетического сигнала счётчик ограничений становится ненулевым при амплитуде тона около 0,93 (тон вместе с паразитом и пиками шума достигает полной шкалы). Выше появляется продукт на −300 кГц, трёхкратное смещение тона на противоположной стороне: −46 дБн при амплитуде 0,99, −30 дБн при 1,1. Раздельное ограничение I и Q искажает комплексный тон в нечётные гармоники на −3f, +5f, ..., поэтому на реальной записи перегрузка может выглядеть как зеркальный паразит.
  3. 915,000 + 0,100 − 914,950 = +0,150 МГц: тон появится на +150 кГц.

Чек-лист отчёта (расширенный)

  • Приложен JSON метаданных или ссылка на него.
  • Указано ожидаемое смещение в основной полосе.
  • Записан измеренный пик FFT.
  • Вычислена частотная ошибка.
  • Оценён SNR.
  • Проверен флаг ограничения/перегрузки.
  • Приложен график FFT.
  • Приложено превью во временной области.
  • Объяснено, готов ли анализ к реальным IQ-данным.

Шаблон инженерного вывода

Синтетический RF-захват использовал файл метаданных ______ и ожидал тон на ____ Гц.
Измеренный пик — ____ Гц, частотная ошибка — ____ Гц.
Оценённый SNR — ____ дБ, число ограничений — ____.
Процесс анализа готов / не готов к реальным RF IQ-записям, потому что ______.