Лабораторная 8.2 — Оценка и коррекция фазового смещения¶
Цель¶
Научиться компенсировать постоянный поворот QPSK-созвездия после устранения частотного рассогласования.
Что выполняется¶
В работе студент:
- генерирует QPSK-сигнал;
- вносит постоянное фазовое смещение;
- оценивает фазу слепым методом четвёртой степени;
- уточняет фазу decision-directed методом;
- сравнивает EVM и BER до/после коррекции.
Результат¶
После выполнения работы должны быть получены:
- constellation plot до коррекции;
- constellation plot после blind correction;
- constellation plot после decision-directed refinement;
- график сравнения EVM;
- metrics JSON.
Что приложить к отчёту¶
- true phase offset;
- blind phase estimate;
- decision-directed estimate;
- EVM/BER до и после;
- объяснение ambiguity
pi/2; - инженерный вывод.
Подробная техническая часть¶
Практический вопрос¶
После коррекции CFO как убрать оставшееся постоянное вращение созвездия?
Исполняемые файлы¶
| Среда | Файл | Результат |
|---|---|---|
| Python | blocks/block_08_modulation_and_synchronization/python/lab_8_2_phase_offset_correction.py |
графики созвездий, сравнение EVM и JSON с метриками в docs/assets |
Запуск из корня репозитория:
python blocks/block_08_modulation_and_synchronization/python/lab_8_2_phase_offset_correction.py
Сгенерированные артефакты:
docs/assets/lab82_phase_constellation_before.png
docs/assets/lab82_phase_constellation_after_blind.png
docs/assets/lab82_phase_constellation_after_dd.png
docs/assets/lab82_phase_evm_comparison.png
docs/assets/lab82_phase_metrics.json
Цепочка обработки¶
flowchart LR
BITS[Случайные биты] --> QPSK[Символы QPSK]
QPSK --> PHASE[Применить сдвиг фазы]
PHASE --> NOISE[Добавить шум]
NOISE --> BLIND[Слепая оценка фазы 4-й степенью]
BLIND --> DD[Уточнение по решениям]
DD --> DEC[Жёсткие решения]
DEC --> METRICS[EVM и BER]
Модель фазы¶
После коррекции частоты несущей может остаться постоянный сдвиг фазы:
r[n] = s[n] * exp(j*phi0) + noise[n]
Он поворачивает всё созвездие на phi0.
Слепая оценка фазы QPSK¶
Для QPSK операция 4-й степени приблизительно убирает данные символов:
phase_est = angle(mean(r[n]^4)) / 4
У этого оценщика есть неоднозначность pi/2. В реальном приёмнике неоднозначность разрешается дифференциальным кодированием, известной преамбулой, пилотами или кадровой синхронизацией.
Уточнение по решениям¶
После грубой коррекции фазы принимаются решения по ближайшим точкам QPSK. Затем остаточная фаза оценивается между принятыми символами и «нарезанными» решениями:
phase_dd = angle(sum(conj(decision[n]) * r[n]))
Это полезно, когда созвездие уже достаточно близко к идеалу, чтобы большинство решений были верны.
Метрики¶
| Метрика | Смысл |
|---|---|
| истинный сдвиг фазы | намеренно введённый поворот |
| слепая оценка фазы | оценка фазы методом 4-й степени |
| оценка фазы по решениям | уточнённая суммарная оценка |
| ошибка фазы | оценка минус истинная фаза |
| EVM до | ошибка созвездия до коррекции |
| EVM после слепой | ошибка после коррекции 4-й степенью |
| EVM после по решениям | ошибка после уточнения |
| BER до/после | качество решений до/после коррекции |
Типичные ошибки¶
| Ошибка | Симптом | Исправление |
|---|---|---|
| неверный знак фазы | созвездие поворачивается дальше | изменить знак коррекции |
игнорируется неоднозначность pi/2 |
созвездие отображается на неверные биты | использовать преамбулу или дифференциальное кодирование |
| уточнение по решениям стартует слишком рано | неверные решения смещают оценку | сначала выполнить грубую коррекцию |
| CFO всё ещё присутствует | оценка фазы дрейфует | корректировать CFO до сдвига фазы |
| малый SNR | оценка фазы зашумлена | усреднять больше символов или использовать пилоты |
Чего ожидать¶
Запуск по умолчанию (4096 символов QPSK, сдвиг фазы 0,70 рад = 40°, шум 0,055 rms, seed 82):
True phase offset: 0.700000 rad
Blind phase estimate: 0.699895 rad
Decision-directed total estimate: 0.700102 rad
Blind phase error: -0.000105 rad
Decision-directed phase error: 0.000102 rad
EVM before: 69.026 %
EVM after blind: 7.833 %
EVM after decision-directed: 7.833 %
BER before: 2.917480e-02 (239/8192)
BER after blind: 0.000000e+00 (0/8192)
BER after decision-directed: 0.000000e+00 (0/8192)
- Поворот на 40° уже вызывает ошибки (BER 2,9 %), потому что точки лежат лишь в 5° от границ решений на 45°, и шум переталкивает часть из них.
- Слепая оценка 4-й степенью точна до 0,0001 рад, а шагу по решениям исправлять нечего; EVM после обоих: уровень шума (7,8 %).
- Оценка однозначна лишь в пределах ±π/4 (±45°). 0,70 рад выбраны внутри этого интервала намеренно. Что происходит за его пределами в упражнении 1.
Исправлено в сентябре 2026
До этого работа вычисляла angle(mean(r⁴))/4 без смены знака среднего (для этих точек QPSK s⁴ = −1), из-за чего каждая оценка была смещена на π/4, и использовала 0,82 рад вне однозначного интервала. Прогон сообщал BER 0,25 «после коррекции».
Упражнения¶
- Задайте
phase_offset_rad= 0,82 (47°). Слепая оценка становится 0,82 − π/2 = −0,75 рад, скорректированное созвездие повёрнуто на четверть оборота, а BER подскакивает до 0,5, хотя созвездие выглядит идеально. Почему оценщик 4-й степени никогда не отличит 0,82 от −0,75 и как это исправляют известная преамбула или дифференциальное кодирование (см. Лабораторную 8.7)? - Примените оценщик по решениям сам по себе, без слепого шага, к смещению 0,3 рад, затем 0,6 рад, и увеличивайте шум с 0,055 до 0,5. Сравните его смещение со слепой оценкой. Почему оценщик по решениям отказывает, когда и остаточное смещение, и шум велики?
- Оцените фазу только по первым 64, 256 и 1024 символам. Как ошибка оценки зависит от числа символов?
Ответы (проверены запуском скрипта лабораторной)
- 4-я степень переводит любой поворот на π/2 в одно и то же значение (
e^(j4(φ+π/2)) = e^(j4φ)), поэтому 0,82 и 0,82 − π/2 = −0,75 рад дают одинаковыеr⁴. Оценщик видит только созвездие, а QPSK после четверти оборота выглядит так же. Известная преамбула говорит, какой квадрант какой; дифференциальное кодирование кладёт информацию в изменения фазы, которые постоянный поворот не меняет. - Сам по себе оценщик по решениям тянется к нулю. При смещении 0,3 рад его смещение оценки −0,012 рад при шуме 0,2, −0,075 при 0,3 и −0,20 рад при 0,5, тогда как слепая оценка остаётся в пределах 0,002 рад; при 0,6 рад смещение уже −0,24 рад при шуме 0,2. Символ, перенесённый шумом через границу, решается как соседняя точка, которая лежит ближе к повёрнутому наблюдению, поэтому неверные решения согласуются с ошибкой, а не выдают её. Если запускать его после слепого шага, как в этой лабораторной, остаток близок к нулю, и шаг по решениям никогда не проигрывает: его СКО остаётся не хуже слепого вплоть до Es/N0 ≈ 0 дБ.
- По 200 зёрнам шума СКО ошибки это 0,0069, 0,0036, 0,0017 и 0,0009 рад для 64, 256, 1024 и 4096 символов: уменьшается вдвое при каждом учетверении, то есть падает как
1/√N.
Чек-лист отчёта (расширенный)¶
- Указаны тип модуляции и число символов.
- Указан истинный сдвиг фазы.
- Объяснена оценка фазы 4-й степенью.
- Объяснена неоднозначность
pi/2. - Объяснено уточнение по решениям.
- Приложено созвездие до коррекции.
- Приложено созвездие после слепой коррекции.
- Приложено созвездие после коррекции по решениям.
- Указаны EVM и BER до/после.
Шаблон инженерного вывода¶
Сигнал QPSK использовал сдвиг фазы ____ рад. Слепой оценщик измерил ____ рад,
а уточнение по решениям — ____ рад. EVM улучшился с ____ % до ____ %,
а BER изменился с ____ до ____. Оставшееся ограничение — ______.