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

Лабораторная 6.10 — Анализ фазового разрыва при переключении AGC/LNA

Цель

Существующий двухплатный QPSK-канал (Block 11) намеренно использует фиксированный RX gain. Эта лабораторная намеренно включает AGC AD9361/AD9363 и измеряет, что переключение состояния gain делает с фазой несущей: честно отделённое от обычного вращения фазы, которое CFO создаёт на каждом отсчёте в любом случае.

Фаза приёмника непрерывно вращается из-за CFO даже без какого-либо gain-события. Простое сравнение «фаза до» и «фаза после» на переключении gain не может отличить связанный с gain фазовый глитч от этого обычного вращения: их нужно разделять, подгоняя тренд CFO и глядя на остаток именно в момент перехода.

Это дополняет Lab 6.2 и issue #29 (таблица gain и пределы overload AD9363), которые характеризуют статическое поведение gain/overload. Эта лабораторная про динамические переходы gain.

Метод

baseline с фиксированным gain
    -> включить AGC
    -> заставить/наблюдать переход состояния gain
    -> подогнать тренд CFO до перехода (фаза от номера отсчёта)
    -> экстраполировать тренд через переход
    -> discontinuity = наблюдаемая фаза - экстраполированная фаза
    -> шаг амплитуды, время восстановления, влияние на EVM/BER

Исполняемый инструмент анализа

blocks/block_06_rf_frontend_and_ad9363/python/lab_6_10_agc_phase_transition_analysis.py

Сначала запустить self-test без аппаратуры:

python blocks/block_06_rf_frontend_and_ad9363/python/lab_6_10_agc_phase_transition_analysis.py --self-test

Self-test строит две синтетические записи с одинаковым внесённым CFO и одинаковым шагом амплитуды: одна с дополнительно внесённым фазовым разрывом в момент перехода, другая без него (контроль). PASS означает, что инструмент восстанавливает внесённый разрыв с точностью до 0.05 рад на первой записи и показывает near-zero на контрольной: то есть не путает обычное вращение фазы от CFO с gain-событием. Это доказывает метод анализа, а не какое-либо реальное поведение AD9361/AD9363.

Для реальной записи:

python blocks/block_06_rf_frontend_and_ad9363/python/lab_6_10_agc_phase_transition_analysis.py \
  measurements/agc_001.ci16 --metadata measurements/agc_001.json \
  --output measurements/agc_001_analysis.json

Metadata sidecar следует templates/gain_transition_capture_metadata.template.json: формат/частота дискретизации и список gain_transitions с значениями sample_index (плюс режим gain-control и настройки для отчёта). Каждый указанный переход анализируется независимо.

Процедура

  1. Baseline с фиксированным RX gain. Воспроизвести существующий двухплатный кабельный QPSK-канал (или более простой tone/loopback стенд). Записать RX gain, затухание, RSSI/dBFS, CFO, EVM и BER, сохранить эталонную IQ-запись без переходов gain.
  2. Включить AGC AD9361/AD9363. Задокументировать выбранный режим gain-control и соответствующие регистры/iio_attr. Применить контролируемые изменения входного уровня цифровым или фиксированным аттенюатором, чтобы вызвать переходы через области gain-table/состояния LNA, где это практично.
  3. Записать переход. Сохранить сырой complex IQ до, во время и после каждого изменения gain, с достаточным числом отсчётов с обеих сторон для подгонки CFO (--fit-window, по умолчанию 256 отсчётов). Записать реальный sample_index каждого перехода в metadata.
  4. Запустить инструмент анализа на реальной записи и зафиксировать его amplitude_step_db, phase_discontinuity_deg и recovery_samples по каждому переходу: не оценивать их на глаз по графику.
  5. Оценить влияние на модем. EVM/BER/PER вокруг перехода, потеря/повторный захват frame-sync, если он происходит, сравнение с baseline на фиксированном gain.

Отчёт

Линейная оценка CFO применима к тону или IQ после удаления известной символьной модуляции. Фаза сырого QPSK для такой оценки непригодна. recovery_samples: начало серии из 16 отсчётов с ошибкой менее 0,15 рад относительно тренда до события; null означает отсутствие такой серии в окне поиска. Постоянный скачок не считается восстановлением. Это возврат фазы сигнала, а не время захвата carrier loop: последнее измеряется отдельно на модеме. Входной файл получает статус unverified-capture-analysis до проверки происхождения записи.

Использовать templates/agc_phase_transition_report.template.md. Среди прочего требуются: точные настройки gain-control, sweep входного уровня/затухания, ссылка на сырую/воспроизводимую IQ-запись, обязательные графики (gain-state/уровень от времени, ошибка фазы от времени с наложенным подогнанным трендом CFO, constellation до/во время/после), явное утверждение о том, детерминированно ли наблюдаемое поведение фазы, зависит ли оно от состояния или варьируется между повторами.

Что эта лабораторная не заявляет

--self-test это синтетическое доказательство метода разделения (тренд CFO против остатка, связанного с переходом), а не аппаратный результат. Реальное доказательство фазового разрыва при AGC требует реального перехода состояния gain, записанного на аппаратуре AD9361/AD9363 в этом окружении такой аппаратуры нет, поэтому подобное доказательство здесь не заявляется. Лабораторная остаётся hardware-pending, пока реальная запись не проанализирована и не оформлена через шаблон выше.