维纳滤波器自适应算法-SD与LMS算法(附Matlab代码)

1.维纳滤波器基本理论

滤波器系统如下图:

  • 学习过程:K1打向A1,K2打向A2,求取横向滤波器最优权向量。
  • 工作过程:K1打向B1,K2打向B2,对输入信号进行滤波处理。

上述两个过程中,求滤波器最优权向量的学习过程是最优滤波的关键!

上图中的横向滤波器结构如下图,学习过程的任务就是求最优权向量$\vec{w}=\left[ w_{0} \quad w_{1} \cdots w_{M-1} \right]^{T}$

  • $d\left(n\right)$:期望响应
  • $\hat{d}\left(n\right)$:对期望响应的估计,$\hat{d}\left(n\right) = \sum_{i=0}^{M-1}w_{i}^{}u\left(n-i\right )=\vec{w}^{H}\vec{u}\left(n \right )=\vec{u}^{T}\left(n \right )\vec{w}^{n}$
  • $e\left( n \right)$:估计误差,$e\left(n\right) = d\left(n\right)-\hat{d}\left(n\right)$

定义$E\left(n\right)$的平均功率为:

$$J\left(w\right)=\left\{ \left|e \left(n \right)\right|^{2}\right\}=\sigma_{d}^{2}-\vec{p}^{H}\vec{w}-\vec{w}^{H}\vec{p}+\vec{w}^{H}R\vec{w}\quad(1)$$

其中:

  • $d\left( n \right)$的平均功率为:$\sigma_{d}^{2}=E\left\{\left|d\left(n\right)\right|^{2}\right\}$。
  • 互相关向量:$p=E\left\{\vec{u}\left(n\right)d^{*}\left(n\right)\right\}$。
  • $u\left(n\right)$的自相关矩阵:$R=E\left\{\vec{u}\left(n\right)\vec{u}^{H}\left(n\right)\right\}$。

$J\left(\vec{w}\right)$也被称为误差性能面或者均方误差。

利用凸优化知识对$J\left(\vec{w}\right)$求梯度并令梯度为0,即:

$$\bigtriangledown J\left ( \vec{w} \right )=-2\vec{p}+2R\vec{w}=0\quad(2)$$

化简得到维纳-霍夫方程

$$R\vec{w_{0}}=\vec{p}\quad(3)$$

$R$是非奇异的,方程两边同时乘以$R^{-1}$得到最优权向量$\vec{w}_{0}$

$$\vec{w_{0}} = R^{-1}\vec{p}\quad(4)$$

2.维纳滤波自适应算法

直接利用维纳-霍夫方程求滤波器的最优权向量涉及矩阵求逆$(R^{-1})$,计算量大,工程上实现困难!使用自适应算法替代矩阵求逆去调整$\vec{w}\left(n\right)$,使得误差最小。

2.1 最陡下降算法(SD)

沿着$J\left(\vec{w}\right)$的负梯度方向调整权向量$\vec{w}$以寻求最优权向量。

$$\vec{w}\left(n+1\right)=\vec{w}\left(n\right)+\vec{\Delta w}\quad(5)$$

$$\vec{\Delta w}=-\frac{1}{2} \mu \bigtriangledown J\left(\vec{w}\left(n\right)\right)\quad(6)$$

由式(2)、(5)、(6)可以得到:

$$\vec{w}\left(n+1\right)=\vec{w}\left(n\right)+\mu \left[\vec{p}-R\vec{w}\left(n\right)\right]\quad(7)$$

$\mu>0$被称为步长参数或步长因子,该参数对自适应算法发迭代速度有很大影响。

2.2 LMS(最小均方)算法

由(7)式可知:

  • 若互相关向量p和自相关矩阵R确定,SD算法的迭代过程和结果就已经确定;
  • SD算法基于统计和概率的思想,其结果与输入信号的变化无关,不具有自适应性。

对于平稳随机信号,若该信号是各态历经(均方遍历)的,则可用时间平均代替统计平均,用时间自相关代替统计自相关。

$$R\doteq\hat{R}=\frac{1}{N}\sum_{i=1}^{N}u\left(i\right)u^{H}\left(i\right)=\vec{u}\left(n\right)\vec{u}^{H}\left(n\right)\quad(8)$$

$$\vec{p}\doteq\vec{\hat{p}}=\frac{1}{N}\sum_{i=1}^{N}u\left(i\right)d^{*}\left(i\right)=\vec{u}\left(n\right)d^{*}\left(n\right)\quad(9)$$

由式(7)、(8)、(9)可得:

$$\vec{\hat{w}}(n+1) =\vec{ \hat{w}}\left(n\right)+\mu \vec{u}\left(n\right)e^{*}\left(n\right)\quad(10)$$

(10)式就是LMS算法的迭代过程。

2.2.1 LMS算法与SD算法的区别与联系

  • SD算法中,互相关向量$\vec{p}$和自相关矩阵$R$都是确定量,得到的$\vec{w}\left(n\right)$是确定的向量序列。
  • LMS算法中,$\vec{u}\left(n\right)$和$\vec{e}\left(n\right)$都是随机过程,所以$\vec{\hat{w}}\left(n\right)$是随机向量。
  • LMS算法是一种随机梯度算法。
    $$\hat{\bigtriangledown}J\left(n\right)=-2\vec{\hat{p}}+2\hat{R}\vec{w}\left(n\right)=-2\vec{u}(n)e^{*}(n)$$

2.2.2 LMS算法步骤

  1. 初始化:n=0
    权向量:$\vec{\hat{w}}(0)=\vec{0}$
    估计误差:$e(0) = d(0)-\hat{d}(0)=d(0)$
    输入向量:$\vec{u}(0)=[u(0)\quad u(-1) \cdots u(-M+1)]^{T}=[u(0)\quad 0 \cdots 0]^{T}$
  2. n=0,1,2...
    更新权向量:$\vec{\hat{w}}(n+1) =\vec{ \hat{w}}\left(n\right)+\mu \vec{u}\left(n\right)e^{*}\left(n\right)$
    更新期望信号的估计:$\hat{d}(n+1)=\vec{\hat{w}}^{H}(n+1)\vec{u}(n+1)$
    更新估计误差:$e(n+1)=d(n+1)-\hat{d}(n+1))$
  3. 令n=n+1,转到步骤2。

3.算例

(1):产生512点AR过程样本序列。(样本序列为512点时μ=0.005的迭代过程尚未收敛,所以实验分别用512点和512*4点做了对比试验)

(2):在不同步长情况下(μ=0.05和μ=0.005)用LMS滤波器估计w1和w2。

(3):在(2)的条件下进行100次独立实验计算剩余均方误差和失调参数,并画出学习曲线。

(4):比较μ=0.05和μ=0.005时二者学习曲线的区别。

4.Matlab仿真结果

图1 样本序列(N=512)
图2 滤波器权系数迭代(N=512*4,μ=0.05)
图3 滤波器权系数迭代(N=512*4,μ=0.005)
图4 学习曲线(N=512*4)
 步长J(∞)JM
μ=0.050.00380.00520.0516
μ=0.0050.00040.00040.0049
表1 剩余均方误差(J)和失调参数(M)

由表1可以看到当样本点数足够多时,得到的剩余均方误差J可以较好的逼近J(∞)。

由图4和表1可以看到μ=0.005的学习曲线收敛的较慢,μ=0.05的学习曲线收敛的较快,但μ=0.005的学习曲线最后收敛的值更小,即误差更小。还可以看到μ越小,失调参数M越小,稳定性能更好。

5.Matlab源码

点此下载源码!

你可能也喜欢

0 0 vote
Article Rating
Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top