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

Лабораторная 8.1 — Оценка и компенсация частотного рассогласования CFO

Цель

Понять, почему созвездие QPSK вращается при carrier frequency offset, и научиться оценивать и компенсировать это рассогласование.

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

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

  1. генерирует QPSK-символы;
  2. вносит CFO, phase offset и шум;
  3. оценивает CFO методом четвёртой степени;
  4. компенсирует CFO и остаточную фазу;
  5. сравнивает EVM и BER до/после коррекции.

Результат

После выполнения работы должны быть получены:

  • constellation plot до коррекции;
  • constellation plot после коррекции;
  • график фазовой эволюции;
  • metrics JSON;
  • вывод о точности CFO estimator.

Что приложить к отчёту

  • true CFO и estimated CFO;
  • ошибку оценки CFO;
  • EVM/BER до и после;
  • графики созвездия;
  • объяснение метода четвёртой степени.

Подробная техническая часть

Практический вопрос

Почему созвездие вращается и как оценить и убрать это вращение до принятия решений по символам?

Исполняемые файлы

Среда Файл Результат
Python blocks/block_08_modulation_and_synchronization/python/lab_8_1_cfo_estimation_correction.py графики созвездий, график фазы и JSON с метриками в docs/assets

Запуск из корня репозитория:

python blocks/block_08_modulation_and_synchronization/python/lab_8_1_cfo_estimation_correction.py

Сгенерированные артефакты:

docs/assets/lab81_cfo_constellation_before.png
docs/assets/lab81_cfo_constellation_after.png
docs/assets/lab81_cfo_phase_evolution.png
docs/assets/lab81_cfo_metrics.json

Цепочка обработки

flowchart LR
    BITS[Случайные биты] --> QPSK[Символы QPSK]
    QPSK --> CFO[Применить CFO + сдвиг фазы]
    CFO --> NOISE[Добавить шум]
    NOISE --> EST[Оценить CFO]
    EST --> CORR[Скорректировать CFO]
    CORR --> PHASE[Скорректировать остаточную фазу]
    PHASE --> DEC[Жёсткие решения]
    DEC --> METRICS[EVM и BER]

Модель CFO

Сдвиг несущей поворачивает каждый символ на линейно растущую фазу:

r[n] = s[n] * exp(j * (2*pi*f_cfo*n/Fs + phi0)) + noise[n]

Если f_cfo ненулевой, созвездие не остаётся неподвижным. Оно вращается со временем.

Метод 4-й степени для QPSK

Для QPSK возведение сигнала в 4-ю степень приблизительно убирает модуляцию данными:

r4[n] = r[n]^4

Наклон фазы r4[n] в четыре раза больше наклона фазы CFO. Следовательно:

f_cfo_est = slope(angle(r[n]^4)) * Fs / (2*pi*4)

Это компактный учебный оценщик. В реальных системах чаще надёжнее оценщики по преамбуле и петли слежения.

Метрики

Метрика Смысл
истинный CFO намеренно введённый частотный сдвиг
оценённый CFO результат оценщика 4-й степени
ошибка CFO оценённый минус истинный CFO
EVM до ошибка созвездия до синхронизации
EVM после ошибка созвездия после коррекции CFO/фазы
BER до BER жёстких решений до коррекции
BER после BER жёстких решений после коррекции
остаточная фаза оценённая постоянная фаза после коррекции CFO

Ожидаемые графики

  • созвездие до коррекции CFO;
  • созвездие после коррекции CFO;
  • развёрнутая фаза до/после коррекции.

Типичные ошибки

Ошибка Симптом Исправление
неверный знак CFO вращение ускоряется изменить знак коррекции
фаза не скорректирована созвездие остаётся повёрнутым оценить остаточную фазу
оценщик применён при малом SNR оценка CFO зашумлена использовать более длинное усреднение или преамбулу
неверная частота дискретизации оценка CFO масштабируется неверно проверить метаданные
использование только вещественного сигнала нарушается симметрия QPSK использовать комплексный IQ

Чего ожидать

Запуск по умолчанию (4096 символов QPSK при 1 МС/с, один отсчёт на символ, CFO 2750 Гц, фаза 0,65 рад, шум 0,035 rms, seed 81):

