在RLS自适应滤波器的实现过程中,难免不涉及矩阵的求逆运算。而求逆操作双是非常耗时的,一个很自然的想法就是尽可能的避免直接对矩阵进行求逆运算。那么,在RLS自适应滤波器的实现中,有没有一种方法能避免直接求逆运算呢?答案当然是用的:使用矩阵求逆引理来避免对矩阵进行直接求逆。

  这里先对矩阵求逆引理做下介绍,也叫做Woodbury矩阵恒等式(或者称做Sherman–Morrison formula,这里统一称矩阵求逆引理)在线性代数中:

\[{\left( {A + UCV} \right)^{ - 1}} = {A^{ - 1}} - {A^{ - 1}}U{\left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)^{ - 1}}V{A^{ - 1}}\]

其中,AC必须是可逆方阵,UV可以是方阵也可以不是方阵。先不忙着记公式,这个不是最重要的,首先要弄明白的是,矩阵求逆引理的写成这个样子,它要解决的是什么样的问题,其思想是什么?

  矩阵求逆引理要解决的问题是:已知一个高维矩阵A的逆矩阵,当A矩阵产生了一个非常小的变化(维数远低于A或者低于A)时,能不能根据已知的A的逆矩阵,求产生微小变化后的矩阵的逆。

  现在我们知道当然是可以的,这里的微小变化,指的就是恒等式中的矩阵UCV。

  知道了矩阵求逆引理解决的是什么样的问题,主要思想后,感觉还是有点不得足,最好能证明一下,好让自己有个“底”,同时满足下好奇心。知其然同时又知其所以然,有什么不好!这里只对其中一种证明方法做下详细的介绍,以方便理解,考虑以下方程组:

\[\left\{ {\begin{array}{*{20}{c}}
{AX + UY = I} \\
{VX - {C^{ - 1}}Y = 0} \\
\end{array}} \right.\]

及其矩阵形式

\[\left[ {\begin{array}{*{20}{c}}
A & U \\
V & { - {C^{ - 1}}} \\
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
X \\
Y \\
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
I \\
0 \\
\end{array}} \right]\]

根据第2个方程可知:$Y = CVX$,代入第1个方程得到$X = {A^{ - 1}}(I - UY)$,再将X的表达式代回第二个方程,得到

\[{C^{ - 1}}Y = V{A^{ - 1}}(I - UY) = V{A^{ - 1}} - V{A^{ - 1}}UY\]

将$V{A^{ - 1}}$与${C^{ - 1}}Y$交换等式两边位置

\[V{A^{ - 1}} = {C^{ - 1}}Y + V{A^{ - 1}}UY = \left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)Y\]

可得到Y的表达式$Y = {\left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)^{ - 1}}V{A^{ - 1}}$,这里将Y再次第1个方程$AX + UY = I$,得到

\[\begin{array}{l}
AX + U{\left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)^{ - 1}}V{A^{ - 1}} = I \\
AX = I - U{\left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)^{ - 1}}V{A^{ - 1}} \\
X = {A^{ - 1}}\left[ {I - U{{\left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)}^{ - 1}}V{A^{ - 1}}} \right] \\
X = {A^{ - 1}} - {A^{ - 1}}U{\left( {{C^{ - 1}} + V{A^{ - 1}}U} \right)^{ - 1}}V{A^{ - 1}} \\
\end{array}\]

  关于其它证明部分,建议可以参考wiki中对Woodbury矩阵恒等式的介绍,里面有好几种不同的证明方法(直接证明、代数证明、矩阵分块推导、LDU分解推导),写的都非常好,建议喜欢追根究底的朋友认真看下。

  另外,矩阵求逆引理更通用的是二项式反转定理(Binomial inverse theorem),很多的变种都可以视为二项式反转定理的特殊情况,这些变种icoolmedia还没有整理完毕,先不一一说明了。

  下面就用矩阵求逆引理来解决RLS滤波器中的求逆问题,这里假定读者有最小二乘法的基础,首先给出更新滤波器输入向量相关矩阵的公式和矩阵求逆引理的表达式(下面的推导过程来自于Simon Haykin《自适应滤波器原理》第10章的学习)。

\[{\bf{\Phi }}(n) = \lambda {\bf{\Phi }}(n - 1) + {\bf{u}}(n){{\bf{u}}^{\bf{H}}}(n)\]

\[{{\bf{A}}^{ - 1}} = {\bf{B}} - {\bf{BC}}{\left( {{\bf{D}} + {{\bf{C}}^{\bf{H}}}{\bf{BC}}} \right)^{ - 1}}{{\bf{C}}^{\bf{H}}}{\bf{B}}\]

  可以看到,上面的矩阵求逆引理与本文开始里介绍的不同,这也是一个求逆引理的变种。不多做介绍,先记下来就好,后面另在博客中详述吧。如果设:${\bf{A}} = \Phi (n)$,${{\bf{B}}^{ - 1}} = \lambda \Phi (n - 1)$,${\bf{C}} = {\bf{u}}(n)$,${\bf{D}} = 1$。对波器输入向量相关矩阵迭代更新公式应用矩阵求逆引理公式,可得

