在RLS自适应滤波器的实现过程中,难免不涉及矩阵的求逆运算。而求逆操作双是非常耗时的,一个很自然的想法就是尽可能的避免直接对矩阵进行求逆运算。那么,在RLS自适应滤波器的实现中,有没有一种方法能避免直接求逆运算呢?答案当然是有的:使用矩阵求逆引理来避免对矩阵进行直接求逆。
这里先对矩阵求逆引理做下介绍,也叫做Woodbury矩阵恒等式(或者称做Sherman–Morrison formula,这里统一称矩阵求逆引理)在线性代数中:
[{left( {A + UCV} ight)^{ - 1}} = {A^{ - 1}} - {A^{ - 1}}U{left( {{C^{ - 1}} + V{A^{ - 1}}U} ight)^{ - 1}}V{A^{ - 1}}]
其中,A、C必须是可逆方阵,U、V可以是方阵也可以不是方阵。先不忙着记公式,这个不是最重要的,首先要弄明白的是,矩阵求逆引理的写成这个样子,它要解决的是什么样的问题,其思想是什么?
矩阵求逆引理要解决的问题是:已知一个矩阵A的逆矩阵,当A矩阵产生了变化时,能不能根据已知的A的逆矩阵,求产生变化后的矩阵的逆。
现在我们知道当然是可以的,这里的变化,指的就是恒等式中的矩阵UCV。
知道了矩阵求逆引理解决的是什么样的问题,主要思想后,感觉还是有点不得足,最好能证明一下,好让自己有个“底”,同时满足下好奇心。知其然同时又知其所以然,有什么不好!这里只对其中一种证明方法做下详细的介绍,以方便理解,考虑以下方程组:
[left{ {egin{array}{*{20}{c}}
{AX + UY = I} \
{VX - {C^{ - 1}}Y = 0} \
end{array}}
ight.]
及其矩阵形式
[left[ {egin{array}{*{20}{c}}
A & U \
V & { - {C^{ - 1}}} \
end{array}}
ight]left[ {egin{array}{*{20}{c}}
X \
Y \
end{array}}
ight] = left[ {egin{array}{*{20}{c}}
I \
0 \
end{array}}
ight]]
根据第2个方程可知:$Y = CVX$,代入第1个方程得到
[left( {A + UCV} ight)X = I Leftrightarrow X = {left( {A + UCV} ight)^{ - 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} ight)Y]
可得到Y的表达式$Y = {left( {{C^{ - 1}} + V{A^{ - 1}}U} ight)^{ - 1}}V{A^{ - 1}}$,这里将Y再次第1个方程$AX + UY = I$,得到
[egin{array}{l}
AX + U{left( {{C^{ - 1}} + V{A^{ - 1}}U}
ight)^{ - 1}}V{A^{ - 1}} = I\
AX = I - U{left( {{C^{ - 1}} + V{A^{ - 1}}U}
ight)^{ - 1}}V{A^{ - 1}}\
X = {A^{ - 1}}left[ {I - U{{left( {{C^{ - 1}} + V{A^{ - 1}}U}
ight)}^{ - 1}}V{A^{ - 1}}}
ight]\
X = {A^{ - 1}} - {A^{ - 1}}U{left( {{C^{ - 1}} + V{A^{ - 1}}U}
ight)^{ - 1}}V{A^{ - 1}}\
{left( {A + UCV}
ight)^{ - 1}} = X = {A^{ - 1}} - {A^{ - 1}}U{left( {{C^{ - 1}} + V{A^{ - 1}}U}
ight)^{ - 1}}V{A^{ - 1}}
end{array}]
关于其它证明部分,建议可以参考wiki中对Woodbury矩阵恒等式的介绍,里面有好几种不同的证明方法(直接证明、代数证明、矩阵分块推导、LDU分解推导),写的都非常好,建议喜欢追根究底的朋友认真看下。
另外,矩阵求逆引理更通用的是二项式反转定理(Binomial inverse theorem),很多的变种都可以视为二项式反转定理的特殊情况,这些变种icoolmedia还没有整理完毕,先不一一说明了。
下面就用矩阵求逆引理来解决RLS滤波器中的求逆问题,这里假定读者有最小二乘法的基础,首先给出更新滤波器输入向量相关矩阵的公式和矩阵求逆引理的表达式(下面的推导过程来自于Simon Haykin《自适应滤波器原理》第10章的学习)。
[{f{Phi }}(n) = lambda {f{Phi }}(n - 1) + {f{u}}(n){{f{u}}^{f{H}}}(n)]
[{{f{A}}^{ - 1}} = {f{B}} - {f{BC}}{left( {{f{D}} + {{f{C}}^{f{H}}}{f{BC}}} ight)^{ - 1}}{{f{C}}^{f{H}}}{f{B}}]
可以看到,上面的矩阵求逆引理与本文开始里介绍的不同,这也是一个求逆引理的变种。不多做介绍,先记下来就好,后面另在博客中详述吧。如果设:${f{A}} = Phi (n)$,${{f{B}}^{ - 1}} = lambda Phi (n - 1)$,${f{C}} = {f{u}}(n)$,${f{D}} = 1$。对波器输入向量相关矩阵迭代更新公式应用矩阵求逆引理公式,可得
[{{f{Phi }}^{ - 1}}(n) = {lambda ^{ - 1}}{{f{Phi }}^{ - 1}}(n - 1) - frac{{{lambda ^{ - 2}}{{f{Phi }}^{ - 1}}(n - 1){f{u}}(n){{f{u}}^{f{H}}}(n){{f{Phi }}^{ - 1}}(n - 1)}}{{1 + {lambda ^{ - 1}}{{f{u}}^{f{H}}}(n){{f{Phi }}^{ - 1}}(n - 1){f{u}}(n)}}]
如果设
[{f{P}}(n) = {{f{Phi }}^{ - 1}}(n)]
[{f{k}}(n) = frac{{{lambda ^{ - 1}}{f{P}}(n){f{u}}(n)}}{{1 + {lambda ^{ - 1}}{{f{u}}^{f{H}}}(n){{f{Phi }}^{ - 1}}(n - 1){f{u}}(n)}}]
这里对增益k(n)做如下变换,得到其简化形式:
[egin{array}{l}
{f{k}}(n) = {lambda ^{ - 1}}{f{P}}(n - 1){f{u}}(n) - {lambda ^{ - 1}}{f{k}}(n){{f{u}}^{f{H}}}(n){f{P}}(n - 1){f{u}}(n) \
= left[ {{lambda ^{ - 1}}{f{P}}(n - 1) - {lambda ^{ - 1}}{f{k}}(n){{f{u}}^{f{H}}}(n){f{P}}(n - 1)}
ight]{f{u}}(n) \
= {f{P}}(n){f{u}}(n) \
end{array}]
或者也可以表示为:${f{k}}(n) = {Phi ^{ - 1}}(n - 1){f{u}}(n)$。由线性最小二乘估计可知,滤波器的系数估计表示为:${{f{hat w}}(n) = {Phi ^{ - 1}}(n){f{z}}(n)}$,把增益k(n)代入,得到
[egin{array}{l}
{f{hat w}}(n) = {Phi ^{ - 1}}(n){f{z}}(n) = {f{P}}(n){f{z}}(n) = lambda {f{P}}(n){f{z}}(n - 1) + {f{P}}(n){f{u}}(n){d^*}(n) \
= lambda left[ {{lambda ^{ - 1}}{f{P}}(n - 1) - {lambda ^{ - 1}}{f{k}}(n){{f{u}}^{f{H}}}(n){f{P}}(n - 1)}
ight]{f{z}}(n - 1) + {f{P}}(n){f{u}}(n){d^*}(n) \
= {f{P}}(n - 1){f{z}}(n - 1) - {f{k}}(n){{f{u}}^{f{H}}}(n){f{P}}(n - 1){f{z}}(n - 1) + {f{P}}(n){f{u}}(n){d^*}(n) \
= {Phi ^{ - 1}}(n - 1){f{z}}(n - 1) - {f{k}}(n){{f{u}}^{f{H}}}(n){Phi ^{ - 1}}(n - 1){f{z}}(n - 1) + {f{P}}(n){f{u}}(n){d^*}(n) \
= {f{hat w}}(n - 1) - {f{k}}(n){{f{u}}^{f{H}}}(n){f{hat w}}(n - 1) + {f{P}}(n){f{u}}(n){d^*}(n) \
= {f{hat w}}(n - 1) + left[ {{f{k}}(n){d^*}(n) - {f{k}}(n){{f{u}}^{f{H}}}(n){f{hat w}}(n - 1)}
ight] \
= {f{hat w}}(n - 1) + {f{k}}(n)left[ {{d^*}(n) - {{f{u}}^{f{H}}}(n){f{hat w}}(n - 1)}
ight] \
= {f{hat w}}(n - 1) + {f{k}}(n)xi (n) \
end{array}]
这就是递归最小二乘(RLS)滤波器的系数更新公式,可以看到,这个过程,并没有对输入向量相关矩阵进行直接求逆,避免了直接求逆运算带来的复杂性。还有最后一个问题没有解决。P的初始化问题,这里简单给出来:${f{hat w}}(n) = 0$,${f{P}}(0) = {delta ^{ - 1}}{f{I}}$ 。这里$delta $是正则化参数,是为了在求解反问题或者最优化问题时解决不适定性,增加抗绕动能力时引入的,这里不做详细介绍。下面总结下递归最小二乘法的实现步骤。
[xi (n) = {d^*}(n) - {{f{u}}^{f{H}}}(n){f{hat w}}(n - 1)]
[{f{k}}(n) = frac{{{lambda ^{ - 1}}{f{P}}(n - 1){f{u}}(n)}}{{1 + {lambda ^{ - 1}}{{f{u}}^{f{H}}}(n){f{P}}(n - 1){f{u}}(n)}}]
[{f{hat w}}(n) = {f{hat w}}(n - 1) + {f{k}}(n)xi (n)]
[{f{P}}(n) = {lambda ^{ - 1}}{f{P}}(n - 1) - {lambda ^{ - 1}}{f{k}}(n){{f{u}}^{f{H}}}(n){f{P}}(n - 1)]
终于推导完毕,以上步骤的实现代码及工程可以在博文下面的QQ交流群的群文件中找到(TestRLS_using the matrix inversion lemma.rar)。本人水平有限,如以上证明和推导过程及代码如有错误之误,还请大家及时给予批评指正。