项目:基于Gardner算法的接收机定时同步仿真系统
项目简介
本项目是一个基于MATLAB的全数字接收机定时同步仿真平台。它构建了一个标准的单载波QPSK数字通信链路,涵盖了从基带信号生成、信道损伤模拟到接收机定时恢复的完整流程。核心功能集中在接收端,采用经典的Gardner算法实现非数据辅助(NDA)定时误差检测,配合Farrow插值滤波器和PI环路滤波器,演示了如何在存在初始定时偏差和噪声的情况下完成时钟同步与信号恢复。
核心功能特性
- 全流程基带仿真:实现了从随机比特生成、QPSK调制、根升余弦(SRRC)脉冲成型到接收解调的完整链路。
- 高精度信道模型:通过频域相位旋转(FFT/IFFT)引入非整数采样点的小数倍初始延迟,模拟真实的信号传输时延,并叠加高斯白噪声(AWGN)。
- 流式处理架构:接收机代码采用逐样本处理的循环结构(Sample-by-Sample),完全模拟FPGA或Simulink中的硬件流式处理机制,而非MATLAB传统的批处理矩阵运算。
- Gardner定时恢复环路:
*
误差检测:使用每符号2采样的Gardner定时误差检测器(TED)。
*
插值滤波:集成Farrow结构插值器,处理分数间隔延迟。
*
环路控制:包含二阶PI环路滤波器和数控振荡器(NCO)控制逻辑,支持环路带宽和阻尼系数的参数化配置。
- 可视化分析:提供同步前后的星座图对比以及定时误差的收敛曲线,直观展示环路锁定过程。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox(通信工具箱/信号处理工具箱,用于rcosdesign, upfirdn, awgn等函数)
- Communications Toolbox
使用方法
直接运行
main.m 函数即可启动仿真。程序将自动执行以下步骤:
- 设置通信链路与同步环路参数。
- 生成发射信号并通过含延迟和噪声的信道。
- 进入接收机循环,执行定点/浮点流式定时恢复算法。
- 仿真结束后弹出图形窗口,展示星座图和误差收敛情况。
main.m 代码逻辑详述
1. 系统参数配置
程序首先定义了仿真的关键参数。发射端采用每符号4个采样点(sps_tx=4),而接收端目标是恢复出每符号2个采样点(sps_rx_target=2)以满足Gardner算法需求。
代码中详细计算了环路滤波器参数:根据设定的归一化环路带宽(Bn_Ts = 0.01)和阻尼系数(zeta = 0.707),利用二阶锁相环理论公式反推出比例增益(Kp)和积分增益(Ki)。同时设置了NCO增益和鉴相器增益。
2. 发射机(Transmitter)
发射链路包含以下步骤:
- 信源生成:产生随机整数序列。
- 调制:进行QPSK调制(采用Gray映射)。
- 脉冲成型:使用根升余弦滤波器(SRRC)进行上采样和滤波,滚降系数设为0.5。
3. 信道模型(Channel)
为了验证同步算法的精度,代码采用了一种高精度的延迟模拟方法:
- 分数延迟:不使用简单的移位,而是通过FFT将信号变换到频域,乘以线性相位项
exp(-j*2*pi*f*delay),再通过IFFT变回时域。这允许引入0.6个采样点这样的非整数延迟。 - 噪声叠加:根据设定的信噪比(20dB)添加高斯白噪声。
4. 接收机定时同步环路(核心实现)
这是代码中最复杂的部分,模拟了硬件的实时处理过程:
*
farrow_buf:维护一个长度为4的FIFO缓冲区,用于存储当前的输入样本,供三次拉格朗日插值使用。
*
samples_out:维护长度为3的移位寄存器,存储插值后的输出样本(pre_strobe, mid_sample, curr_strobe),用于Gardner算法计算。
* NCO计数器倒计时,当检测到下溢(underflow)时,触发插值操作。
* 计算分数间隔
mu:根据NCO的残差和当前控制字计算插值时刻的位置。
* 调用
farrow_interpolator(外部函数)根据
mu 和
farrow_buf 计算出同步后的样本值。
* 算法运行在每符号2个采样点的速率上(即2倍过采样)。
* 通过判断
sample_idx_out 的奇偶性,确定当前点是最佳采样点(Strobe)还是中间点(Mid-strobe)。
* 在最佳采样点时刻,利用公式
e = real(mid) * (real(curr) - real(prev)) + ... 计算定时误差。该公式利用了中间点幅度和前后符号差值的相关性,无需预知数据内容。
* 计算出的定时误差经过PI控制器(比例+积分路径)。
* 输出结果用于调整NCO的频率控制字
w_nco,从而改变下一次插值的时间步长,形成闭环负反馈,消除定时偏差。
5. 结果记录与可视化
在流式处理过程中,代码实时记录了定时误差、分数间隔(mu)、NCO控制字以及同步后的符号。
仿真结束后,绘图部分生成三张子图:
- 同步前星座图:直接对接收信号按固定间隔抽取,由于存在定时偏差,星座点呈现旋转和发散状态。
- 同步后星座图:展示经过Gardner环路校正后的信号,去除收敛初期的点后,呈现清晰收敛的QPSK星座点。
- 定时误差收敛曲线:展示定时误差随时间逐渐趋近于0并不在0附近震荡的过程,验证了算法的捕获和跟踪能力。
注意事项
- 本项目模拟的是全数字接收机,假设ADC采样是自由运行的,同步完全在数字域通过插值完成。
- 代码中的
farrow_interpolator 函数假定是一个独立的子函数(在代码片段中未直接展开,但在逻辑流程中被调用),通常实现三次多项式插值。 - 分析图中星座图时,同步后的星座图去除了前500个点的瞬态响应,仅展示环路锁定后的稳态效果。