基于 P201Pro | 接收端基础知识——Costas环锁定后为何仍会错?DQPSK与前导码相位校正(6)

前言

在上小节基于P201Pro | 接收端基础知识------从QPSK点簇到bit流:硬判决、解映射与相位校正实测(5)中载波和定时都锁住了, 但在上一篇的最后,我们仍然遇到了QPSK星座整体旋转的问题。当时采用乘以固定常数的方式进行了校正,如下图所示。

甚至可以说不是解决方式,而是看出来而已。今天我们来解决这个问题。 现在处理这种相位旋转一般有两种方式:

  1. DQPSK差分编码:不关心绝对相位,只利用相邻符号的相位差。

  2. 前导码辅助校正:利用已知前导码判断星座旋转了哪个象限,再自动乘以 、、、。

本文就是来讨论这两种方式的。

方法一:DQPSK------不判断绝对方向,只判断相位变化

普通QPSK把两位bit直接映射到一个绝对相位。例如我们约定右上角表示00、左上角表示01。但Costas环只能把星座锁成四个点簇,无法判断哪个点簇才是发送端规定的右上角。因此,星座即使整体旋转、或,环路仍然认为自己已经锁定。

DQPSK换了一种思路:不让当前符号的绝对方向直接表示bit,而让它相对前一个符号转过的角度表示bit。 例如可以约定:

输入bit 相邻符号的相位变化
00
01
11
10

设第组bit对应的相位增量编号为,发送符号的相位编号为,则差分编码可以写成:

接收端再用相邻两个符号相减:

假设Costas环产生了个的固定旋转,那么接收端看到的是:

代入差分解码公式可得:

前后两个符号携带了相同的旋转,相减后它自然被抵消。用复数形式表示更加直接。若接收符号为,则:

这里与相消,所以无论四个点簇整体转到哪个象限,相邻符号的相位差都没有改变。

上图中,右图的两个符号相对左图整体旋转了,但"前一符号到当前符号"的相位变化仍然是。DQPSK正是利用这个不变量恢复bit。

不过,DQPSK并没有真的把星座转回原来的方向,它只是绕开了绝对相位问题。因此它有三个需要注意的地方:

  1. 收发两端都要增加差分编码和差分解码,系统使用的不再是普通QPSK映射;

  2. 一个符号同时参与前后两次差分,某个符号判错时可能影响相邻两组bit;

  3. 它只能抵消相邻符号间近似不变的公共相位,不能代替FLL和Costas环去纠正持续变化的频偏。

差分编码的GNU Radio验证

在gnuradio中有我们需要的差分编码模块,直接拖动就行,得到的效果如下:

至于中间为啥会空一段,这是因为我先加了前导码字,这里搜索的是不包含前导码字的部分。

  • 星座整体旋转是仍然存在;

  • 差分解码后的bit恢复正确;

  • DQPSK并没有把星座转正,却依然能够正确恢复bit。

方法二:前导码辅助校正------主动找回QPSK的绝对方向

DQPSK选择忽略绝对方向,前导码方法则相反:发送一段收发双方都知道的符号,让接收机根据这段"标准答案"判断星座到底转了多少。

例如,在每帧有效数据前加入固定前导码:

接收端保存同一组本地前导符号。Costas环输出已经形成四个点簇,只是可能存在的整体旋转。此时在接收序列上滑动计算复相关:

这个式子同时提供两类信息:

  • 表示接收片段与前导码有多相似,用来寻找前导码位置;

  • 表示接收前导码相对本地前导码旋转了多少,用来估计相位。

如果窗口正好对准前导码,并暂时忽略噪声,则,所以:

单位幅度QPSK符号满足,因此:

也就是说,正确位置上的相关结果会形成一根很长的向量:它的长度接近,方向就是待校正的相位。如果窗口没有对准前导码,各项方向杂乱,相加后就会相互抵消。

为了避免接收幅度变化直接影响门限,实际判断时可以使用归一化相关值:

的范围约为。当它超过门限时,可以认为前导码被找到;随后将相关相位量化到最近的:

最后让前导码之后的符号统一乘以:

四种象限模糊对应的校正系数如下:

检测到的整体旋转 接收端乘数

