当前位置: 首页 > news >正文

(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仿真代码与仿真结果,希望对您有用。感谢关注!




http://www.mrgr.cn/news/70788.html

相关文章:

  • CentOS AppStream 8 手动更新 yum源
  • 圆满毕业!致同中国首期战略研讨班第六次集中研讨暨结业式在武汉落下帷幕
  • OceanBase 4.3.3 功能解析:列存副本
  • ORACLE创建用户之后查询不到创建的用户
  • 【linux】网络基础 ---- 应用层
  • 酒店行业数据仓库
  • Python函数专题:偏函数
  • halcon拉普拉斯算子
  • 【优选算法】探索双指针之美(一): 同向双指针缔造滑动窗口
  • SpringBoot(十二)SpringBoot配置redis
  • 使用金鸣识别在线网页版将行驶证转为结构化Excel教程
  • C#画图板的详细示例代码
  • 【linux】CentOS 的软件源(Repository)学习
  • C++ | Leetcode C++题解之第559题N叉树的最大深度
  • 【Linux】获得同一子网下当前在线设备IP/Latency/MAC 通过nmap指定CIDR扫描当前在线设备
  • 启动QT时,出现找不到python27.dll的问题报错
  • 后端:Aop 面向切面编程
  • Springboot配置全局异常通用返回
  • Golang | Leetcode Golang题解之第559题N叉树的最大深度
  • 初识Linux · 共享内存
  • NRZ(Non-Return to Zero Code,非归零码),NRZI(Non-Return to Zero Inverted Code,非归零反转码)
  • SpringBoot(十三)SpringBoot配置webSocket
  • SIwave:在 SIwave 中释放计算频率扫描的强大功能
  • SpringBoot(八)使用AES库对字符串进行加密解密
  • 使用 ConstraintLayout 实现灵活的相对定位与偏移布局
  • 【Linux 31】网络层协议 - IP