QPSK通信系统锁相环载波同步仿真与处理平台
项目简介
本项目是一个基于MATLAB环境开发的专业通信系统仿真平台,专注于四相移键控(QPSK)信号的生成、传输及核心的载波同步处理。项目完整构建了从信源到接收端的全链路模型,重点实现了基于四相科斯塔斯环(QPSK Costas Loop)/判决反馈环的载波恢复算法。该平台能够模拟真实的物理信道环境(包含高斯白噪声、载波频率偏差和相位偏差),并通过数字信号处理算法实时校正本地载波,实现信号的精准相干解调。
功能特性
- 全链路通信仿真:涵盖比特流生成、格雷码映射、QPSK调制、脉冲成型、信道损伤模拟及接收解调。
- 高精度载波同步:内置二阶锁相环(PLL)算法,能够有效捕获并跟踪频偏和相偏。
- 信道损伤模拟:支持自定义信噪比(SNR)、载波频率偏移(Freq Offset)及初始相位偏移(Phase Offset)。
- 脉冲成型滤波:发射端与接收端均采用根升余弦(RRC)滤波器,符合实际通信标准。
- 性能可视化分析:提供同步前后的星座图对比、鉴相误差收敛曲线、频率追踪响应及误码率(BER)统计。
系统架构与实现逻辑 (基于 main.m)
本仿真脚本通过以下模块流程序列化执行,完整复现了单载波QPSK通信系统的处理过程:
1. 系统参数配置与初始化
脚本首先定义了基础通信参数,包括:
- 采样率 2MHz,符号速率 100kBaud(20倍过采样)。
- 根升余弦滤波器滚降系数 0.5。
- PLL环路参数:归一化带宽(BL)、阻尼系数(Zeta)及环路增益。
- 信道干扰参数:设置目标的信噪比、频偏(如2000Hz)及相偏。
2. 发射机 (Transmitter)
- 信源生成:利用随机数生成器产生二进制比特流。
- 符号映射:将二进制数据转换为十进制符号,并使用根据Gray码规则的QPSK调制(带pi/4相位偏移)生成复数符号。
- 脉冲成型:使用根升余弦(RRC)滤波器对符号进行上采样和滤波,生成基带传输信号。
3. 信道仿真 (Channel Model)
- 频相偏叠加:通过复指数运算,在发射信号上叠加随时间变化的线性相位旋转(模拟频偏)和固定相位偏移。
- 噪声叠加:根据设定的信噪比(SNR),向信号中添加加性高斯白噪声(AWGN)。
4. 接收机与载波同步核心 (Receiver & PLL Core)
这是本项目的核心处理环节,包含以下步骤:
- 匹配滤波:使用与发射端一致的RRC滤波器对接收信号进行匹配滤波,以最大化信噪比并消除带外噪声。
- 锁相环(PLL)处理:
*
NCO(数控振荡器):利用相位累加器生成本地复数载波,对输入信号进行反向旋转校正。
*
鉴相器(PED):采用适用于QPSK的交叉乘积鉴相算法(Cross-product discriminator),计算公式为
Error = Q * sign(I) - I * sign(Q),用于提取残留相位误差。
*
环路滤波器(Loop Filter):实现比例-积分(PI)控制器。系数(Kp, Ki)根据设定的自然频率和阻尼系数自动计算,用于平滑误差信号并控制NCO。
*
闭环控制:通过逐样点迭代,不仅校正相位,还能使得积分器输出逐渐收敛至频偏值,实现频率锁定。
5. 解调与性能分析
- 最佳采样:在去除滤波器延迟后,按符号速率对同步后的信号进行降采样。
- 相位模糊校正:计算收发符号间的平均相位差,消除由相位模糊(0/90/180/270度)引起的整体旋转,确保误码率计算的有效性。
- 误码率计算:对解调后的比特流与原始发送比特进行比对,计算实测BER,并与理论AWGN信道下的QPSK误码率进行对比。
数据可视化输出
程序运行结束后会自动生成图表窗口,展示以下关键信息:
- 星座图对比:
* 左图展示同步前受频偏和噪声影响旋转、发散的星座图。
* 右图展示经过PLL锁定并稳定后的收敛星座图。
- 鉴相误差曲线:显示环路建立过程中相位误差随时间的收敛情况。
- 频率响应曲线:绘制PLL内部积分器(频率估计值)随时间的变化,并用虚线标示实际设置的频偏真值,直观展示锁频效果。
- 统计信息面板:文本显示当前仿真条件下的SNR、频偏设置、以及最终的实测误码率和理论误码率。
- 时域波形对比:独立窗口展示I路信号在同步前后的时域波形,以及本地NCO生成的恢复载波波形。
环境要求与使用方法
系统要求
- MATLAB R2016a 或更高版本。
- 需安装 Communications Toolbox(通信工具箱)以支持
pskmod、pskdemod、rcosdesign、upfirdn、awgn 等函数。 - 需安装 Signal Processing Toolbox(信号处理工具箱)。
使用方法
- 直接在MATLAB中运行
main 函数即可启动仿真。 - 如需修改仿真条件(如增大频偏、改变信噪比),请直接修改代码开头
sys_params 和 chan_params 结构体中的数值。 - 如需调整锁相环的收敛速度或抖动性能,可调整
pll_params 中的带宽(bl)和阻尼系数(zeta)。