首页 > 编程语言 >自适应滤波之RLS算法

自适应滤波之RLS算法

时间:2022-10-03 11:45:53浏览次数:48  
标签:begin end align 滤波 nonumber 算法 pmb frac RLS

前言
LMS算法的主要优点在于它的计算简单,然而为此付出的代价是缓慢的收敛速度,特别是当自相关矩阵\(\pmb{\varGamma}_M\)的特征值具有较大范围时。从另一个观点来看,LMS算法只有单一的可调参数,即步长参数\(\Delta\)用于控制收敛速度。因为出于稳定的目的,步长是有限制的,所以应对与较小特征值方式的收敛速度较慢。为了较快的收敛,就需要设计出包含额外参数的更加复杂的算法。接下来即是将要介绍的RLS算法。
RLS算法
定义在\(n\)时刻的长度为\(M\)的滤波器系数向量为:

\[\begin{align} \pmb{h}_M(n) = \begin{bmatrix} h(0,n)\\ h(1,n)\\ h(2,n)\\ \vdots\\ h(M-1,n) \end{bmatrix} \end{align} \]

同样地,在\(n\)时刻的输入信号向量表示为:

\[\begin{align} \pmb{X}_M(n) = \begin{bmatrix} x(n)\\ x(n-1)\\ x(n-2)\\ \vdots\\ x(n-M+1) \end{bmatrix} \end{align} \]

当\(n<0\)时,\(x(n)=0\)。

递归最小二乘方问题现在可以描述为如下:假如我们观察到的向量为\(\pmb{X}_M(l),l=0,1\\,\cdots,n\),此时将误差定义为期望序列\(d(l)\)和估计\(\hat{d(l,n)}\)之间的差值:

\[\begin{align} e_M(l,n) &= d(l) - \hat{d}(l,n) \nonumber \\ &=d(l) - \pmb{h}_M^t(n) \pmb{X}_M(l) \end{align} \]

而我们希望的是确定使误差幅度平方的加权和:

