LMS与RLS算法学习笔记

  • 一、 研究目的
    • 1.1最陡下降法理论
    • 1.2$LMS$算法
    • 1.3$RLS$算法
    • 1.4研究目标
  • 二、代码解析
  • 三、结果

实现代码点击 这里下载

一、 研究目的

1.1最陡下降法理论

LMS算法总是与最陡下降法联合使用,顾名思义,最陡下降法就是沿着性能曲面最陡放方向向下(曲面负梯度方向)搜索曲面的最低点。迭代过程首先从曲面上某个初始点(对应与初始权矢量w(0) )出发,沿着该点负梯度方向搜索至第一点(对应与初始权矢量w(1) ,且w(1)等于初始值w(0)加上一个正比于负梯度的增量 )。以此类推,直到搜索到最低点 w* 。所以最陡下降法迭代计算权矢量的公式为:
w(n+1)=w(n)+μ(−∇(n))\boldsymbol{w(n+1)}=\boldsymbol{w(n)}+\mu(-\boldsymbol{\nabla}(n)) w(n+1)=w(n)+μ(−∇(n))
式中,μ\muμ是控制搜索步长的参数称为自适应增益常数。那么如何选取合适的μ\muμ值?
由于推到十分复杂,这里简单给出结论:
0&lt;μ&lt;λmax−10&lt;\mu&lt;\lambda^{-1}_{max} 0<μ<λmax−1​
式中,λmax\lambda_{max}λmax​为R(x(n)自相关矩阵)R(x(n)自相关矩阵)R(x(n)自相关矩阵)的最大特征值。当然有时为了免去计算RRR的特征值的麻烦,因为RRR是正定的,所以有:
tr[R]=∑k=0Lλk&gt;λmaxt_r[R]=\sum_{k=0}^L\lambda_{k}&gt;\lambda_{max} tr​[R]=k=0∑L​λk​>λmax​
这里,tr[R]t_r[R]tr​[R]是RRR的迹,它可以用输入信号的取样值进行估计,即:
tr[R]=∑k=0LE[xi2(n)]t_r[R]=\sum_{k=0}^LE[x^2_i(n)] tr​[R]=k=0∑L​E[xi2​(n)]
所以进一步有:
0&lt;μ&lt;tr−1[R]0&lt;\mu&lt;t_r^{-1}[R] 0<μ<tr−1​[R]

1.2LMSLMSLMS算法

由于最陡下降法每次迭代都需要知道性能曲面上某点的梯度值,而实际上梯度值只能根据观察数据进行估计。而LMSLMSLMS实质上是用平方误差代替均方误差,即:
∇(n)≈∇^(n)≜∂e2(n)∂w=[∂e2(n)∂w0∂e2(n)∂w1⋯∂e2(n)∂wL]T\boldsymbol{\nabla}(n)\approx\hat\boldsymbol{\nabla}(n)\triangleq\frac{\partial e^2(n)}{\partial w}=[\frac{\partial e^2(n)}{\partial w_0}\ \frac{\partial e^2(n)}{\partial w_1}\cdots\frac{\partial e^2(n)}{\partial w_L}]^T ∇(n)≈∇^(n)≜∂w∂e2(n)​=[∂w0​∂e2(n)​ ∂w1​∂e2(n)​⋯∂wL​∂e2(n)​]T
可以得到:
∇^(n)=2e(n)∂e(n)∂w=2e(n)x(n)\hat\boldsymbol{\nabla}(n)=2\boldsymbol{e(n)}\frac{\partial \boldsymbol{e(n)}}{\partial w}=2\boldsymbol{e(n)x(n)} ∇^(n)=2e(n)∂w∂e(n)​=2e(n)x(n)
得到LMSLMSLMS算法的基本关系式:
w(n+1)=w(n)−μ(∇(n))=w(n)+2μe(n)x(n)\boldsymbol{w(n+1)}=\boldsymbol{w(n)}-\mu(\boldsymbol{\nabla}(n))=\boldsymbol{w(n)}+2\mu \boldsymbol{e(n)x(n)} w(n+1)=w(n)−μ(∇(n))=w(n)+2μe(n)x(n)
我们可以证明∇^(n)\hat\boldsymbol{\nabla}(n)∇^(n)是∇(n)\boldsymbol{\nabla}(n)∇(n)的无偏估计,换句话说,如果在每次迭代调整权矢量前能够进行多次观测,获得多个x(n)x(n)x(n),然后一句梯度的统计平均值E[∇^(n)]E[\hat\boldsymbol{\nabla}(n)]E[∇^(n)]来调整权矢量,则迭代结果必定能得到理想的最佳权矢量。