图中接收信号整体旋转了。相关值在前导码位置出现明显峰值,同时给出接近的相位估计;接收端从此处开始乘以,四个点簇便恢复到发送端约定的方向。之后再进行硬判决和bit解映射,得到的bit顺序才与发送端一致。

这里有一个容易混淆的地方:前导码相关并不是直接替代Costas环。在本文的处理顺序中,Costas环先消除连续变化的残余频偏和相位误差,使星座稳定为四个点簇;前导码模块再解决Costas环无法区分的、、和象限模糊。因此当前接收链可以写成:

前导码方法也有代价:它会占用一部分发送时间,而且接收机必须先完整收到前导码才能得到可靠的相关结果。通常让校正系数作用于前导码之后的有效载荷;下一帧到来时再重新检测和更新,从而跟踪可能发生的重新锁定或相位跳变。

前导辅助的GNU Radio验证

设计一个简单的帧结构如下:

发射端不变,发出信号如下图:

搜索部分是前导码:

复制代码
11100001010110101110100010010011

接收端根据上面理论写了个模块:

用于估计这个QPSK的相位,并且做出旋转,流图和运行结果如下图:

两种方法怎么选择

对比项 DQPSK差分方式 前导码辅助校正
基本思路 只判断相邻符号的相位变化 用已知符号找回绝对方向
是否恢复星座绝对方向 否 是
是否改变数据编码方式 是,收发两端都要差分处理 否,仍可保留原QPSK映射
额外开销 需要参考符号或初始状态 每帧需要发送前导码
判错影响 可能影响相邻两次差分 一般不产生差分式误差传播
能否提供帧位置 不能 可以
后续扩展 主要解决相位模糊 可继续辅助载波同步和定时同步

如果只希望避开QPSK象限模糊,且不关心绝对相位,DQPSK结构更直接;对于本文正在搭建的分帧QPSK收发系统,前导码更合适。它不仅能纠正当前的相位旋转,还给接收机提供了一个明确的帧起点。

实验环境介绍

收发设备还是下面这个结构:

设备如下:

总结:前导码的作用还没有结束

面对Costas环锁定后仍可能出现的整数倍旋转,DQPSK和前导码代表了两种不同思路:前者让信息只依赖相位变化,从而绕开绝对方向;后者利用已知符号估计旋转角度,再把星座主动转回发送端的映射方向。

本文暂时只把前导码用在Costas环之后,用于帧检测和象限校正。但前导码既然是一段已知波形,就不只能回答"这一帧在哪里、星座转了哪个象限",还可以进一步参与频偏估计、载波捕获和定时位置估计。下一篇将继续讨论:怎样让前导码从"相位校正依据"进一步变成接收机的同步辅助信号。

相关推荐
上海广测检测科技有限公司10 小时前
欧盟NIS2指令对中国制造商的供应链合规传导:判定边界与Article 21十条措施解读
经验分享
璞致电子11 小时前
基于 P201Pro 的 QPSK 无线收发|接收端基础知识 (2):从混乱星座到 QPSK 点簇,Costas‑Loop 载波同步 GNU Radio 实测
经验分享
by2099913 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
by2099915 小时前
从 malloc/free 到 new/delete:真正理解 C++ 中的内存管理与对象生命周期
c语言·c++·经验分享·动态内存管理
周玉奎先生16 小时前
CGM系列水泥基灌浆料型号参数解析及安庆重点工程应用匹配
经验分享·笔记·零售
恒锐丰科技林技术员17 小时前
EG2106 半桥 MOS/IGBT 驱动芯片解析与工程应用
经验分享·嵌入式硬件·硬件工程
璞致电子20 小时前
基于 AD9361 (PZSDR‑P201Pro) 软件无线电实战综述:从板卡选型、硬件平台升级到 GNU Radio QPSK 完整收发链路
经验分享·嵌入式硬件·fpga开发·软件无线电·sdr·璞致电子
Funny_AI_LAB21 小时前
重构 Coding Agent:当 LLM 没有 KV Cache 时,上下文工程该怎么做?
人工智能·经验分享·语言模型·重构
炎龙铠甲会合体1 天前
从 SPEC 到上板:在 Zynq-7020 上用 RTL 手写一个 YOLO 卷积加速器(完整教程)
yolo·fpga开发·axi·芯片验证