True CFO: 2750.000 Hz
Estimated CFO: 2750.039 Hz
CFO error: 0.039 Hz
EVM before: 141.442 % (3.01 dB)
EVM after: 4.985 % (-26.05 dB)
BER before: 5.002441e-01 (4098/8192)
BER after: 0.000000e+00 (0/8192)
Residual phase estimate: 0.650010 rad
  • BER 0,5 до коррекции означает случайные решения: созвездие поворачивается на 360 * 2750 / 1e6 ≈ 1° за символ, то есть за 4096 символов делает больше 11 оборотов.
  • Оценка точна до 0,04 Гц, потому что аппроксимация прямой по 4096 отсчётам очень эффективно усредняет шум при таком SNR.
  • Остаточная фаза 0,650 рад воспроизводит введённые 0,65 рад. После удаления CFO остаётся одна постоянная фаза. Метрики считаются по собственному выходу приёмника, без предварительного выравнивания по известному эталону, поэтому неверная оценка фазы проявилась бы битовыми ошибками.

Важная деталь со знаком

Для точек QPSK (±1±j)/√2 каждый символ в 4-й степени равен −1. Поэтому оценка фазы: angle(−mean(r⁴))/4. Без знака минус оценка смещена ровно на π/4, и «скорректированное» созвездие ложится на оси I/Q. В этой работе была именно такая ошибка до сентября 2026 года; она была скрыта, потому что BER тогда считался после «идеального» выравнивания по эталону. Та же ловушка на железе описана в Лабораторной 11.30.

Упражнения

  1. Оценщик 4-й степени однозначен при |CFO| < Fs/8 = 125 кГц. Задайте CFO 50, 100, 110 и 120 кГц. На 100 кГц оценка уже занижена примерно на 175 Гц, а на 120 кГц проваливается примерно до 55 кГц. Почему практический предел ниже 125 кГц? (Подсказка: np.unwrap требует, чтобы каждый шаг angle(r⁴) от отсчёта к отсчёту оставался меньше π.)
  2. Поднимите шум с 0,035 до 0,2 и 0,35. Ошибка оценки растёт до сотен, затем тысяч герц. Объясните, почему оценщик на основе развёртки фазы отказывает резко, а не деградирует плавно.
  3. Замените аппроксимацию прямой средним angle(r⁴[n+1] · conj(r⁴[n])). Сравните ошибку при шуме 0,2.
  4. Уберите знак минус в estimate_phase_qpsk и перезапустите. Укажите EVM и BER после коррекции и объясните их.
Ответы (проверены запуском скрипта лабораторной)
  1. Возведение в 4-ю степень умножает смещение на четыре, поэтому angle(r⁴) растёт на 2π·4·CFO/Fs за отсчёт: 0,8π при 100 кГц, 0,96π при 120 кГц. np.unwrap нужно, чтобы каждый шаг был меньше π с учётом шума на каждом отсчёте, поэтому вблизи теоретического предела несколько шумных шагов переходят π, разворачиваются не в ту сторону и изгибают подогнанную прямую: 99 825 Гц при 100 кГц, 103 461 Гц при 110 кГц, 54 913 Гц при 120 кГц. Практический предел: теоретический минус запас на шум.
  2. Ошибка разворачивания это срыв цикла: один неверный шаг ±2π сдвигает все последующие фазы на 2π и наклоняет всю прямую. Ниже некоторого SNR срывы начинают происходить, и каждый: большая ошибка, а не маленькая. По 10 зёрнам шума медианная ошибка: 0,0 Гц при шуме 0,035, 479 Гц при 0,2 и 1527 Гц при 0,35.
  3. При шуме 0,2 среднее произведений даёт медианную ошибку 354 Гц против 479 Гц у подгонки прямой (худшие случаи 1285 и 896 Гц). Оно ничего не разворачивает, поэтому срывов цикла у него нет, и оно работает до полных ±125 кГц (119 994 Гц при 120 кГц). При слабом шуме оно хуже (11 Гц против 0,04 Гц), потому что среднее разностей зависит почти только от первого и последнего отсчётов, а подгонка прямой использует все.
  4. Оценка фазы становится −0,135 рад, то есть 0,65 − π/4: скорректированное созвездие ложится на оси I/Q, точно на границы решений. EVM после коррекции 76,7 %, BER 0,255 (2090/8192): каждая точка теперь случайно попадает по одну сторону одной границы, поэтому неверен примерно каждый четвёртый бит.

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

  • Указаны тип модуляции и число символов.
  • Указаны истинный CFO и частота дискретизации.
  • Объяснён оценщик 4-й степени.
  • Указаны оценённый CFO и ошибка CFO.
  • Приложено созвездие до коррекции.
  • Приложено созвездие после коррекции.
  • Приложен график эволюции фазы.
  • Указаны EVM и BER до/после.
  • Объяснены остаточные ограничения.

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

Сигнал QPSK использовал истинный CFO ____ Гц. Оценщик 4-й степени измерил ____ Гц,
ошибка — ____ Гц. После коррекции EVM улучшился с ____ % до ____ %, а
BER изменился с ____ до ____. Результат подтверждает / не подтверждает, что CFO был
главным искажением синхронизации, потому что ______.