logo资料库

毕业设计 一种改进的自适应滤波LMS算法的matlab实现.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
一、综述 自适应滤波是近 30 年以来发展起来的 一种最佳滤波方法。它是在维纳滤 波,kalman 滤波等线性滤波基础上发展起来的一种最佳滤波方法。由于它具有 更强的适应性和更优的滤波性能。从而在工程实际中,尤其在信息处理技术中得 到广泛的应用。自适应滤波的研究对象是具有不确定的系统或信息过程。“不确 定”是指所研究的处理信息过程及其环境的数学模型不是完全确定的。其中包含 一些未知因数和随机因数。任何一个实际的信息过程都具有不同程度的不确定 性,这些不确定性有时表现在过程内部,有时表现在过程外部。从过程内部来讲, 描述研究对象即信息动态过程的数学模型的结构和参数是我们事先不知道的。作 为外部环境对信息过程的影响,可以等效地用扰动来表示,这些扰动通常是不可 测的,它们可能是确定的,也可能是随机的。此外一些测量噪音也是以不同的途 径影响信息过程。这些扰动和噪声的统计特性常常是未知的。面对这些客观存在 的各种不确定性,如何综合处理信息过程,并使某一些指定的性能指标达到最优 或近似最优,这就是自适应滤波所要解决的问题。 二、 自适应滤波器的基本原理 所谓的自适应滤波,就是利用前一时刻以获得的滤波器参数的结果,自动的 调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性, 从而实现最优滤波。自适应滤波器实质上就是一种能调节其自身传输特性以达到 最优的维纳滤波器。自适应滤波器不需要关于输入信号的先验知识,计算量小, 特别适用于实时处理。由于无法预先知道信号和噪声的特性或者它们是随时间变 化的,仅仅用 FIR 和 IIR 两种具有固定滤波系数的滤波器无法实现最优滤波。在 这种情况下,必须设计自适应滤波器,以跟踪信号和噪声的变化。 自适应滤波器的特性变化是由自适应算法通过调整滤波器系数来实现的。一般而 言,自适应滤波器由两部分组成,一是滤波器结构,二是调整滤波器系数的自适 应算法。自适应滤波器的结构采用 FIR 或 IIR 结构均可,由于 IIR 滤波器存在稳 定性问题,因此一般采用 FIR 滤波器作为自适应滤波器的结构。图 1 示出了自适 应滤波器的一般结构。 图 1 中,x(n)为输入信号,y(n)为输出信号,d(n)为参考信号或期望信号, e(n)则是 d(n)和 y(n)的误差信号。自适应滤波器的滤波器系数受误差信号 e(n) 1
控制,根据 e(n)的值和自适应算法自动调整。 x(n) d(n) 参数可调的数字滤波器 y(n) - ∑ e(n) 自适应算法 + 图 1 自适应滤波器的原理图 三、 最小均方(LMS)自适应算法的基本原理 最小均方(LMS)自适应算法就是一种已期望响应和滤波输出信号之间误差 的均方值最小为准的,依据输入信号在迭代过程中估计梯度矢量,并更新权系数 以达到最优的自适应迭代算法。LMS 算法是一种梯度最速下降方法,其显著的特 点是它的简单性。这算法不需要计算相应的相关函数,也不需要进行矩阵运算。 图 2 LMS 自适应原理框图 令 d(n)表示“期望输出信号”,定义误差信号 e(n)为 e(n)=d(n)一 y(n)=d(n)一 x(n) Tw(n)=d(n)-w(n)Tx(n) (1) 为了方便起见,将上述式子表示为向量形式,令信号矢量为:x(n)=[x1(n), x2(n),…, xM(n)]T。权矢量为:w(n)=[w1(n), w2(n),…, wM(n)]T。则上述式子表 示为: y(n)=wT(n)x(n) (2) 误差序列可写为 e(n)=d(n)-y(n)=d(n)-wT(n)x(n) (3) 显然,自适应滤波器控制机理是用误差序列 e(n)按照某种准则和算法对其系数 2
{ wi(n)},i=1,2,…,M 进行调节的,最终使自适应滤波的目标(代价)函数 最小化,达到最佳滤波状态。按照均方误差(MSE)准则所定义的代价函数是: F(e(n)) = E[e2(n)] = E[d2(n)-2d(n)y(n)+y2(n)] (4) 将式(2),(3)代入(4),目标函数可写成 F(e(n)) = [d2(n)]-2wTP+wTRw (5) 其中,R=E[x(n)xT(n)]是输入信号的自相关矩阵;P=E[d(n)x(n)]是期望信号与 输入信号的互相关矢量。 由式(5)可见,自适应滤波器的代价函数是延迟线抽头系数的二次函数。当矩 阵 R 和矢量 P 已知时,可以由权系数矢量 w 直接求其解。将式(5)对 w 求其偏 导数,并令其等于零,同时假设 R 是非奇异的,由此可得代价函数最小的最佳滤 波系数 w*为 w*=R-1P (6) 这个解称为维纳解,即最佳滤波系数值。因为均方误差(MSE)函数是滤波系数 w 的二次方程,由此形成一个多维的超抛物面,这好像一个碗状曲面又具有唯一 的碗底最小点,通常称之为自适应滤波器的误差性能曲面。当滤波器工作在平稳 随机过程的环境下,这个误差性能曲面就具有固定边缘的恒定形状。自适应滤波 系数的起始值{wi(0)},i=1,2,…,M 是任意值,位于误差性能曲面上某一点, 经过自适应调节过程,使对应于滤波系数变化的点移动,朝碗底最小点方向移动, 最终到达碗底最小点,实现了最佳维纳滤波。 自适应过程是在梯度矢量的负方向接连的校正滤波系数的,即在误差性能曲 面的最陡下降法方向移动和逐步校正滤波系数,最终到达均方误差为最小的碗底 最小点,获得最佳滤波或准最优工作状态。 令代表 n 时刻的 M×1 维梯度矢量,M 等于滤波器系数的数目;w(n)为自 适应滤波器在 n 时刻的滤波系数或权矢量。按照最陡下降法调节滤波系数,则在 n+1 时刻的滤波系数或权矢量 w(n+1)可以用下列简单递归关系来计算: w(n+1)=w(n)-  (7) 式中,是控制搜索步长的参数称为自适应增益常数,或收敛参数; 是 曲面上各点的梯度。 最陡下降法每次迭代都需要知道性能曲面上某点的梯度值,而实际上梯度只 3
能根据观测数据进行估计。LMS 算法是一种很有用且很简单的估计梯度的方法, 这种算法自 60 年代初提出以后很快得到广泛应用,它的突出优点是计算量小、 易于实现,且不要求脱线计算日。只要自适应线性组合器每次迭代运算时都知道 输入信号和参考响应,那么,选用 LMS 算法就很合适的。 LMS 算法的最核心思想是用平方误差代替均方误差。这样,   w )( n   e  2 )( n w  )(2 ne  )( ne w   )(2 ne x N )( n (8) 表示梯度向量的估计,实际上它是单个平方误差序列的梯度,现用 它代替多个平方误差序列统计平均的梯度 w )(n ,这就是 LMS 算法最基本的思 想。 由此,得出 LMS 算法的迭代公式为: ( nw )1  -w(n)   )( n  2)( nw  )( ne  xN )( n (9) 该式说明,LMS 算法实际上是在每次迭代中使用很粗略的梯度估计值来代替精确 值。不难预计,权系数的调整路径不可能准确地沿着理想的最陡下降的路径,因 而权系数的调整过程是有“噪声”的。LMS 算法按照式(9)调整权系数时不需要 进行平方运算和统计平均运算,因而实现起来很简单。下一时刻权矢量 w(n+1) 等于当前权矢量 w(n)加上一个修正量,该修正量等于误差信号 e(n)的加权值, 加权系数为 nxN )( 2 ,它正比于当前的输入信号。值得注意的是,对权矢量的 所有分量来说,误差信号 e(n)是相同的,并且 LMS 算法得到的权矢量的期望值 与最陡下降法得到的权矢量本身都服从相同的迭代计算规律,当收敛的必要条件 满足时,随着迭代次数趋进于无穷,权矢量的期望值将趋近于最佳权矢量。 由上式可得到自适应 LMS 算法如同最陡下降法,利用时间 n=0 的滤波系数矢量为 任意的起始值 w(0),然后开始 LMS 算法的计算,其步骤如下: a.由现在时刻 n 的滤波器滤波系数矢量估值 w(n),输入信号矢量 x(n)及期望信 号 d(n),计算误差信号:e(n)=d(n)-xT(n) w(n) (10) b.利用递归法计算滤波系数矢量的更新估值: ( nw )1  (11) 2)( nw  )( ne xN )( n c.将时间指数 n 增加 1,回到第一步骤,重复上述计算步骤,一直到达稳定状态 4
为止。 由此可见,自适应 LMS 算法简单,它既不需要计算输入信号的相关函数,又 不要求矩阵之逆。因而得到了广泛的应用。但是,由于 LMS 算法采用梯度矢量的 瞬时估计,它有大的方差,以致不能获得最优滤波性能。 d.下面给出了 LMS 算法的 MATLAB 主要程序段 wl=0; w2=0; %权系数初值 e=zeros(1,length(x)); y=0; u=0.05; for i=1:1000 %LMS 算法 y=wl x1(i)+w2 x2(i); e(i)=x(i)-y; wl=wl+2*u*e(i)*xl(i); w2=w2+2*u*e(i)*x2(i); 四、 归一化 LMS 算法原理 若不希望用与估计输入信号矢量有关的相关矩阵来加快 LMS 算法的收敛速 度,那么可用变步长方法来缩短其自适应收敛过程,其中一个主要的方法是归一 化 LMS 算法(NLMS 算法),NLMS 使得算法对输入信号较大的情况下避免梯度噪声 放大的干扰,因而具有更好的收敛性能。 归一化 LMS 算法可以看作是时变步长参数的 LMS 算法。算法的指导思想是:时 刻根据滤波器的输入 x(n)来时刻调整算法的步长μ(n),x(n)与稳态误差 成正比,μ(n)则与稳态误差成反比,随着输入 x(n)的逐渐增大,滤波器的 稳态误差也会逐渐增大,此时需要通过调整步长μ(n)来减小稳态误差。归一 化 LMS 算法是通过输入向量 x(n)的平方欧氏范数对步长μ进行“归一化”。归 一化 LMS 算法的变步长μ的公式为   )( n  1 )( nx 2 (12) 式中μ1 为算法所取的初始步长,用输入 x(n)的平方欧氏范数即二范数去除算 5
法的初始步长μ1,随着输入的增大,变步长μ(n)逐渐的减小,算法的稳态误差 也相应逐步减小,具有很好的跟踪收敛效果。可见归一化 LMS 算法与变步长 LMS 算法相比,具有更快的收敛速度与更小的稳态误差。 下面给出了 NLMS 算法的 MATLAB 主要程序段 for i=1:100000 %NLMS 算法 y=w1*x1(i)+w2*x2(i); r(i)=x(i)*x(i)'; %自相关矩阵 fai=.0001; %修正参数,为防止 x(i)*x(i)'过小导致步长值太大而设置的 e(i)=x(i)-y; error(i)=s(i)-e(i); ee=error(i)^2; if ee>0.0005; ee=0.0005; end mu=xuanze(mu,ee); w1=w1+mu*e(i)*x1(i)/(r(i)+fai); %NLMS 变步长 w2=w2+mu*e(i)*x2(i)/(r(i)+fai); %NLMS 变步长 end 五、 变步长 LMS 自适应滤波算法原理 收敛速度、时变系统的跟踪能力及稳态失调是衡量自适应滤波算法优劣的三 个最主要的技术指标。由于 LMS 算法的加权矢量 w(n)具有随机性,使得 LMS 算 法 在 E[w(n)] 收 敛 到 最 佳 值 w* 后 , 加 权 矢 量 w(n) 继 续 按 公 式 ( nw )1  2)( nw  )( ne xN )( n (12)变化,其修正量 2μe(n)x(n)不为零而是继 续随机起伏,从而使得 LMS 算法的 E[w(n)]收敛到 w*后,均方误差ξ将大于维纳 误差ξmin。同时,由于输入端不可避免地存在干扰噪声,LMS 算法将产生参数 失调噪声。干扰噪声 Vn 越大,所引起的失调噪声就越大。步长因子μ值对 E[wi(n)] 的收敛过程有着很大的影响,值必须满足收敛条件。此外,在收敛范围内,μ值 越大,E[wi(n)]收敛越快。但μ过大时,过度过程将出现振荡,MSE 也会变大; 减小μ值可以减小自适应滤波算法的稳态失调噪声,提高算法的精确度。然而, 6
步长因子μ的减小将降低算法的收敛速度和跟踪速度。因此,固定步长的自适应 滤波算法在收敛速度、时变系统跟踪速度与收敛精度方面对步长因子μ的要求是 相互矛盾的。 变步长 NLMS 算法在很大程度上减少了基本 LMS 算法在收敛过程中对梯度噪 声的放大作用。在训练均衡器抽头系数时,如果在算法简单的同时要求获得较佳 的 MSE 和较快的收敛速度,NLMS 将是一种比较好的选择。为了进一步提高性能, 这种变步长的更新算法改进了 NLMS 算法,计算量增加很少,但是能显著地提高 收敛速度,并且收敛后能达到更小且稳定的 MSE。这种算法的步长迭代更新方程 如下: ( nw )1  )( nw  )()( nen xN )( n (13) 改进后的步长不再是固定值,是受稳态误差影响的变量,即 (  n )1   )( n  2 ne )(  (14) 并且 (  n )1  max      min  ( n    )1 )1  )1  ( n  ( n  其他   max min (15) 式(14)中,0<a<1,γ>0。式(15)为步长设定了上、下边界μmax 和μmin,μmax 限 定了最大可能的收敛速度,μmin 保证了较小的稳态误差。与固定步长的算法相 比,变步长算法的优越性在于:自适应算法的开始阶段时,误差 e(n)比较大, 根据式(14)步长μ(n)也相应地大,从而得到较快的收敛速度。当误差逐渐减小 时,μ(n)变小,因此稳态误差也很小。与固定步长 LMS 算法相比,变步长的 LMS 算法不仅有收敛快,稳态误差小的优点,而且在相同信噪比的环境中仍能保持较 好的性能。 下面给出了变步长 LMS 算法的 MATLAB 主要程序段 (a) function [mu]=xuanze(mu,ee) %定义变步长功能函数 mumax=0.20; mumin=0.00001; %步长上界 %步长下界 a=0.99;r=0.0008; %步长变化参数 7
if mu>mumax %设置步长上下界 mu=mumax; elseif mu0.0005; ee=0.0005; end mu=xuanze(mu,ee); %调用函数 w1=w1+mu*e(i)*x1(i); w2=w2+mu*e(i)*x2(i); end 六、Matlab 仿真结果分析 仿真条件: 1、自适应滤波器的阶数 N=2; 8
分享到:
收藏