\[\begin{align} \xi_M = \sum_{l=0}^n w^{n-l}|e_M(l,n|^2 \end{align} \]

达到最小时的滤波器系数向量\(\pmb{h}_M(n)\),其中\(w\)是范围为\(0<w<1\)的加权因子。使用加权因子的目的是加重最近数据点的权值,这样使得滤波器系数能够适应时变的数据统计特性,这可以通过对过去的数据使用指数加权因实现。

\(\xi_M\)关于滤波器系数向量\(\pmb{h}_M(n)\)的最小化可以产生出线性方程组

\[\begin{align} \pmb{R}_M(n)\pmb{h}_M(n) = \pmb{D}_M(n) \end{align} \]

其中,\(\pmb{R}_M(n)\)是信号自相关矩阵,定义为

\[\begin{align} \pmb{R}_M(n) = \sum_{l=0}^{n}w^{n-l}\pmb{X}_M^*(l)\pmb{X}_M^t(l) \end{align} \]

\(\pmb{D}_M(n)\)是互相关向量

\[\begin{align} \pmb{D}_M(n) = \sum_{i=0}^nw^{n-l}\pmb{X}_M^*(l)d(l) \end{align} \]

方程式(1.5)的解为

\[\begin{align} \pmb{h}_M(n) = \pmb{R}_M^{-1}(n) \pmb{D}_M(n) \end{align} \]

相比LMS中的自相关矩阵,\(\pmb{R}_M(n)\)不是Herimitian矩阵,而\(\pmb{\varGamma}_M\)是。对于小的\(n\)值,\(\pmb{R}_M(n)\)可能是病态的,因而它的逆是不可求的。在这种情况下,习惯在初始化时要将\(\pmb{R}_M(n)\)加上矩阵\(\delta\pmb{I}_M\),其中,\(\pmb{I}_M\)是单位阵,\(\delta\)是小的正常数。给过去的数据加上指数加权,\(\delta\pmb{I}_M\)增加的影响就会随着时间消失。

首先\(\pmb{R}_M(n)\)的递归更新方程可以写为

\[\begin{align} \pmb{R}_M(n) = w\pmb{R}_M(n-1) + \pmb{X}_M^*(n)\pmb{X}_M^t(n) \end{align} \]

因为我们需要\(\pmb{R}_M(n)\)的逆,所以运用矩阵求逆定理,可以得到

\[\begin{align} \pmb{R}_M^{-1}(n) = \frac{1}{w} \left[\pmb{R}_M^{-1}(n-1)- \frac{\pmb{R}_M^{-1}(n-1)\pmb{X}_M^*(n)\pmb{X}_M^t(n)\pmb{R}_M^{-1}(n-1)} {w +\pmb{X}_M^t(n)\pmb{R}_M^{-1}(n-1)\pmb{X}_M^*(n) }\right] \end{align} \]

这样,\(\pmb{R}_M^{-1}(n)\)就可以递归的计算。

为了方便起见,定义\(\pmb{P}_M(n)=\pmb{R}_M^{-1}(n)\),则式(8)可以重写为:

\[\begin{align} \pmb{h}_M(n) = \pmb{P}_M(n)\pmb{D}_M(n) \end{align} \]

还可以定义一个\(M\)维的向量\(\pmb{K}_M(n)\),称其为卡尔曼增益向量,其形式为

\[\begin{align} \pmb{K}_M(n) &=\frac{\pmb{P}_M(n-1)\pmb{X}^*_M(n)}{w + \pmb{X}_M^t(n)\pmb{P}_M(n-1)\pmb{X}_M^*(n)} \nonumber \\ &= \frac{1}{w + \mu_M(n)}\pmb{P}_M(n-1)\pmb{X}^*_M(n) \end{align} \]

其中,\(\mu_M(n)\)是一个标量,定义为

\[\begin{align} \mu_M(n) = \pmb{X}_M^t(n)\pmb{P}_M(n-1)\pmb{X}_M^*(n) \end{align} \]

利用这些定义,式(10)就变为

\[\begin{align} \pmb{P}_M(n) = \frac{1}{w}\left[\pmb{P}_M(n-1)-\pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{P}_M(n-1) \right] \end{align} \]

此时,我们在上式(1.14)右乘\(\pmb{X}_M^*(n)\),就可以得到比较惊喜的结果

\[\begin{align} \pmb{P}_M(n)\pmb{X}_M^*(n) &= {\frac{1}{w}\left[\pmb{P}_M(n-1)\pmb{X}_M^*(n) - \pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{P}_M(n-1)\pmb{X}_M^*(n) \right]} \nonumber\\ &=\frac{1}{w}\left\{[w + \mu_M(n)]\pmb{K}_M(n) -\pmb{K}_M(n)\mu_M(n) \right\}\nonumber\\ &= \pmb{K}_M(n) \end{align} \]

因此,卡尔曼增益向量也可以定义为\(\pmb{P}_M(n)\pmb{X}_M^*(n)\)。

将向量\(\pmb{D}_M(n)\)的递归更新方程可以写为

\[\begin{align} \pmb{D}_M(n) = w \pmb{D}_M(n-1) + d(n)\pmb{X}_M^*(n) \end{align} \]

现在将\(\pmb{D}_M(n)\)的更新方程(16)和 \(\pmb{P}_M(n)\)的更新方程(10)带入式(11)中,可以得到

\[\begin{align} \pmb{h}_M(n) &= \frac{1}{w}\left[\pmb{P}_M(n-1)-\pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{P}_M(n-1) \right]\left[w \pmb{D}_M(n-1) + d(n)\pmb{X}_M^*(n)\right] \nonumber\\ &=\pmb{P}_M(n-1)\pmb{D}_M(n-1) + \frac{1}{w} d(n)\pmb{P}_M(n-1)\pmb{X}_M^*(n)\nonumber \\ & ~~~ -\pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{P}_M(n-1)\pmb{D}_M(n-1) - \frac{1}{w}d(n)\pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{P}_M(n-1)\pmb{X}_M^*(n)\nonumber\\ &= \pmb{h}_M(n-1)-\pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{h}_M(n-1)+ \nonumber \\ & ~~~ d(n){\frac{1}{w} \left[\pmb{P}_M(n-1)\pmb{X}_M^*(n) - \pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{P}_M(n-1)\pmb{X}_M^*(n)\right]} \nonumber\\ &=\pmb{h}_M(n-1) - \pmb{K}_M(n)\pmb{X}^t_M(n)\pmb{h}_M(n-1) + d(n)\pmb{K}_M(n) \nonumber \\ &=\pmb{h}_M(n-1) + \pmb{K}_M(n) \left[d(n) - \pmb{X}^t_M(n)\pmb{h}_M(n-1)\right] \end{align} \]

在上面的式子最后一项中,\(\pmb{X}^t_M(n)\pmb{h}_M(n-1)\)是自适应滤波在n时刻的输出,该值是基于n-1时刻的滤波器系数得到的。因为

\[\begin{align} \pmb{X}^t_M(n)\pmb{h}_M(n-1) = \hat{d}(n,n-1) \equiv \hat{d}(n) \end{align} \]

并且

\[\begin{align} e_M(n,n-1) = d(n) - \hat{d}(n,n-1) \equiv e_M(n) \end{align} \]

因此\(\pmb{h}_M(n)\)的更新方程可以表示为

\[\begin{align} \pmb{h}_M(n) = \pmb{h}_M(n-1) + \pmb{K}_M(n) e_M(n) \end{align} \]

或者等价于

\[\begin{align} \pmb{h}_M(n) = \pmb{h}_M(n-1) + \pmb{P}_M(n)\pmb{X}_M^*(n) e_M(n) \end{align} \]

标签:begin,end,align,滤波,nonumber,算法,pmb,frac,RLS
From: https://www.cnblogs.com/Qiu-ZM/p/16748735.html

相关文章

  • 多点DLT (Direct Linear Transformation) 算法
    阅读前可以先参看上一篇代数视觉博客:四点DLT(DierctLinearTransformation)算法对于大于4个点的数据点来进行DLT算法变换,如果数据点的标注都十分准确,那么将所有......
  • 操作系统银行家算法求安全序列
      图1  图2 由图2可知p1A项目总共要贷3万块钱,B项目要贷2万块钱,C项目要贷2万块钱,项目才能够启动。银行......
  • 四点DLT (Direct Linear Transformation) 算法
    \(\mathrm{x}_{i}\)表示变化前的齐次坐标\(\mathbf{x}_{i}^{\prime}\)表示变化后的齐次坐标我们需要求到一个\(3\times3\)的变换矩阵\(\mathrm{H}\),使得\[\math......
  • 数据读入的问题 flood fill算法
    1097.池塘计数农夫约翰有一片 N∗MN∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符矩阵来表示他的土地。每个单元格内,如果包含雨水,......
  • 【JS】237-如何理解JavaScript中常用的4种排序算法?
    冒泡排序冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习。算法介绍:比较相邻的两个元素,如果前一个比......
  • 软件设计师 - 内存转换算法
        仅供个人学习,切勿转发,谢谢......
  • 算法题目(2)
    题目1定义何为步骤和?比如680,680+68+6=754,680的步骤和叫754给定一个正数num,判断它是不是某个数的步骤和思路单调性。思路过程:首先想到如果直接从步骤和num倒推......
  • 饿了么推荐算法演进
    导读:本次分享的主要内容包括以下三个方面:首先是介绍推荐业务背景,包括推荐产品形态及算法优化目标;然后是算法的演进路线;最后重点介绍在线学习是如何在饿了么推荐领域实践的......
  • 19 -- 排序算法之归并排序
          从合并的示意图中可以看到,其实现思路与“合并两个有序的单链表,使之合并完后依然有序”类似。 1importjava.util.Arrays;23publicclassMe......
  • knn 算法以及电影种类预测&莺尾花种类预测
    1.简介 K-NearestNeighbor算法又叫KNN算法(最近邻算法,k是选取几个距离其最近的样本作为参考),这个算法是机器学习里面一个比较经典的分类和回归算法。 定义:如果一个样本在......