1.3RLSRLSRLS算法

RLSRLSRLS算法的关键是用二乘方的时间平均准则取代最小均方准则,并按照时间进行迭代计算,换句话说,对从起始时刻到当前时刻所有误差的平方进行平均并使之最小化,即:
ϵ(n)=∑k=0ne2(k)=min\epsilon(n)=\sum_{k=0}^{n}e^2(k)=min ϵ(n)=k=0∑n​e2(k)=min
其中:
e(k)=d(k)−y(k)e(k)=d(k)-y(k) e(k)=d(k)−y(k)
对于,非平稳随机信号,为了更好的跟踪,引入一个指数加权因子对上式进行修正:
ϵ(n)=∑k=0nλn−ke2(k)=min\epsilon(n)=\sum_{k=0}^{n}\lambda^{n-k}e^2(k)=min ϵ(n)=k=0∑n​λn−ke2(k)=min
式中,λ\lambdaλ称之为遗忘因子,它是小于1的正数,展开上式可以知道,新到的数据比就到的数据更重要。
这里定义两个新的矩阵(被加权后的自相关和互相关),即:
R(n)=∑k=0nλn−kx(k)xT(k)\boldsymbol{R}(n)=\sum_{k=0}^{n}\lambda^{n-k}\boldsymbol{x(k)x^T(k)} R(n)=k=0∑n​λn−kx(k)xT(k)
P(n)=∑k=0nλn−kd(k)x(k)\boldsymbol{P}(n)=\sum_{k=0}^{n}\lambda^{n-k}\boldsymbol{d(k)x(k)} P(n)=k=0∑n​λn−kd(k)x(k)
可以推出RLSRLSRLS算法基本关系:
w(n)=w(n−1)+k(n)e(n∣n−1)\boldsymbol{w(n)}=\boldsymbol{w(n-1)}+ \boldsymbol{k(n)e(n|n-1)} w(n)=w(n−1)+k(n)e(n∣n−1)
式中,
k(n)=T(n−1)x(n)λ+xT(n)T(n−1)x(n)\boldsymbol{k(n)}=\frac{\boldsymbol{T(n-1)x(n)}}{{\lambda+\boldsymbol{x^T(n)T(n-1)x(n)}}} k(n)=λ+xT(n)T(n−1)x(n)T(n−1)x(n)​
T(n)=R−1(n)\boldsymbol{T(n)=R^{-1}(n)} T(n)=R−1(n)

1.4研究目标

用LMSLMSLMS算法和RLSRLSRLS算法分别设计一个二阶的自适应一步预测横向滤波器,滤波器的输入为二阶AR过程:x(n)=a1x(n−1)+a2x(n−2)=ϵ(n)x(n)=a_1x(n-1)+a_2x(n-2)=\epsilon(n)x(n)=a1​x(n−1)+a2​x(n−2)=ϵ(n),其中ϵ(n)\epsilon(n)ϵ(n)为零均值、单位方差的高斯白噪声,AR模型参数如下:

a1a_1a1​ a2a_2a2​
-1.6 0.8

分别在步长μ=0.002\mu=0.002μ=0.002 和遗忘因子λ=0.98\lambda=0.98λ=0.98 的情况下,分析设计这个二阶的自适应一步预测横向滤波器的LMS 算法,画出自适应FIR滤波器系数a1(n)a_1(n)a1​(n)的迭代曲线。

二、代码解析

1、初始化参数

repeat_times=50;                              %重复次数,平滑误差
iters=600;                                    %迭代次数
p=2;                                          %滤波器抽头数
u=0.002;                                      %LMS自适应步长
forget_factor=0.98;                           %遗忘因子lamda

2、LSM开始计算迭代权矢量

%% LMS算法迭代for i=1:iters                             %LMS迭代dn=x(i+p);                            %设置LMS期望值un=x(i+p-1:-1:i);                     %LMS自适应滤波器每次接收值LMS_e(i)=dn-w_e(:,i)'*un;             %LMS误差信号w_e(:,i+1)=w_e(:,i)+2*u*un*LMS_e(i);  %每次迭代权矢量endLMS_w1(k,:)=w_e(1,2:end);

