自适应滤波算法原理及其应用

标签:
信号处理自适应滤波算法matlab程序 |
分类: 信号处理 |
To learn, to share, to debate, then comes progress.
该博文整理自课程研究报告,详细内容可参见:
https://wenku.baidu.com/view/9c293150c950ad02de80d4d8
1.算法背景
经典的滤波算法包括维纳滤波,卡尔曼滤波,这些滤波算法都需要对输入信号的相关系数,噪声功率等参数进行估计,而实际中很难实现这些参数的准确估计,而这些参数的准确估计直接影响到滤波器的滤波效果。另一方面,这两类滤波器一般设计完成,参数便不可改变,实际应用中,希望滤波器的参数能够随着输入信号的变化而改变,以取得较好的实时性处理效果。为了弥补传统滤波算法的不足,满足信号处理的要求,又发展了自适应滤波。
2.算法基本原理
自适应滤波与维纳滤波,卡尔曼滤波最大的区别在于,自适应滤波在输出与滤波系统之间存在有反馈通道,根据某一时刻滤波器的输出与期望信号的误差调整滤波器的系数,从而实现滤波器系数的动态调整,实现最优滤波。
(1)信号模型
自适应滤波的目的仍然是从观测信号中提取真实准确的期望信号,因此涉及到的信号有:
期望信号 d(n)
输入信号 x(n)=d(n)+v(n)
输出信号 y(n)
(2)算法原理
一个M阶滤波器,系数为w(m),则输出为:
y(n)=Σw(m)x(n-m)
写成矩阵形式:
n时刻的输出误差为:
定义目标函数为 E[e(j)^2],则有:
J(j)=E[e(j)^2]= E[(d(j)- WT(j)*X(j))^2]
当上述误差达到最小时,即实现最优滤波,这种目标函数确定的为最小方差自适应滤波。
对于目标函数J(j),需要求得使其取到最小值对应的W,这里使用梯度下降法进行最优化:
W(j+1)=W(j)+1/2*μ(-▽J(j))
▽J(j)=-2E[X(j)*( d(j)- WT(j)*X(j))]= -2E[X(j)e(j)]
W(j+1)=W(j)+μE[X(j)e(j)]
其中-2X(j)e(j)称为瞬时梯度,因为瞬时梯度是真实梯度的无偏估计,这里可以使用瞬时梯度代替真实梯度。
W(j+1)=W(j)+μX(j)e(j)
由此,可以得到自适应滤波最佳系数的迭代公式。
3.算法的收敛性
在最小均方误差自适应滤波算法中,最佳滤波器系数应该满足:
▽J(j)=0
即:-2E[X(j)*( d(j)- WT(j)*X(j))]=0
经整理后,可以得到:
WoptT =Rxx-1*Rxd
上式说明,自适应滤波的最佳滤波器系数同维纳滤波相同,与输入信号以及期望信号的相关矩阵有关。
对W(j+1)=W(j)+μX(j)e(j)等号两边求期望,并通过一系列推导,可得:
E[W(j+1)]=Wopt+Q(I-μΛ)jQH(W0-Wopt)
式中Rxx=QHΛQ, W0为自适应滤波系数的初值。
当j取到无穷大时,滤波器应达到最优状态,因此:
(I-μΛ)j=0,则有:|I-μΛ|<=1
上式即为最小均方自适应滤波的收敛条件。
Λ为输入信号的自相关矩阵Rxx的特征值构成的对角阵。
4.变步长自适应滤波算法
在整个迭代过程中,步长不变的情况称为定步长算法。为了保证算法的收敛性,一般要取一个比较小的步长值,但步长过小又容易导致算法收敛过慢。比较理想的情况是,在迭代的初始阶段,误差值较大时,取一个较大的迭代步长,以实现较快的收敛速度;随着迭代次数增加,误差逐渐减小,步长也应相应减小,达到较高的收敛精度。这种思想便称为变步长自适应滤波算法。
常用的变步长自适应滤波算法根据输入信号的或者误差值确定步长。
这里介绍两种具体的变步长算法:
(1)归一化变步长自适应滤波算法
μj =α/(β+XjTXj)
α,β均为常数,且满足0<α<2,β>=0。
该算法使用输入信号的能量对步长因子进行归一化,确保其取到合适的值。
(2)Sigmod函数变步长自适应滤波算法
μj=β(1-exp(-αej^2))
α,β均为常数,且满足0<α,0=<β<μmax。
从上述表达式中可以明显看出,随着误差增大,步长值也增大。
5.解相关自适应滤波算法
实验发现,当输入信号之间的相关性比较强时,自适应滤波的效果比较差。因此需要去除相邻两次输入信号序列的相关性,以得到较好的滤波效果。
解相关自适应滤波算法的实现过程为:
r= XjTXj-1/ Xj-1TXj-1
Zj=Xj-rXj-1
6.变换域自适应滤波算法
根据解相关自适应滤波算法的思想,使用一组正交基对输入信号进行变换,在变换域上进行自适应滤波,最后再将滤波结果逆变换至时间域。常见的变换有傅里叶变换,分数阶傅里叶变换,小波变换,余弦变换。
7.算法应用与实现
下面讲述如何在实际问题中应用自适应滤波算法:
问题背景:一个点目标在x,y平面上绕单位圆做圆周运动,由于外界干扰,其运动轨迹发生了偏移。其中,x方向的干扰为均值为0,方差为0.05的高斯噪声;y方向干扰为均值为0,方差为0.06的高斯噪声。
问题分析与思路:
将物体的运动轨迹分解为X方向和Y方向,并假设两个方向上运动相互独立。分别将运动轨迹离散为一系列点,作为滤波器的输入,分别在两个方向上进行滤波,最终再合成运动轨迹。
程序设计思路:
生成期望信号-添加噪声-设置滤波器系数初值-迭代运算-最优滤波输出
滤波结果分析:
http://s8/bmiddle/003qTDx1zy7c39Fh0X5f7&690
http://s16/mw690/003qTDx1zy7c39Fzuhhbf&690
http://s3/mw690/003qTDx1zy7c39FNXNg82&690