\[{{\bf{\Phi }}^{ - 1}}(n) = {\lambda ^{ - 1}}{{\bf{\Phi }}^{ - 1}}(n - 1) - \frac{{{\lambda ^{ - 2}}{{\bf{\Phi }}^{ - 1}}(n - 1){\bf{u}}(n){{\bf{u}}^{\bf{H}}}(n){{\bf{\Phi }}^{ - 1}}(n - 1)}}{{1 + {\lambda ^{ - 1}}{{\bf{u}}^{\bf{H}}}(n){{\bf{\Phi }}^{ - 1}}(n - 1){\bf{u}}(n)}}\]

  如果设

\[{\bf{P}}(n) = {{\bf{\Phi }}^{ - 1}}(n)\]

\[{\bf{k}}(n) = \frac{{{\lambda ^{ - 1}}{\bf{P}}(n){\bf{u}}(n)}}{{1 + {\lambda ^{ - 1}}{{\bf{u}}^{\bf{H}}}(n){{\bf{\Phi }}^{ - 1}}(n - 1){\bf{u}}(n)}}\]

  这里对增益k(n)做如下变换,得到其简化形式:

\[\begin{array}{l}
{\bf{k}}(n) = {\lambda ^{ - 1}}{\bf{P}}(n - 1){\bf{u}}(n) - {\lambda ^{ - 1}}{\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{P}}(n - 1){\bf{u}}(n) \\
= \left[ {{\lambda ^{ - 1}}{\bf{P}}(n - 1) - {\lambda ^{ - 1}}{\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{P}}(n - 1)} \right]{\bf{u}}(n) \\
= {\bf{P}}(n){\bf{u}}(n) \\
\end{array}\]

  或者也可以表示为:${\bf{k}}(n) = {\Phi ^{ - 1}}(n - 1){\bf{u}}(n)$。由线性最小二乘估计可知,滤波器的系数估计表示为:${{\bf{\hat w}}(n) = {\Phi ^{ - 1}}(n){\bf{z}}(n)}$,把增益k(n)代入,得到

\[\begin{array}{l}
{\bf{\hat w}}(n) = {\Phi ^{ - 1}}(n){\bf{z}}(n) = {\bf{P}}(n){\bf{z}}(n) = \lambda {\bf{P}}(n){\bf{z}}(n - 1) + {\bf{P}}(n){\bf{u}}(n){d^*}(n) \\
= \lambda \left[ {{\lambda ^{ - 1}}{\bf{P}}(n - 1) - {\lambda ^{ - 1}}{\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{P}}(n - 1)} \right]{\bf{z}}(n - 1) + {\bf{P}}(n){\bf{u}}(n){d^*}(n) \\
= {\bf{P}}(n - 1){\bf{z}}(n - 1) - {\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{P}}(n - 1){\bf{z}}(n - 1) + {\bf{P}}(n){\bf{u}}(n){d^*}(n) \\
= {\Phi ^{ - 1}}(n - 1){\bf{z}}(n - 1) - {\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\Phi ^{ - 1}}(n - 1){\bf{z}}(n - 1) + {\bf{P}}(n){\bf{u}}(n){d^*}(n) \\
= {\bf{\hat w}}(n - 1) - {\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{\hat w}}(n - 1) + {\bf{P}}(n){\bf{u}}(n){d^*}(n) \\
= {\bf{\hat w}}(n - 1) + \left[ {{\bf{k}}(n){d^*}(n) - {\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{\hat w}}(n - 1)} \right] \\
= {\bf{\hat w}}(n - 1) + {\bf{k}}(n)\left[ {{d^*}(n) - {{\bf{u}}^{\bf{H}}}(n){\bf{\hat w}}(n - 1)} \right] \\
= {\bf{\hat w}}(n - 1) + {\bf{k}}(n)\xi (n) \\
\end{array}\]

  这就是递归最小二乘(RLS)滤波器的系数更新公式,可以看到,这个过程,并没有对输入向量相关矩阵进行直接求逆,避免了直接求逆运算带来的复杂性。还有最后一个问题没有解决。P的初始化问题,这里简单给出来:${\bf{\hat w}}(n) = 0$,${\bf{P}}(0) = {\delta ^{ - 1}}{\bf{I}}$ 。这里$\delta $是正则化参数,是为了在求解反问题或者最优化问题时解决不适定性,增加抗绕动能力时引入的,这里不做详细介绍。下面总结下递归最小二乘法的实现步骤。

\[{\bf{k}}(n) = \frac{{{\lambda ^{ - 1}}{\bf{P}}(n){\bf{u}}(n)}}{{1 + {\lambda ^{ - 1}}{{\bf{u}}^{\bf{H}}}(n){\Phi ^{ - 1}}(n - 1){\bf{u}}(n)}}\]

