logo资料库

自适应滤波器的MATLAB实现.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
MATLAB MATLAB 自适应滤波器的 MATLAB MATLAB 实现 2009 级 通信与信息系统 李晓燕 1111 引言 滤波是信号与信息处理领域的一种最基本而又重要的技术。在信号的传输过程中,通常会受到噪声或 干扰的污染,而滤波器就是用来从含有噪声或干扰信号的数据中提取人们感兴趣的、接近规定质量的信息。 滤波器实际上是一种选频系统,它对某些频率的信号予以很小的衰减,让该部分信号顺利通过;而对其他 不需要的频率信号则予以很大的衰减,尽可能阻止这些信号通过。 2222 自适应滤波器简介 在设计维纳和卡尔曼滤波器时,要求已知所要处理的数据统计方面的先验知识。只有当输入数据的统 计特性与滤波器设计所依赖的某一先验知识匹配时,该滤波器才是最优的。但在很多情况下人们对此并不 知道或知道甚少,某些情况下这些统计特性还是时变的。为了处理上述的这种情况,可采用自适应滤波器。 采用这样的系统,意味着滤波器是自设计的,即自适应滤波器依靠递归算法进行计算,这使其有可能在无 法获得有关信号特征完整知识的环境下,完满的完成滤波运算。 3333 自适应滤波器的应用 自适应滤波器具有在未知环境下良好运行并跟踪时变输入统计量的能力,使得自适应滤波器成为信号 处理和自动控制应用的有力手段。实际上,自适应滤波器已经成功的应用与雷达、通信、声纳、地震学和 生物医学工程等领域。这些应用在特性方面千变万化,但有一个共同的基本特征,即用输入向量和期望响 应来计算估计误差,并用该误差依次控制一组可调滤波器系数。然而自适应滤波器各种应用之间的本质不 同在于其期望响应的获取方式不同,根据这一原则,可将自适应滤波器应用分为四种类型,如下: 自适应滤波的类型 应用 用途 辨识 逆模型 系统辨识 给定一个未知的动态系统,设计一个自适应滤波器以逼近该动态系统 分层地球建模 在地震探测中,开发研究地球的分层模型 均衡 给一个未知脉冲的信道,自适应均衡器通过操作信道输出,使得信道与均衡器 的级联提供理想传输媒介的一个良好逼近 预测 预测编码 自适应预测用来对感兴趣的信号建模,而不是直接对信号编码。在该编码中, 预测误差被编码以便于传输和存储。 谱分析 预测模型用于估计某一感兴趣信号的功率谱 消除干扰 噪声消除 从接收信号中去除噪声以改善信噪比,如心电图学中的应用 波束形成 自适应波束形成器用于控制加权系数以便消除与未知方向阵列密切有关的干扰 信号,并对感兴趣的目标信号提供保护 4444 自适应滤波器的原理 自适应滤波器是相对固定滤波器而言的。固定滤波器属于经典滤波器,它滤波的频率是固定的。而自 适应滤波器滤波的频率则是自动适应输入信号而变化的,所以其适用范围更广。在没有任何关于信号和噪 声的先验知识的条件下,自适应滤波器利用前一时刻已获得的滤波器参数等结果来自动调节现时刻的滤波 器参数,以适应信号和噪声未知或随机变化的统计特性,从而实现最优滤波。自适应滤波器实质上就是一 种能调节其自身传输特性以达到最优化的维纳滤波器。 自适应滤波器一般由两部分组成:滤波器结构和调整滤波器系数的自适应算法。自适应滤波器的结构
采用 FIR 或 IIR 结构均可,但由于 IIR 滤波器存在稳定性问题,因此一般采用 FIR 滤波器作为自适应 滤波器的结构。 自适应滤波器 上图为自适应滤波器结构的一般形式,图中 x(n)为输入信号,通过参数可调的数字滤波器后产生输出 信号 y(n),再将 y(n)与期望信号(或为标准信号) d(n)进行比较后,得到了误差信号 e(n)。e(n)和 x(n)通过自 适应算法对滤波器的参数进行调整,最终使得误差信号 e(n)最小。 自适应滤波器设计中最常用的是 FIR 横向型结构。 横 向 型 滤 波 器 上图是横向型滤波器的结构示意图。其中:x(n)为自适应滤波器的输入;w(n)为自适应滤波器的冲激 响 应 ; w(n)={ w(0) , w(1) , … , w(N-1) } ; y(n) 为 自 适 应 滤 波 器 的 输 出 ; y(n)= x(n)* w(n) 。 即 N 1 inxnw ()( ) − i 。 = T = )( nXnWny )( )( ∑− 5555 自适应滤波算法 i = 0
自适应滤波器主要是根据其输入的统计特性进行设计的。自适应滤波器的算法则以各种判据条件作为 推算基础。通常有两种判据条件:最小均方误差判据和最小二乘方判据。LMS 算法是以最小均方误差为判 据的最典型的算法,也是一种易于实现、性能稳健、应用广泛的算法。LMS 算法最显著的特点是它的简单 性,此外它不需要计算有关的相关函数,也不需要矩阵求逆运算。 LMS 算法是一种有用的估计梯度的方法,其目的是通过调整系数,使输出误差序列 e(n)=d(n)-y(n)的均 方值最小化,并且根据这个判据来修改权系数。其中误差序列的均方值又叫 “均方误差” (Mean Sqluare Error,MSE)。一般来说,此算法包含两个基本过程:一是滤波过程,包括计算滤波器输出对输入信号的响 应和通过比较输出结果与期望响应产生估计误差。二是自适应过程,即根据估计误差自动调整滤波器参数。 这两个过程一起工作组成一个反馈环。 LMS 算法最核心的思想是用平方误差代替均方误差。即 ∧ ∂ n )( nen )( 2 ∆ )( =∇≈∇ w ∂ nene )( )(2 w ∂ n )( ∧ ∇ = ∂ ∴ 2 ∂ ∂ nene )( )( 2 ∂ ωω ∂ nxne )()(2 1 0 = [ −= ...... T ne ])( 2 ∂ ω ∂ l 将上式带入最陡下降法迭代计算权矢量的公式,得 nw ( )1 =+ nw )( ∧ ∇− µ n )( LMS 算法的基本公式是: nw 2)( )1 =+ µ+ nw ( nxne )()( 其中µ是收敛因子,又称为步长参数,决定了收敛速度和稳定性,µ满足: , maxλ 是 xxR 的最 0 µ〈 〈 1 λ max 大特征值, nXnXER )}( xx = )({ T 。 使用 MATLAB 这个工具可以较好的观察和分析各种 LMS 的收敛性能。 基本 LMS 算法的 M 程序: clear all close all clc a1 = -0.195; a2 = 0.95; u = 0.03; %步长因子 N = 2; %滤波器阶数 N1 = 1000;%数据总长 N2 = 512;%截取长度 K = 100;%独立实验次数 var_v = 0.0961;%噪声方差 M1 = 0;%理论失调参数 M2 = 0;%计算失调参数 p1 = 0.9; p2 = 1.1; u1 = zeros(1,N1); u2 = zeros(1,N2); Jn_aver = zeros(1,N2); W = zeros(1,N); J = 0; for i = 1:K v = sqrt(var_v)*randn(1,N1); for m = 1:N1-2 u1(m+2) = -a1*u1(m+1)-a2*u1(m)+v(m); end u2 = u1(N1-N2+1:N1);%取后 N2 个稳定值 w = zeros(1,N);%初始化权向量 w(0)=w(1)=0 err = 0;%估计误差 d = 0;%期望信号 u3 = zeros(1,N);%输入向量初始化 u4 = [zeros(1,N) u2]; Jn = zeros(1,N2); for n = 1:N2
w = w+u*u3*conj(err);%权向量的更新 u3 = u4(n+N-1:-1:n);%更新输入向量 u3 = [u4(n+1) u4(n)] d = conj(w)*(u3.');%期望信号估计 err = u4(n+2)-d;%估计误差 Jn(n) = (abs(err)).^2;%均方误差 end Jn_aver = Jn_aver+Jn; W = W+w; end EJex_inf = u*var_v*(p1+p2)/(2-u*(p1+p2))%剩余均方误差统计平均值 E[Jex(inf)] M1 = EJex_inf/var_v%计算理论失调 W = W./K%权向量 Jn_aver = Jn_aver./K; Jex_n = Jn_aver(N2)-var_v%n 次迭代后的剩余均方误差值 M2 = Jex_n/var_v%n 次迭代后的失调 plot(Jn_aver); title(['LP(2)LMS 学习曲线 u=0.05, w=',num2str(W)]) grid on xlabel('n/迭代次数'); ylabel('E[Jn(n)]'); axis([1 512 0 1.5]); 6666 自适应滤波算法的理论仿真 采用自适应滤波器技术可以实现信噪分离,也就是去噪。用 Matlab 工具编程如下: samples_per_period=40;%周期采样频率 N=10*samples_per_period-1;%总采样次数 signal=sin(2*pi*0.02*[0:N-1]);% signal=sin(2*pi*0.02*[0:N-1]);% signal=sin(2*pi*0.02*[0:N-1]);% signal=sin(2*pi*0.02*[0:N-1]);%初始输入信号 figure;%作图 1 的第一子图 subplot(2,1,1); plot(signal); grid; title('自适应滤波器的理想输入'); nvar=0.5;%噪声方差 noise=nvar*randn(1,N);%噪声信号 X=signal+noise;%带加性噪声的输入信号 delayX=[0 X];%输入信号延时 SIGNAL=[signal 0]; MMMM=32;%滤波器长度 mu=0.035;%迭代步长 subplot(2,1,2);%作图 1 的第二子图 plot(delayX); grid; title('自适应滤波器的噪声输入'); initial_status=initlms(zeros(1,M),mu);%滤波器设初值 [Y,e,initial_status]=adaptlms(X,SIGNAL,initial_status);%LMS 自适应滤波器输出 figure; plot(0:N-1,Y,'.',0:N,SIGNAL,'k'); grid; title('预测信号与实际信号的比较'); legend('预测信号','实际信号'); 当 signal=sin(2*pi*0.02*[0:N-1]) ①M=32
②M=16 ③M=64
当 signal=sin(2*pi*0.01*[0:N-1]) ①M=32 ②M=16
③M=64 可以看出,LMS 自适应滤波器在噪声消除方面具有很好的效果,且在信噪比较小的情况下也可以完成 一定条件下的数字滤波任务,但此法仍然有许多需要改进的地方,如在信噪比较小的时候,需要滤波器的 长度比较大,这样滤波器在实时处理方面受到很大限制。
分享到:
收藏