基于滑动相关法的PN序列同步仿真系统
项目介绍
本项目实现了一个完整的数字通信同步仿真链路,旨在研究和验证基于伪随机(PN)序列的时间同步机制。代码完全基于MATLAB M文件编写,模拟了从信号发射、信道传输到接收端同步的完整过程。核心算法采用滑动相关法(Sliding Correlation),通过计算接收信号与本地参考序列的互相关性来实现码元对齐和同步捕获。该系统能够直观地展示在不同信噪比(SNR)条件下相关峰的特性以及同步算法的鲁棒性。
功能特性
- 参数化PN序列生成:支持自定义线性反馈移位寄存器(LFSR)的级数、生成多项式及初始状态,默认实现长度为127的m序列。
- 完整的通信链路模拟:包含BPSK调制、过采样(脉冲成型)、加性高斯白噪声(AWGN)信道及传输延迟模拟。
- 软件定义的滑动相关器:在接收端通过逐点滑动窗口运算,模拟硬件相关器与其匹配滤波过程。
- 动态峰值检测:采用基于接收信号最大相关值的相对门限判决机制,有效识别同步时刻。
- 闭环性能评估:自动计算估计延迟与真实延迟之间的误差,并转换因环路造成的周期性偏移。
- 多维度可视化:提供时域波形对比、相关器输出包络及同步脉冲信号的三图同屏显示。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox(用于
findpeaks 函数) - Communications Toolbox(用于
awgn 函数)
使用方法
直接运行 main.m 脚本即可启动仿真。脚本会自动执行以下流程:
- 初始化系统参数。
- 执行发射、信道传输、接收处理全流程。
- 在控制台输出同步锁定状态、位置索引及误差分析。
- 弹出图形窗口展示仿真结果。
详细实现逻辑
项目中 main 函数实现了以下具体逻辑:
1. 系统参数配置
脚本首先定义了仿真所需的关键参数结构体
config:
- 寄存器级数:设为7,对应序列周期 N = 127。
- 生成多项式:设定为 [7 3],对应 $z^7 + z^3 + 1$。
- 采样设置:每个码片过采样(SPS)8次,以模拟连续波形。
- 信道参数:信噪比设为5dB,设置50个码片的真实物理延迟。
- 判决门限:设定为最大相关峰值的0.7倍。
2. 发射机 (Tx)
- 序列生成:调用辅助函数生成二进制m序列。
- 调制映射:将二进制(0/1)序列映射为双极性BPSK信号(-1/+1)。
- 脉冲成型:利用自定义的
rectpulse 逻辑,将每个符号扩展为8个采样点,形成矩形脉冲波形。 - 循环发送:为了验证滑动捕捉能力,将生成的基带信号重复3个周期作为发送数据。
3. 信道模型
- 延迟模拟:计算延迟对应的总采样点数,使用
circshift 函数对发送信号进行循环移位,模拟信号在传输过程中的时间滞后。 - 噪声注入:使用
awgn 函数在信号中添加指定信噪比的高斯白噪声,生成最终的接收信号 rx_signal_noisy。
4. 接收机 (Rx) - 滑动相关器
这是系统的核心处理模块:
- 本地参考构建:接收机生成与发射端完全一致的一个周期BPSK过采样信号作为本地模板。
- 滑动运算:
* 建立一个长度为
接收长度 - 参考长度 + 1 的输出缓存。
* 通过循环结构,模拟信号流过相关器的过程。
* 在每个滑动步长上,提取当前接收窗口数据与本地通过模板进行点乘累加(内积运算)。
* 对结果进行归一化处理,得到归一化相关值。
5. 同步判决与检测
- 动态门限:计算相关输出绝对值的最大值,乘以预设因子(0.7)作为判决门限
peak_threshold。 - 峰值搜索:使用
findpeaks 函数寻找超过门限且满足最小距离约束的峰值。 - 同步脉冲生成:如果不为空,在检测到峰值的位置生成高电平脉冲。
- 误差计算:
* 捕获第一个峰值的位置索引。
* 利用模运算(Mod)处理循环移位带来的周期性影响。
* 计算估计延迟与真实设置延迟之间的绝对误差,并将其转换为采样点和码片数显示。
6. 结果可视化
脚本通过三个子图展示仿真结果:
- 时域波形:对比无噪延迟信号与含噪接收信号,以此验证信道模型的正确性。
- 相关输出:绘制滑动相关器的输出包络和判决门限线,直观展示相关峰的尖锐程度及噪声底噪。
- 同步脉冲:使用火柴杆图(Stem plot)标记出系统判定为同步的具体时刻。
关键算法与函数分析
滑动相关算法 (Sliding Correlation)
代码中通过显式的
for 循环实现了滑动相关。这种方法在数学上等同于匹配滤波(Matched Filter)。对于长度为 $L$ 的本地参考序列 $r$ 和接收序列 $x$,时刻 $i$ 的相关输出 $y[i]$ 计算如下:
$$ y[i] = frac{1}{L} sum_{k=0}^{L-1} x[i+k] cdot r[k] $$
这种算法能够利用PN序列良好的自相关特性(通过BPSK调制后,自相关峰值为1,旁瓣接近0),从深噪声中提取出同步定时信息。
辅助函数 generate_m_sequence
这是一个基于线性反馈移位寄存器(LFSR)原理的自定义函数。
- 输入:寄存器级数 $n$、反馈抽头位置、初始状态、输出长度。
- 实现:维护一个长度为 $n$ 的状态向量。在每个时钟周期,输出寄存器末位,并计算反馈抽头位的异或(XOR)和,将结果移入寄存器首位。虽然代码中未直接使用
comm.PNSequence 对象,但该函数准确地实现了标准LFSR逻辑。
辅助函数 rectpulse
用于替代工具箱函数的自定义实现。
- 功能:对输入序列进行矩形脉冲过采样。
- 实现:遍历输入序列的每一个符号,将其复制填充到输出向量对应的
sps 个位置中,从而实现零阶保持(ZOH)插值效果。