基于特征多项式的M序列自相关分析系统
项目简介
本项目是一个基于MATLAB开发的通信信号处理仿真工具,专注于线性反馈移位寄存器(LFSR)生成的最大长度序列(m序列)的特性分析。系统能够根据用户设定的本原多项式特征,模拟LFSR硬件电路的运行过程,生成二进制伪随机序列,并进一步将其转换为双极性信号,深入分析其周期性自相关函数(PACF)。该工具重点验证了m序列在时域上的双值自相关特性(即峰值与旁瓣电平),并提供了直观的波形可视化和数值验证功能。
功能特性
- 参数化LFSR建模:支持自定义本原多项式的阶数(默认为6阶)和反馈抽头位置,能够模拟基于斐波那契(Fibonacci)构型的移位寄存器运作。
- 伪随机序列生成:自动计算理论周期 $N = 2^m - 1$,并生成完整周期的二进制m序列。
- 双极性信号映射:实现了从二进制逻辑电平 ${0, 1}$ 到双极性通信电平 ${+1, -1}$ 的转换,具体映射规则为 $0 to 1$,$1 to -1$。
- 周期性自相关计算:利用离散相关算法计算序列的循环自相关函数,并进行归一化处理。
- 可视化分析:
* 展示生成的双极性序列的时域波形。
* 绘制归一化自相关函数图,坐标轴扩展至 $[-N, N]$ 范围,清晰展示主峰与旁瓣。
* 自动标注理论峰值(1)和理论旁瓣值($-1/N$)参考线。
- 自动验证:在控制台输出峰值和最大旁瓣值的计算结果,并与理论值进行误差比对(精度 $10^{-10}$),自动判断是否符合m序列特性。
系统要求
- MATLAB R2016a 或更高版本
- 无需额外工具箱(仅使用MATLAB基础绘图和数学运算功能)
使用方法
- 确保MATLAB环境已准备就绪。
- 打开
main.m 脚本文件。 - 直接运行脚本。
- 程序将在“命令行窗口”输出序列生成的参数、周期、峰值及旁瓣验证结果。
- 程序将弹出一个图形窗口,显示序列波形图和自相关函数图。
详细实现逻辑与代码分析
本项目的主程序 main.m 严格按照以下逻辑流程执行:
1. 系统参数初始化
代码首先进行环境清理(清除变量、窗口等)。随后定义了关键参数:
- 多项式阶数:设定 $m=6$,对应生成周期为 $63$。
- 反馈抽头:设定为
[6, 1],对应本原多项式 $f(x) = x^6 + x + 1$。 - 初始状态:移位寄存器的初始状态被设为
[0 0 0 0 0 1],其中末位为1,防止全零死锁状态。
2. M序列生成 (LFSR核心)
主程序调用子函数
lfsr_generator。该步骤根据设定的抽头和初始状态,迭代运行 $N$ 次。每次迭代模拟了一个时钟周期的行为:
- 输出取值:取寄存器状态向量的最后一位(第 $m$ 位)作为当前时刻的输出序列值。
- 反馈计算:提取反馈抽头位置的寄存器数值,进行求和并对2取模(即异或运算),得到反馈位。
- 状态更新:执行移位操作,将计算出的反馈位插入寄存器头部(索引1),原有数据向右移位。
3. 先进信号处理
- 双极性变换:代码使用公式
bipolar_seq = 1 - 2 * binary_seq 完成映射。这种映射($0 to 1, 1 to -1$)是计算通信信号相关性的标准预处理步骤。 - 自相关计算:调用
calculate_periodic_acf 函数。该过程并非简单的线性卷积,而是周期性相关。算法通过双重循环实现:外层循环遍历所有可能的时移 $tau$(从 0 到 $N-1$),内层循环通过模运算 mod(n + tau, N) 实现序列的循环移位并计算点积和。 - 归一化:将计算出的自相关序列除以其最大绝对值(通常为序列长度 $N$),确保在 $tau=0$ 时自相关系数 $R(0)=1$。
4. 结果可视化
绘图部分包含两个子图:
- 子图1(序列波形):使用
stem 函数绘制前50位的双极性序列,直观展示序列的随机性和幅度($pm 1$)。 - 子图2(自相关函数):
* 为了更直观地展示周期性和旁瓣,代码手动构建了扩展的绘图数据。将计算出的单周期ACF
[R(0)...R(N-1)] 进行拼接和重排,使其显示范围覆盖时移 $[-N, N]$。
* 使用蓝色
stem 绘制计算值。
* 使用红色虚线绘制理论旁瓣电平 $y = -1/N$。
* 使用绿色虚线绘制理论峰值 $y = 1$。
* 这种对比使得计算结果与理论值的吻合程度一目了然。
5. 验证结论输出
程序最后会对计算结果进行数值分析:
- 提取 $lag=0$ 处的峰值。
- 搜索所有非零时移处的最大绝对值(旁瓣)。
- 计算旁瓣值与理论值 $|-1/N|$ 之间的误差。如果误差小于 $1 times 10^{-10}$,则判定结果符合M序列的双值自相关特性,并在控制台输出验证通过的信息。
关键算法说明
LFSR 生成器 (lfsr_generator)
该函数实现了斐波那契(Fibonacci)型LFSR。
- 输入:阶数 $m$,抽头向量
taps,当前状态 state,目标长度 $N$。 - 逻辑:
1. 保存当前状态的最后一位作为输出。
2.
feedback_val = mod(sum(current_state(taps)), 2):计算反馈回路的异或值。
3.
current_state = [feedback_val, current_state(1:m-1)]:实现右移操作,高位补入反馈值。
周期性自相关 (calculate_periodic_acf)
该函数基于离散周期序列自相关的定义实现。
对于每一个时移 $tau in [0, N-1]$:
$$R(tau) = sum_{n=0}^{N-1} x[n] cdot x[(n+tau) mod N]$$
这里通过
mod(n + tau, N) + 1 巧妙处理了MATLAB索引从1开始以及循环移位的问题,确保计算是严格基于周期延拓序列进行的。