(66)RLS均衡器和LMS均衡器作用于通过频率选择性衰落信道的16-QAM信号的性能对比MATLAB仿真
文章目录
- 前言
- 一、RLS和LMS算法对比
- 1. 算法原理
- 2. 收敛速度
- 3. 应用场景
- 二、RLS和LMS算法用于信道均衡的MATLAB仿真
- 三、仿真结果
- 1.RLS均衡器的误差曲线
- 2. RLS均衡器均衡前后的星座图
- 3. LMS均衡器的误差曲线
- 4. LMS均衡器均衡前后的星座图
- 5. RLS算法和LMS算法的运行时间对比
- 总结与后续
前言
首先从理论上对比分析了RLS和LMS的算法原理和收敛速度,然后介绍了各自的应用场景。然后使用MATLAB仿真建模,分别使用RLS算法自适应滤波器和LMS算法自适应滤波器对通过频率选择性衰落信道的16-QAM信号进行均衡,进行两种算法的性能对比,给出了仿真结果。
一、RLS和LMS算法对比
RLS和LMS都是用于自适应系统中的滤波算法,它们能够根据输入信号自动调整滤波器的系数以最小化误差。以下是两者之间的对比分析:
1. 算法原理
LMS算法基于最速下降法(Steepest Descent Method),利用输入信号的功率进行迭代,算法简单,计算量小。
RLS算法基于最小二乘法(Least Squares Method),考虑了过去的所有输入信号,通过递推公式更新滤波器系数,算法复杂,计算量大。
与LMS算法相比,RLS方法在适应未知系统方面提供了更快的收敛速度和更小的误差,其代价是需要更大的计算量。
2. 收敛速度
LMS算法收敛速度较慢,特别是在信噪比较低的环境中。收敛速度与步长(mu)的选择有很大关系,步长太大可能导致不稳定,步长太小则收敛慢。
RLS算法收敛速度快,能够快速跟踪信号的变化。收敛速度与遗忘因子(lambda)有关,遗忘因子接近1时,算法的记忆力强,收敛速度快。
3. 应用场景
LMS算法适用于对实时性要求高、计算资源有限的环境。常用于噪声对消、信道均衡等领域。
RLS算法适用于对收敛速度要求高、计算资源相对丰富的环境。常用于信号处理、系统辨识等领域。
总结来说,LMS算法因其简单和低计算复杂度而广泛应用于实时系统,而RLS算法则因其快速收敛特性而在需要快速跟踪信号变化的场合中更为合适。选择哪种算法取决于具体的应用需求、系统资源以及性能要求。
二、RLS和LMS算法用于信道均衡的MATLAB仿真
使用RLS算法和LMS算法对通过频率选择性衰落信道的16-QAM信号进行均衡,并比较两种算法的性能。仿真代码如下:
%指定调制阶数。生成相应的QAM参考星座。
M = 16;
sigConst = qammod(0:M-1,M,'UnitAveragePower',true);% 创建一个具有三个抽头的频率选择性静态信道。
rchan = comm.RayleighChannel('SampleRate',1000, ...'PathDelays',[0 1e-3 2e-3],'AveragePathGains',[0 -3 -6], ...'MaximumDopplerShift',0, ...'RandomStream','mt19937ar with seed','Seed',73);%% RLS均衡器
eqrls = comm.DecisionFeedbackEqualizer('Algorithm','RLS');
eqrls.NumForwardTaps = 6;
eqrls.NumFeedbackTaps = 1;
eqrls.ForgettingFactor = 0.99;
eqrls.InitialInverseCorrelationMatrix = 0.1;
eqrls.ReferenceTap = 3;
eqrls.Constellation = sigConst;% 生成并QAM调制随机训练序列。
trainData = randi([0 M-1],4000,1);
trainSig = qammod(trainData,M,'UnitAveragePower',true);% 通过瑞利衰落信道传递序列。
rxSig = rchan(trainSig);% 将接收到的信号和训练信号通过均衡器,以设置均衡器抽头权重。训练序列之后,进行判决导向模式继续工作。
tic
[eqSig,errorSig] = eqrls(rxSig, trainSig(1:1000));
rlstime = toc; % 测量执行处理循环所需的时间。% 绘制估计误差的大小。
figure()
plot(abs(errorSig))
grid on
title('Error Estimate, RLS Equalizer')
xlabel('Symbols')
ylabel('Amplitude')
ylim([0 1.4])
% 误差在200个符号内收敛。% 绘制接收信号和均衡信号的星座图。
h = scatterplot(rxSig,1,0,'c.');
hold on
scatterplot(eqSig(501:end),1,0,'b.',h)
legend('Received Signal','Equalized Signal','Location','northeastoutside')
title('RLS Equalizer')
hold off
% 均衡器抵消了衰落信道的影响。%% LMS均衡器
% 使用LMS均衡器重复均衡过程。创建LMS均衡器对象。
eqlms = comm.DecisionFeedbackEqualizer('Algorithm','LMS');
eqlms.NumForwardTaps = 6;
eqlms.NumFeedbackTaps = 1;
eqlms.StepSize = 0.03;
eqlms.Constellation = sigConst;% 训练LMS均衡器,以设置均衡器抽头权重。训练序列之后,进行判决导向模式继续工作。
tic
[eqSig,errorSig] = eqlms(rxSig, trainSig(1:1000));
lmstime = toc; % 测量执行处理循环所需的时间% 绘制估计误差的大小。
figure()
plot(abs(errorSig))
grid on
title('Error Estimate, LMS Equalizer')
xlabel('Symbols')
ylabel('Amplitude')
ylim([0 1.4])
% 训练LMS均衡器需要1000个符号。% 绘制接收信号和均衡信号的星座图。
h = scatterplot(rxSig,1,0,'c.');
hold on
scatterplot(eqSig(1001:end),1,0,'b.',h)
legend('Received Signal','Equalized Signal','Location','northeastoutside')
title('LMS Equalizer')
hold off
% 均衡器抵消了衰落信道的影响。% 比较两种均衡器算法的循环执行时间
rlstime
lmstime
三、仿真结果
仿真结果如下:
1.RLS均衡器的误差曲线
2. RLS均衡器均衡前后的星座图
3. LMS均衡器的误差曲线
4. LMS均衡器均衡前后的星座图
5. RLS算法和LMS算法的运行时间对比
rlstime = 0.0065
lmstime = 0.0014
结论:
由RLS算法和LMS算法均衡的误差曲线对比,和两种算法的耗时对比,可以看到LMS算法的计算效率更高,执行时间是RLS算法的1/5,但是,LMS算法所需的训练序列是RLS算法的5倍。仿真结果与理论分析一致。
总结与后续
本文是RLS自适应滤波器应用举例的第五篇文章,给出了RLS均衡器和LMS均衡器作用于通过频率选择性衰落信道的16-QAM信号的性能对比MATLAB仿真。至此,就均衡器这一主题,先后介绍了迫零均衡器、MMSE均衡器、LMS均衡器、RLS均衡器等类型的原理介绍,每一种滤波器类型都给出了详细的MATLAB仿真代码与仿真结果。后续还将对面向判决的自适应均衡器进行详细介绍,给出MATLAB仿真代码与仿真结果,希望对您有用。感谢关注!