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

Лабораторная 8.9 — Восстановление несущей QPSK

Цель

Компенсировать CFO, который превращает QPSK-созвездие в кольцо, с помощью decision-directed петли Костаса и снять остаточную неоднозначность 90°.

Алгоритм

Для каждого символа петля:

  1. поворачивает отсчёт на отрицательную оценку фазы NCO;
  2. вычисляет QPSK phase error;
  3. обновляет интегральную составляющую частоты;
  4. обновляет фазу пропорционально-интегральным фильтром.
y = s · exp(-jθ)
e = sign(Re(y))·Im(y) - sign(Im(y))·Re(y)
freq += ki·e
θ += freq + kp·e

Петля совмещает кластеры с QPSK-сеткой, но может захватить любую из четырёх ориентаций k·90°. Известная преамбула перебирает четыре поворота и выбирает правильную раскладку битов.

Запуск

python blocks/block_08_modulation_and_synchronization/python/qpsk_carrier_recovery.py

Ожидаемый результат:

  • до коррекции BER близок к случайному решению;
  • после захвата петли остаются четыре компактных кластера;
  • оценка NCO следует фазовому наклону CFO;
  • после снятия 90°-неоднозначности BER равен нулю на контрольном sweep.

Эта лабораторная завершает QPSK-маршрут Block 8 и подготавливает перенос carrier recovery в потоковый RTL.