\[\begin{array}{l}
\xi (n) = {d^*}(n) - {{\bf{u}}^{\bf{H}}}(n){\bf{\hat w}}(n - 1) \\
{\bf{\hat w}}(n) = {\bf{\hat w}}(n - 1) + {\bf{k}}(n)\xi (n) \\
{\bf{P}}(n) = {\lambda ^{ - 1}}{\bf{P}}(n - 1) - {\lambda ^{ - 1}}{\bf{k}}(n){{\bf{u}}^{\bf{H}}}(n){\bf{P}}(n - 1) \\
\end{array}\]

  终于推导完毕,以上步骤的实现代码及工程可以在博文下面的QQ交流群的群文件中找到(TestRLS_using the matrix inversion lemma.rar)。本人水平有限,如以上证明和推导过程及代码如有错误之误,还请大家及时给予批评指正。

RLS自适应滤波器中用矩阵求逆引理来避免求逆运算的更多相关文章

  1. 自适应滤波器(Adaptive Filter)

    ======= Wikipedia的解释 ======= 自适应滤波器是能够根据输入信号自动调整性能进行数字信号处理的数字滤波器.作为对比,非自适应滤波器有静态的滤波器系数,这些静态系数一起组成传递函 ...

  2. 论文翻译:2020_A Robust and Cascaded Acoustic Echo Cancellation Based on Deep Learning

    论文地址:https://indico2.conference4me.psnc.pl/event/35/contributions/3364/attachments/777/815/Thu-1-10- ...

  3. 论文翻译:2021_Semi-Blind Source Separation for Nonlinear Acoustic Echo Cancellation

    论文地址:https://ieeexplore.ieee.org/abstract/document/9357975/ 基于半盲源分离的非线性回声消除 摘要: 当使用非线性自适应滤波器时,数值模型与实 ...

  4. 自适应滤波:最小均方误差滤波器(LMS、NLMS)

    作者:桂. 时间:2017-04-02  08:08:31 链接:http://www.cnblogs.com/xingshansi/p/6658203.html 声明:欢迎被转载,不过记得注明出处哦 ...

  5. 自适应滤波:维纳滤波器——GSC算法及语音增强

    作者:桂. 时间:2017-03-26  06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦 ...

  6. 自适应滤波:维纳滤波器——LCMV及MVDR实现

    作者:桂. 时间:2017-03-24  06:52:36 链接:http://www.cnblogs.com/xingshansi/p/6609317.html 声明:欢迎被转载,不过记得注明出处哦 ...

  7. 自适应滤波:维纳滤波器——FIR及IIR设计

    作者:桂. 时间:2017-03-23  06:28:45 链接:http://www.cnblogs.com/xingshansi/p/6603263.html [读书笔记02] 前言 仍然是西蒙. ...

  8. 基于Opencv的自适应中值滤波函数selfAdaptiveMedianBlur()

    7.3.3 自适应滤波器 自适应中值滤波器 对于7.3.2节所讨论的中值滤波器,只要脉冲噪声的空间密度不大,性能还是可以的(根据经验需Pa和Pb小于0.2).本节将证明,自适应中值滤波器可以处理更大概 ...

  9. 图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波

    原 https://blog.csdn.net/alwaystry/article/details/52756051 图像算法五:[图像小波变换]多分辨率重构.Gabor滤波器.Haar小波 2018 ...

随机推荐

  1. 文件读写io操作范例

    系统io读写,copy int main(int argc, char **argv) {  if(argc != 3) {   printf("Usage: %s <src> ...

  2. PHP Extension开发(Zephir版本)

    上篇介绍了C语言开发PHP扩展的方法, 现在介绍使用Zephir开发扩展的方法. 关于Zephir需要简单介绍一下: Zephir 是为PHP开发人员提供的能够编写可编译/静态类型的高级语言.是优秀的 ...

  3. python学习:递归列出目录里的文件

    #!/usr/bin/python   import os import sys   def print_files(path):     lsdir = os.listdir(path)     d ...

  4. PHP die与exit的区别

    最近听见有人说die和exit区别,bula~bula.决心一探究竟. 翻了翻PHP 5.6的源码(源码的位置为zend目录下zend_language_scanner.l大约是1014~1020行) ...

  5. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。

    题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...

  6. 一致性哈希(附带C++实现)

    在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能.如果采用常用的hash(object)%N算 法,那么在有机器添加或者删除后,就需要大范围的移动原有数 ...

  7. python 列表去重(数组)的几种方法(转)

    一.方法1  代码如下 复制代码 ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids:     if id not in news_id ...

  8. 使用docker搭建wordpress

    前言 去年在学习docker,在看完菜鸟教程和第一本docker书后,一直想实战用一下这个技术,多用用才能熟能生巧,真正体验它的利弊.正好傅老板用docker搭完了wordpress,我也就手痒跟着搭 ...

  9. 接口-以PHP为例

    <?php //使用程序模拟现实情况 //使用规范(方法/属性) interface iUSB { public function start(); public function stop() ...

  10. 原创:实现ehcache动态创建cache,以及超期判断的具体逻辑

    当前最常用的三个缓存组件:ehcache.redis.memcached 其中,ehcache与应用共同运行于JVM中,属于嵌入式组件,运行效率最高,因此常被用于实现一级缓存. 在更复杂的一些系统中, ...