课程设计学院专业年级姓名论文题目指导教师职称成绩2013年 1 月 10 日目录摘要 (1)关键词 (1)Abstract (1)Key words (1)引言 (1)1 自适应滤波器原理 (2)2 自适应滤波器算法 (3)3 自适应滤波算法的理论仿真与DSP实现 (5)3.1 MATLAB仿真 (5)3.2 DSP的理论基础 (7)3.3 自适应滤波算法的DSP实现 (9)4 结论 ................................................ 错误!未定义书签。
致谢 .................................................. 错误!未定义书签。
参考文献 .............................................. 错误!未定义书签。
自适应滤波器算法的DSP实现学生姓名:学号:学院:专业:指导教师:职称:摘要:本文从自适应滤波器的基本原理、算法及设计方法入手。
本设计最终采用改进的LMS算法设计FIR结构自适应滤波器,并采用MATLAB进行仿真,最后用DSP 实现了自适应滤波器。
关键词:DSP(数字信号处理器);自适应滤波器;LMS算法;FIR结构滤波器DSP implementation of the adaptive filter algorithmAbstract:In this article, starting from the basic principles of adaptive filter and algorithms and design methods. Eventually the design use improved the LMS algorithm for FIR adaptive filter,and use MATLAB simulation, adaptive filter using DSP.Key words:DSP;adaptive filter algorithm;LMS algorithm;FIR structure adaptive filter引言滤波是电子信息处理领域的一种最基本而又极其重要的技术。
在有用信号的传输过程中,通常会受到噪声或干扰的污染。
利用滤波技术可以从复杂的信号中提取所需要的信号,同时抑制噪声或干扰信号,以便更有效地利用原始信号。
滤波器实际上是一种选频系统,它对某些频率的信号予以很小的衰减,让该部分信号顺利通过;而对其他不需要的频率信号则予以很大的衰减,尽可能阻止这些信号通过。
在电子系统中滤波器是一种基本的单元电路,使用很多,技术也较为复杂,有时滤波器的优劣直接决定产品的性能,所以很多国家非常重视滤波器的理论研究和产品开发[1]。
近年来,尤其数字滤波技术使用广泛,数字滤波理论的研究及其产品的开发一直受到很多国家的重视。
从总的来说滤波可分为经典滤波和现代滤波。
经典滤波要求已知信号和噪声的统计特性,如维纳滤波和卡尔曼滤波。
现代滤波则不要求己知信号和噪声的统计特性,如自适应滤波。
自适应滤波器是统计信号处理的一个重要组成部分。
在实际应用中,由于没有充足的信息来设计固定系数的数字滤波器,或者设计规则会在滤波器正常运行时改变,因此我们需要研究自适应滤波器。
凡是需要处理未知统计环境下运算结果所产生的信号或需要处理非平稳信号时,自适应滤波器可以提供一种吸引人的解决方法,而且其性能通常远优于用常方法设计的固定滤波器。
此外,自适应滤波器还能提供非自适应方法所不可能提供的新的信号处理能力[2]。
1 自适应滤波原理所谓的自适应滤波,就是利用前一时刻以获得的滤波器参数的结果,自动的调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波。
自适应滤波器实质上就是一种能调节其自身传输特性以达到最优的维纳滤波器。
自适应滤波器不需要关于输入信号的先验知识,计算量小,特别适用于实时处理。
由于无法预先知道信号和噪声的特性或者它们是随时间变化的,仅仅用FIR和II 种具有固定滤波系数的滤波器无法实现最优滤波。
在这种情况下,必须设计自适应滤波器,以跟踪信号和噪声的变化。
自适应滤波器的特性变化是由自适应算法通过调整滤波器系数来实现的[3]。
一般而言,自适应滤波器由两部分组成,一是滤波器结构,二是调整滤波器系数的自适应算法。
自适应滤波器的结构采用FIR或IIR结构均可,由于IIR滤波器存在稳定性问题,因此一般采用FIR 滤波器作为自适应滤波器的结构。
图1给出了自适应滤波器的一般结构。
图1自适应滤波器的一般结构图1为自适应滤波器结构的一般形式,图中x(n)为输入信号,通过参数可调的数字滤波器后产生输出信号y(n),将输出信号y(n)与标准信号(或者为期望信号)d(n)进行比较,得到误差信号e(n)。
e(n)和x(n)通过自适应算法对滤波器的参数进行调整,调整的目的使得误差信号e(n)最小。
自适应滤波器设计中最常用的是FIR横向型结构。
图2是横向型滤波器的结构示意图。
图2横向型滤波器的结构示意图其中:x(n)为自适应滤波器的输入;w(n)为自适应滤波器的冲激响应:w(n)={w(O),w(1),…,w(N-1)};y(n)为自适应滤波器的输出:y(n)=x(n)*w(n)。
∑-=-==1)()()()()(Ni iT inxnwnXnWny自适应滤波器的结构可以采用FIR或IIR滤波器,但IIR滤波器存在稳定性的问题,因此一般采用FIR滤波器作为自适应滤波器的结构。
自适应FIR滤波器结构又可分为3种结构类型:横向型结构(Transversal Structure)、对称横向型结构(Symmetric Transversal Structure)以及格型结构(Lattice Strcuture)。
本文采用自适应滤波器设计中最常用的FIR横向型结构[4]。
2 自适应滤波算法自适应滤波器除了包括一个按照某种结构设计的滤波器,还有一套自适应的算法。
自适应算法是根据某种判断来设计的。
自适应滤波器的算法主要是以各种判据条件作为推算基础的。
通常有两种判据条件:最小均方误差判据和最小二乘法判据。
LMS 算法是以最小均方误差为判据的最典型的算法,也是应用最广泛的一种算法。
最小均方误差(Least Mean Square,LMS)算法是一种易于实现、性能稳健、应用广泛的算法。
所有的滤波器系数调整算法都是设法使y(n)接近d(n),所不同的只是对于这种接近的评价标准不同。
LMS 算法的目标是通过调整系数,使输出误差序列e(n)=d(n)-y(n)的均方值最小化,并且根据这个判据来修改权系数,该算法因此而得名。
误差序列的均方值又叫“均方误差”(Mean Square Error,MSE)。
理想信号d(n)与滤波器输出y(n)之差e(n)的期望值最小,并且根据这个判据来修改权系数wi(n)。
由此产生的算法称为LMS。
均方误差ε表示为:对于横向结构的滤波器,代入y(n)的表达式:其中:R=E[X(n)XT(n)]为N×N的自相关矩阵,它是输入信号采样值间的相关性矩阵。
P=E[d(n)X(n)]为N×1互相关矢量,代表理想信号d(n)与输入矢量的相关性。
在均方误差ε达到最小时,得到最佳权系数:它应满足下式:,,这是一个线形方程组,如果R矩阵为满秩的,R-1 存在,可得到权系数的最佳值满足:W*=R-1p。
用完整的矩阵表示为:显然φx(m)=E[x(n)x(n-m)]为x(n)的自相关值,φxd(R)=E[x(n)d(n 一k)]为x(n)与d(n)互相关值。
在有些应用中,把输入信号的采样值分成相同的一段(每段称为一帧),再求出R,P 的估计值得到每帧的最佳权系数。
这种方法称为块对块自适应算法。
如语音信号的线性预测编码LPC 就是把语音信号分成帧进行处理的。
R,P的计算,要求出期望值E,在现实运算中不容易实现,为此可通过下式进行估计:用以上方法获得最佳W*的运算量很大,对于一些在线或实时应用的场合,无法满足其时间要求。
大多数场合使用迭代算法,对每次采样值就求出较佳权系数,称为采样值对采样值迭代算法。
迭代算法可以避免复杂的R-1和P的运算,又能实时求得近似解,因而切实可行。
LMS算法是以最快下降法为原则的迭代算法,即W(n+1)矢量是W(n)矢量按均方误差性能平面的负斜率大小调节相应一个增量:W(n+1)=W(n)-μ▽(n),这个“是由系统稳定性和迭代运算收敛速度决定的自适应步长。
▽(n)为n 次迭代的梯度[5]。
对于LMS算法▽(n)为下式即E[e2(n)]的斜率:由上式产生了求解最佳权系数W*的两种方法,一种是最陡梯度法。
其思路为:设计初始权系数W(0),用W(n+1)=W(n)-μ▽(n)迭代公式计算,到W(n+1)与W(n)误差小于规定范围。
其中▽(n)计算可用估计值表达式:上式K 取值应足够大。
如果用瞬时一2e(n)X(n)来代替上面对-2E[e(n)X(n)]的估计运算,就产生了另一种算法——随机梯度法,即Widrow-Hoft 的LMS 算法。
此时迭代公式为:W(n+1)=W(n)+2ue(n)X(n)。
以后讨论的LMS 算法都是基于WidrOW-Hoff 的LMS 算法。
上式的迭代公式假定滤波器结构为横向结构。
对于对称横向型结构也可推出类似的迭代公式:W(n+1)=W(n)+2ue(n)[X(n)+X(n-N+1)]3 自适应滤波算法的理论仿真与DSP实现3.1 MATLAB仿真3.1.1 MATLAB程序仿真使用MATLAB编程,采用自适应滤波器技术实现语音去噪过程[6],程序如下:clear all;clf;pi=3.14;signal=sin(2*pi*0.055*[0:999]'); %产生输入信号noise=randn(1,1000); %产生随机噪声nfilt=fir1(11,0.4); %产生11阶低通滤波,截止频率为0.4fnoise=filter(nfilt,1,noise); %噪声信号进行FIR滤波d=signal.'+fnoise; %将噪声叠加到信号中w0=nfilt.'-0.01; % 设置初始化滤波器系数mu=0.05; % 设置算法的步长s=initse(w0,mu); %初始化自适应FIR结构滤波[y,e,s]=adaptse(noise,d,s); %进行自适应滤波t=1:200;plot(t,signal(1:200))figure(2);plot(t,d(1:200),'.-',t,y(1:200),'-');3.1.2 仿真结果(1)为了确保噪声的相关性,首先让噪声通过一个11阶的低通FIR滤波器然后将滤波后的噪声加到信号中去;(2)对程序中所使用的一些函数的详细说明,请参考MATLAB的函数说明,这些函数包括:FIR、INITSE、FILTER、PLOT、ADAPTSE等。