Лабораторная 9.3 — Мультиформатный IQ reader¶
Цель¶
Научиться читать IQ-записи разных форматов (ci16, cu8, cf32) через единый metadata-driven pipeline.
Что выполняется¶
В работе студент:
- генерирует синтетические IQ-записи в трёх форматах;
- создаёт metadata для каждого файла;
- читает данные через общий dispatcher;
- строит FFT-графики для каждого формата;
- сравнивает peak frequency, SNR, DC offset и clipping fraction.
Результат¶
После выполнения работы должны быть получены:
- три synthetic IQ capture files;
- metadata для каждого формата;
- FFT-графики
ci16,cu8,cf32; - общий metrics JSON;
- вывод о применимости форматов для дальнейшей обработки.
Что приложить к отчёту¶
- список проверенных IQ-форматов;
- metadata examples;
- spectrum plots;
- таблицу peak/SNR/DC/clipping;
- инженерный вывод о предпочтительном формате.
Подробная техническая часть¶
Инженерный вопрос¶
Как одним скриптом анализа читать IQ-записи из разных инструментов, не переписывая конвейер обработки?
Поддерживаемые форматы¶
| Формат | Двоичная раскладка | Типичный источник |
|---|---|---|
ci16 |
знаковые int16, чередующиеся I/Q | AD9363, самодельный SDR |
cu8 |
беззнаковые uint8, чередующиеся I/Q | сырые захваты RTL-SDR |
cf32 |
float32, чередующиеся I/Q | GNU Radio, экспорт из MATLAB/Python |
Исполняемый файл¶
python blocks/block_09_recording_and_analysis_tools/python/lab_9_3_multi_format_iq_reader.py
Сгенерированные артефакты:
docs/assets/lab93_multiformat_iq_metrics.json
docs/assets/lab93_multiformat_iq_spectrum_ci16.png
docs/assets/lab93_multiformat_iq_spectrum_cu8.png
docs/assets/lab93_multiformat_iq_spectrum_cf32.png
Цепочка обработки¶
flowchart LR
META[JSON метаданных] --> DISPATCH[Диспетчер форматов]
DISPATCH --> CI16[Читатель CI16]
DISPATCH --> CU8[Читатель CU8]
DISPATCH --> CF32[Читатель CF32]
CI16 --> FFT[Общий анализ FFT]
CU8 --> FFT
CF32 --> FFT
FFT --> REPORT[Метрики + графики]
Почему это важно¶
Реальные эксперименты SDR часто смешивают инструменты. Захват курса может начаться с HDSDR/RTL-SDR, затем перейти на AD9363, затем быть экспортирован через GNU Radio или MATLAB. Этап анализа должен управляться метаданными, а не быть жёстко привязан к одной двоичной раскладке.
Чего ожидать¶
ci16: peak=124987.793 Hz, SNR=73.22 dB
cu8: peak=124987.793 Hz, SNR=73.14 dB
cf32: peak=124987.793 Hz, SNR=73.23 dB
- Все три формата дают один и тот же пик. 8-битный файл CU8 теряет здесь лишь 0,1 дБ «SNR». Это не значит, что 8 бит так же хороши, как 16: измеряемое число это пик над медианным бином FFT, оно включает выигрыш обработки FFT на длинной записи, а собственный шум синтетического тона намного выше шума квантования 8 бит, распределённого по такому числу бинов.
Упражнения¶
- Уберите синтетический шум и перезапустите. Какой формат теперь показывает более низкую полку и примерно на сколько (подсказка: около 6 дБ на бит)?
- Добавьте второй тон на 50 дБ слабее первого. В каком формате он исчезает первым?
Чек-лист отчёта (расширенный)¶
- Перечислены все проверенные форматы IQ.
- Показаны метаданные для каждого формата.
- Подтверждены число отсчётов и масштабирование.
- Сравнены измеренные частоты пиков.
- Сравнены показатели SNR/DC/ограничения.
- Объяснено, какой формат лучше для следующего шага обработки.
Шаблон инженерного вывода¶
Один и тот же конвейер анализа успешно прочитал форматы ____ и дал согласованные оценки частоты пика.
Наибольшая частотная ошибка — ____ Гц. Предпочтительный формат для дальнейшей обработки — ____, потому что ______.