3、RLS开始计算迭代权矢量

%% RLS算法迭代for j=1:itersd=x(j+p);                             %设置RLS期望值U=x(j+p-1:-1:j);                      %RLS自适应滤波器每次接收值Pi=T*U;                               %Pi(n)=T(n-1)*x(n)K=Pi/(forget_factor+U'*Pi);           %K=T(n-1)*x(n)/forget_factor+x(n)'*T(n-1)*x(n)RLS_e(j)=d-W_e(:,j)'*U;               %RLS误差信号W_e(:,j+1)=W_e(:,j)+K*RLS_e(j);       %每次迭代权矢量T=(T-T*U*U'*T/(forget_factor+U'*T*U))/forget_factor;%迭代T(n)=(1/lamda)*[T(n-1)-T(n-1)x(n)x(n)'T(n-1)/lamda+x(n)'T(n-1)x(n)]endRLS_w1(k,:)=W_e(1,2:end);

三、结果


通过对比LMSLMSLMS算法和RLSRLSRLS算法收敛速度,FIR滤波器的系统函数11−a1z−1−a2z−2\frac{1}{1-a_1z^{-1}-a_2z^{-2}}1−a1​z−1−a2​z−21​中的分母第一个系数 a1a_{1}a1​, 经过$RLSRLSRLS算法自适应80次左右就趋近于-1.6,而LMSLMSLMS算法远远达不到-1.6,所以我们可以得出对于这种二阶自回归模型产生的非平稳随机信号来说,RLSRLSRLS算法收敛速度要远超LMSLMSLMS算法的收敛速度。

LMS与RLS算法学习笔记相关推荐

  1. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  2. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  3. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  4. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  5. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  6. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  7. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  8. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  9. l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树

    二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括: 插入一个数 删除一个数 查询某数的排名(排名定义为比该数 ...

最新文章

  1. 用 cooking 搭建一个简单又优雅的 Vue 项目开发环境 (入门篇)
  2. 中国首次!2021年图计算挑战赛揭榜,华中科技大团队夺冠
  3. 附录3:Pandas实例记录
  4. 转换ArrayList String 到String []数组[重复]
  5. python百度百科api-python使用API
  6. 005_html文档类型
  7. linux shell脚本无法执行,报错syntax error near unexpected token `$'\r''解决方法
  8. R语言观察日志(part14)--R语言杂记
  9. c语言的局部指针,C中局部变量指针问题
  10. ASP.NET MVC应用程序把文字写在图片上
  11. azure java_使用 Java 的 Azure 存储示例 | Microsoft Docs
  12. KL距离-Kullback-Leibler Divergence
  13. 电力系统微型计算机继电保护试题及答案,全国2010年月高等教育自学考试电力系统微型计算机继电保护试题及答案.doc...
  14. 惠斯通电桥称重传感器检测原理
  15. 2021年国内PT站点汇总(中英文名称对照表)很全呦!
  16. c语言命令笔记本电脑快捷键,实用的电脑操作技巧(附快捷键)
  17. 迅为iTOP-i.MX6ULL开发板I2C驱动程序实现 I2C通信
  18. ibm mq安装配置_在IBM Integration Bus v10和IBM MQ v8之间配置MQ连接
  19. 安卓手机端运行的adb工具_苹果、安卓手机端 移动营销、办公+华为云
  20. JIRA 从低版本升级到高版本(3.6.2-6.0.8)

热门文章

  1. Java 设置PDF文档过期时间(有效时间)
  2. c语言实现定积分运算
  3. 福昕 取消高亮 等注释
  4. Python数据分析-房价预测及模型分析
  5. 中国科学技术大学计算机研究生在哪个校区,中国科学技术大学有几个校区及校区地址 哪个校区最好...
  6. 【VMCloud云平台】SCAP(四)连接公有云(二)
  7. windows远程连接服务器并映射端口访问目标服务
  8. layui 集成手写签名
  9. 非因推荐 | 肿瘤微环境研究大剖析——肿瘤相关巨噬细胞
  10. 为什么我们要减肥?科学家证实肥胖或可导致癌细胞肿瘤生长