基于RLS算法的自适应均衡器仿真系统
项目介绍
本项目是一个基于MATLAB环境构建的数字通信自适应均衡仿真系统。其核心目标是演示并验证递归最小二乘(Recursive Least Squares, RLS)算法在消除频率选择性衰落信道引起的码间干扰(ISI)方面的有效性。
程序模拟了一个完整的QPSK通信链路,包括信号产生、信道传输、加性高斯白噪声(AWGN)干扰以及接收端的自适应均衡处理。为了直观展示RLS算法的优越性,系统同时实现了LMS(最小均方)算法作为对比,通过星座图和均方误差(MSE)收敛曲线,清晰地呈现了RLS算法在收敛速度和稳态误差方面的性能表现。
功能特性
- QPSK 基带信号生成:模拟生成随机的四相相移键控信号,采用归一化功率的星座图映射。
- 复杂信道环境模拟:构建了一个具有混合相位特性的离散多径信道模型,能够引入严重的码间干扰,并叠加可调信噪比(SNR)的高斯白噪声。
- RLS 自适应均衡:完整实现了标准的RLS算法,利用逆相关矩阵的递归更新来实现权值的快速收敛。
- LMS 算法对比:平行运行LMS算法,用于对比两种经典自适应滤波算法的性能差异。
- 可视化性能分析:
* 信道冲激响应图。
* 均衡前后的信号星座图对比。
* 基于滑动平均的MSE学习曲线(收敛曲线)对比。
- 统计输出:控制台实时输出最终的权值向量模值及稳态MSE指标。
系统要求
- MATLAB R2016a 或更高版本
- 无需特殊工具箱(程序主要使用MATLAB基础函数)
使用方法
- 将项目代码保存为
main.m 文件。 - 在MATLAB命令窗口中直接运行
main 或点击编辑器中的“运行”按钮。 - 程序将自动执行仿真,并在行结束后弹出包含四个子图的结果窗口,同时在控制台打印详细的仿真统计数据。
---
仿真流程与实现逻辑详解
本项目的 main.m 脚本严格按照以下逻辑流程执行:
1. 系统参数初始化
程序首先定义了仿真的关键参数:
- 通信参数:发送符号数设为3000,信噪比(SNR)设为25dB。
- 均衡器结构:采用横向滤波器结构,抽头长度(阶数)为11。
- 算法参数:
* RLS算法:遗忘因子 $lambda=0.995$,P矩阵初始化参数 $delta=0.1$。
* LMS算法:步长 $mu=0.02$。
- 信道模型:定义了一个11径的频率选择性衰落信道系数
h_channel。 - 延迟对齐:根据信道主径位置和滤波器中心位置,自动计算系统延迟
sys_delay,以保证误差计算时的时序对齐。
2. 信号生成与信道传输
- 发射端:使用
randi 生成0-3的随机整数序列,并映射到QPSK星座点 [1+j, -1+j, -1-j, 1-j]/sqrt(2)。 - 信道:使用
filter 函数将发射信号与信道冲激响应进行卷积,引入ISI。 - 噪声添加:根据设定的SNR计算信号功率与噪声功率,生成复高斯白噪声并叠加到信号上。
- 预处理:对接收信号执行功率归一化处理(除以标准差),这有助于自适应算法的数值稳定性。
3. RLS 自适应均衡算法实现
这是本程序的核心部分,通过
for 循环逐点处理接收数据:
- 输入滑窗:构建长度为
M_taps 的输入向量 u_window,模拟移位寄存器。 - 期望信号获取:根据计算出的系统延迟,从原始发送序列中提取对应的期望信号 $d(n)$。
- 滤波输出:计算当前权值向量与输入向量的内积,得到估计输出 $y(n)$。
- 误差计算:计算先验误差 $e(n) = d(n) - y(n)$。
- RLS 迭代更新(当数据进入有效范围后):
* 计算中间向量
pi_vec ($u^H P_{old}$)。
* 计算增益因子
gamma。
* 计算卡尔曼增益向量 $k$。
*
更新权值:$w = w + k cdot e^*(n)$。
*
更新逆相关矩阵:依照RLS公式递归更新 $P$ 矩阵。
4. LMS 算法对比实现
为了验证RLS的性能,程序在相同的信号输入下运行了LMS算法:
- 同样维护一个输入滑窗。
- 计算输出和误差。
- 使用随机梯度下降法更新权值:$w = w + mu cdot e(n) cdot u^*(n)$。
5. 结果分析与绘图
程序最后对仿真数据进行处理并展示:
- 数据平滑:对误差功率($|e|^2$)取对数并进行滑动平均,以生成平滑的MSE学习曲线。
- 有效数据截取:去除由于滤波器延迟和初始化阶段产生的无效数据点。
- 绘图布局:
*
子图1:绘制信道冲激响应幅度,展示多径效应。
*
子图2:绘制均衡前的接收信号星座图,展示噪声和ISI造成的“云团”现象。
*
子图3:绘制RLS均衡后的输出星座图,对比标准QPSK点,展示聚类效果。
*
子图4:将RLS和LMS的MSE曲线绘制在同一坐标系中,直观对比收敛速度(RLS通常在几十个符号内收敛,而LMS较慢)。
核心算法分析
递归最小二乘 (RLS)
代码中完整复现了RLS算法的标准流程。RLS利用所有历史信息(通过加权)来估计自相关矩阵的逆矩阵。
*
P:输入信号自相关矩阵的逆矩阵近似。代码初始化为大的对角阵 (
eye(M_taps) / rls_delta),这对于算法初期的快速启动至关重要。
*
rls_lambda (遗忘因子):设置为0.995。该参数决定了算法的“记忆”长度,值越接近1记忆越长,但在非平稳环境下的跟踪能力会变弱;值越小跟踪越快,但稳态误差波动可能增大。
- 优势:从仿真结果(MSE曲线)可以看出,RLS算法仅需极少的迭代次数即可达到稳态,收敛速度远快于LMS算法。
最小均方 (LMS)
作为基准算法,代码展示了LMS结构简单、计算量小的特点。
- LMS仅利用当前的瞬时梯度值来更新权值,因此其收敛轨迹呈现出更多的随机性,且收敛速度受特征值散布度影响较大。在本项目的高SNR和多径信道环境下,LMS需要更多的符号才能收敛。