RLS自适应滤波器中用矩阵求逆引理来避免求逆运算
在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}}\]
其中,A、C必须是可逆方阵,U、V可以是方阵也可以不是方阵。先不忙着记公式,这个不是最重要的,首先要弄明白的是,矩阵求逆引理的写成这个样子,它要解决的是什么样的问题,其思想是什么?
矩阵求逆引理要解决的问题是:已知一个高维矩阵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自适应滤波器中用矩阵求逆引理来避免求逆运算的更多相关文章
- 自适应滤波器(Adaptive Filter)
======= Wikipedia的解释 ======= 自适应滤波器是能够根据输入信号自动调整性能进行数字信号处理的数字滤波器.作为对比,非自适应滤波器有静态的滤波器系数,这些静态系数一起组成传递函 ...
- 论文翻译: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- ...
- 论文翻译:2021_Semi-Blind Source Separation for Nonlinear Acoustic Echo Cancellation
论文地址:https://ieeexplore.ieee.org/abstract/document/9357975/ 基于半盲源分离的非线性回声消除 摘要: 当使用非线性自适应滤波器时,数值模型与实 ...
- 自适应滤波:最小均方误差滤波器(LMS、NLMS)
作者:桂. 时间:2017-04-02 08:08:31 链接:http://www.cnblogs.com/xingshansi/p/6658203.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 自适应滤波:维纳滤波器——GSC算法及语音增强
作者:桂. 时间:2017-03-26 06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 自适应滤波:维纳滤波器——LCMV及MVDR实现
作者:桂. 时间:2017-03-24 06:52:36 链接:http://www.cnblogs.com/xingshansi/p/6609317.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 自适应滤波:维纳滤波器——FIR及IIR设计
作者:桂. 时间:2017-03-23 06:28:45 链接:http://www.cnblogs.com/xingshansi/p/6603263.html [读书笔记02] 前言 仍然是西蒙. ...
- 基于Opencv的自适应中值滤波函数selfAdaptiveMedianBlur()
7.3.3 自适应滤波器 自适应中值滤波器 对于7.3.2节所讨论的中值滤波器,只要脉冲噪声的空间密度不大,性能还是可以的(根据经验需Pa和Pb小于0.2).本节将证明,自适应中值滤波器可以处理更大概 ...
- 图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波
原 https://blog.csdn.net/alwaystry/article/details/52756051 图像算法五:[图像小波变换]多分辨率重构.Gabor滤波器.Haar小波 2018 ...
随机推荐
- 深入研究Spark SQL的Catalyst优化器(原创翻译)
Spark SQL是Spark最新和技术最为复杂的组件之一.它支持SQL查询和新的DataFrame API.Spark SQL的核心是Catalyst优化器,它以一种新颖的方式利用高级编程语言特性( ...
- ASP.NET Core 发布 centos7 配置守护进程
ASP.NET Core应用程序发布linux在shell中运行是正常的.可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 ...
- UbuntuNFS服务器配置
NFS服务的配置====================1,下载并安装NFS sudo apt-get install nfs-kernel-server 2,配置NFS sudo vi /etc/e ...
- mysql 5.7 支持json格式
1.JSON格式的支持:mysql> create table user ( uid int auto_increment, -> data json,primary key(u ...
- C语言头文件中定义全局变量导致重复定义错误
合作方升级SDK后,程序编译出现变量重复定义的错误,通过错误提示无法找到什么位置重复定义了,但确定是引入新SDK后才出现的错误,从SDK的头文件中查找,最终发现在头文件中定义了全局变量 我们的项目在多 ...
- [Ccodeforces 736C] Ostap and Tree - 树形DP
给定一个n个点的树,把其中一些点涂成黑色,使得对于每个点,其最近的黑点的距离不超过K. 树形DP. 设置状态f[i][j]: 当j <= K时: 合法状态,表示i的子树中到根的最近黑点距离为j的 ...
- 使用Python管理数据库
使用Python管理数据库 这篇文章的主题是如何使用Python语言管理数据库,简化日常运维中频繁的.重复度高的任务,为DBA们腾出更多时间来完成更重要的工作.文章本身只提供一种思路,写的不是很全 ...
- HDU - 2187 贪心
思路: 按照单价升序排序,依次买就行. AC代码 #include <cstdio> #include <cmath> #include <algorithm> ...
- UVA - 12333 字典树+大数
思路:用字典树将前40个数字记录下来,模拟大数加法即可. AC代码 #include <cstdio> #include <cmath> #include <algori ...
- mongodb Decimal Spring data mongodb Decimal128 SpringMvc 序列化字符串 json converter
Mongodb 3.4 就开始支持Decimal 类型,解决double的精度问题,但是不太好用,MapReduce的时候Array.sum 也不能计算 Decimal.比较坑,但是聚合可以用 Spr ...